Il y a une scène à enregistrer dans le chapitre 2 du livre Sound Source Separation Learned with Python, mais je suis un peu coincé, donc je vais en prendre note.
sounddevice
nécessite pip install sounddevice
. «wave» est intégré et n'est pas nécessaire.
macOS 10.15.6 Python 3.7.8 sounddevice 0.4.1
import numpy as np
import sounddevice as sd
import wave
FILE_NAME = './test.wav' #Nom du fichier à enregistrer
wave_length = 2 #Durée d'enregistrement (secondes)
sample_rate = 16_000 #Fréquence d'échantillonnage
#Démarrer l'enregistrement (wave_longueur Enregistrez pendant secondes. Attendez la fin de l'enregistrement avec wait)
data = sd.rec(int(wave_length * sample_rate), sample_rate, channels=1)
sd.wait()
#Normaliser. Puisqu'il est enregistré avec 16 bits de bit de quantification, il est maximisé dans la plage de int16.
data = data / data.max() * np.iinfo(np.int16).max
# float -> int
data = data.astype(np.int16)
#Enregistrer le fichier
with wave.open(FILE_NAME, mode='wb') as wb:
wb.setnchannels(1) #monaural
wb.setsampwidth(2) # 16bit=2byte
wb.setframerate(sample_rate)
wb.writeframes(data.tobytes()) #Convertir en chaîne d'octets
with
iciwave.open
s'ouvre avec wb
, donc le contenu de writeframes
doit également être une chaîne d'octetstobytes ()
sd.rec
renvoie float
, vous devez donc convertir data
en un type entier (np.int16
pour 16 bits)J'ai oublié de le convertir en type entier, et quoi que j'enregistre, ça sonnait comme du bruit blanc. Nous espérons pour votre référence.
wave
https://docs.python.org/3.7/library/wave.htmlsounddevice
https://python-sounddevice.readthedocs.io/en/0.4.1/usage.html#recordingRecommended Posts