Entrée / sortie audio Python

Quand j'ai essayé de créer un programme qui entre la voix et la sort avec une sorte de filtre, je l'ai résumé parce qu'il était couvert d'entrée et de sortie. Écriture basée sur la norme de fichier d'un fichier audio général (fréquence d'échantillonnage de 44100 Hz, taille de bits de quantification 16 bits).

Entrée vocale

L'entrée / sortie utilise un fichier wave et importe un package wave.

input


import numpy as np
import wave

name = "filename.wav"
wavefile = wave.open(name, "r") 
framerate = wavefile.getframerate()
data = wavefile.readframes(wavefile.getnframes()) 
x = np.frombuffer(data, dtype="int16") 

Les informations requises lors de l'entrée audio à partir d'un fichier wave sont la valeur de chaque échantillonnage. .getnframes () obtient le nombre total d'échantillons. Autrement dit, la longueur des données. Obtient les données pour la longueur spécifiée par .readframes ().

Cependant, comme il est acquis en notation binaire tel quel, il est converti en type int avec frombuffer (). Vous pouvez maintenant travailler avec les valeurs du tableau numpy. La valeur à ce moment est int16, qui est une valeur comprise entre -32768 et 32767, donc ajustez-la en la divisant lors du traitement de la voix.

De plus, .getframerate () obtient le taux d'échantillonnage. Je pense que la fréquence d'échantillonnage du fichier est nécessaire pour le traitement de la voix, je l'ai donc incluse.

Après cela, il est bouilli ou cuit au four ...

Sortie audio

Je fais juste le contraire de l'entrée. .. ..

output


w = wave.Wave_write("output.wav")
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(44100)
w.writeframes(x)
w.close()

Puisque le fichier wave a besoin d'informations d'en-tête, .setnchannels() .setsampwidth() .setframerate() Cela semble au moins nécessaire. .setsampwidth () est la taille de l'échantillon (quantification), mais 16 bits équivaut à 2 (octets).

De plus, dans le cas de .writeframes (), les nframes sont automatiquement modifiés par le nombre de données, donc il n'y a pas de problème même si vous ne le définissez pas, mais dans le cas de .writeframesraw (), nframes n'est pas modifié mais l'audio de sortie est des données correctement. Il sera joué pendant une minute. (Le réglage de nframes est-il dénué de sens?)

Si vous l'exécutez, le fichier wave sera généré.

** ・ Utilisation de pyaudio ** Le package pyaudio ne semble pas être inclus par défaut, je ne l'ai donc pas encore essayé. Il est pratique pour la lecture / l'enregistrement de flux, et pyaudio peut être meilleur pour la gestion des fichiers dynamiques.

Résumé

Si vous souhaitez gérer les données audio sous forme de tableau de données décimales, vous pouvez l'obtenir par cette méthode. Dans ce cas, on suppose que la taille de bits de l'échantillon est de 16 bits, ce qui est courant en mono, donc lors de l'entrée audio spéciale telle que 8 bits et 24 bits, il semble nécessaire de convertir avec cette taille de type au moment de la conversion binaire. est. En ce qui concerne la sortie, j'ai pensé que ce ne serait pas possible sans conversion binaire, mais il semble correct de simplement passer des données de tableau de type int. Cependant, lorsque le type de tableau de données est de 16 bits, il semble inutile à moins qu'il ne soit int16.

référence

21.5. Wave - Lecture et écriture de fichiers WAV - Documentation Python 2.7.x Génération de fichier Wave avec Python | Weboo! Returns. Spectrogramme sonore en Python-A Breakthrough on Artificial Intelligence [Python] Affichage de la forme d'onde (mono / stéréo) [Programmation sonore] - Légèrement mystérieux.

Recommended Posts

Entrée / sortie audio Python
Conseils sur l'entrée / la sortie de fichier Python
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Notes pour l'entrée / sortie de fichier Python
sortie d'apprentissage python
Entrée / sortie de données en Python (CSV, JSON)
[Python] Chapitre 02-03 Bases des programmes Python (entrée / sortie)
Séquence de touches en Python
Sortie du temps d'exécution de python
Sortie japonaise avec Python
Séquence de touches en Python
[Python] À propos de l'entrée standard
Bases de python: sortie
Résumé des entrées / sorties standard
Mémorandum Cisco _ configuration d'entrée avec Python
[Python3] Entrée standard [Cheet sheet]
Entrée standard Python3 (compétition pro)
Entrée standard / résumé / python, ruby
Recevoir des conseils d'entrée standard @ python
Note d'entrée Python dans AtCoder
[Python] Comment utiliser input ()
Lire la sortie Fortran avec python
Application Python: Traitement des données Partie 1: Formatage des données et entrée / sortie de fichier
Entrée standard Python3 pour une programmation compétitive
Sortie de la liste du vendredi Premium 2017 en Python
Python
[Python] Variables (définition, sortie, changement de valeur)
Rendre la sortie standard non bloquante en Python
Affichage de la forme d'onde audio en Python
[Note] Sortie Hello world avec python
Sortie du journal de test unitaire avec python
Demandez à python de lire la sortie de la commande
Voyons voir l'utilisation de l'entrée en python
[ev3dev × Python] Affichage, voix, contrôle LED
Exporter et exporter des fichiers en Python
Sortie interactive de BPE à l'aide de curses python
Essayez de produire de l'audio avec M5 STACK
Sortie CSV des données d'impulsion avec Raspberry Pi (vérifier l'entrée analogique avec python)
Mettez OpenCV dans OS X avec Homebrew et vidéo d'entrée / sortie avec python
entrée et sortie python
Entrée / sortie audio Python
Résumé des entrées / sorties standard
Conseils (entrée / sortie) à connaître lors de la programmation de compétitions avec Python2
Python Paiza-Divers contrôles de compétences et entrées standard
Traitement des données 1 Formatage des données et entrée / sortie de fichier
Lire un fichier audio à partir de Python avec interruption
Sortir les caractères de couleur en joli avec python
Arborescence de sortie des fichiers en Python
Remarques sur l'entrée / sortie standard de Go
Sortie du journal Python vers la console avec GAE
Entrée standard Python3 que j'ai essayé de résumer
[Introduction à l'application Udemy Python3 +] 41. fonction d'entrée
UnicodeEncodeError lutte avec la sortie standard de python3
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
[python] Différence entre la sortie rand et randn
Mayungo's Python Learning Episode 8: J'ai essayé l'entrée
Ensemble d'entrées standard Atcoder pour les débutants (python)
[Python] Ajouter un commentaire au fichier d'entrée standard