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).
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 ...
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.
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.
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