Lire les données d'un seul canal à partir d'une chaîne stéréo fichier wave en Python
J'ai à lire les données à partir d'un seul canal en stéréo fichier wave en Python.
Pour cela, j'ai essayé avec scipy.io:
import scipy.io.wavfile as wf
import numpy
def read(path):
data = wf.read(path)
for frame in data[1]:
data = numpy.append(data, frame[0])
return data
Mais ce code est très lent, surtout si je dois travailler avec des fichiers plus longs.
Si quelqu'un connais un moyen plus rapide de faire cela? J'ai pensé à la norme vague module en utilisant vague.readframes(), mais comment sont les images qui y sont stockées?
Vous devez vous connecter pour publier un commentaire.
scipy.io.wavfile.lire
retourne le n-uplet(rate, data)
. Si le fichier est en stéréo,data
est un tableau numpy avec la forme(nsamples, 2)
. Pour obtenir un canal spécifique, utilisez un tranche dedata
. Par exemple,left = data[:, 0]
,right = data[:, 1]
. Voir aussi stackoverflow.com/questions/13995936/...La
wave
module renvoie les images comme une chaîne d'octets, qui peut être converti en nombre avec lestruct
module. Par exemple:Si votre fichier WAV a quelques autres la taille de l'échantillon, vous pouvez utiliser l' (plus laid) fonction dans une autre réponse, j'ai écrit ici.
Je n'ai jamais utilisé
scipy
'swavfile
fonction donc je ne peux pas comparer la vitesse, mais lewave
etstruct
approche que j'utilise ici a toujours travaillé pour moi.