Je souhaite utiliser Python pour accéder à un fichier WAV et écrire son contenu dans un formulaire qui me permet d'analyser (disons des tableaux).
J'ai installé une version plus récente sur NUMPY (1.4.0). Mais alors j'ai eu un nouvel ensemble d'erreurs: p>
Traceback (appel le plus récent): Fichier "test.py", ligne 7, dans Import Scikits.Agédiolab Fichier "/USR/LIB/PYTHON2.5/SITE-PACKAGES/SCIKITS/AUDIOLAB/EXSTRONG-INITOINITOIPE" SSTRONGO.PY ", LIGNE 25, IN de pysndfile importer formadifo, sndfile Fichier "/USR/LIB/PYTHON2.5/SITE-PACACKES/SCIKITS/AUDIOLAB/PYSNDFILE/EXSTRONG >ILITOIRE" SSTSTRONGO.PY ", ligne 1, dans de _sndfile Import Sndfile, format, disponible_file_Formats, disponible_encodings Fichier "Numpy.PXD", ligne 30, dans Scikits.Audiolab.pysndfile._sndfile (Scikits / Audiolab / PYSnDFile / _SNDFILE.c: 9632) ValueError: Numpy.Dtype n'apparaît pas être l'objet de type correct p> li>
J'ai abandonné à l'audiolab et j'ai pensé que je peux utiliser un package "Wave" à lire dans un fichier WAV. J'ai posé une question à ce sujet à ce sujet, mais les gens ont recommandé d'utiliser Scipy à la place. Ok, j'ai décidé de me concentrer sur Scipire (j'ai 0.6.0. Version). P> Li>
Mais quand j'ai essayé de faire ce qui suit: p>
de scipey.io importer wavfile
x = wavfile.read ('/ usr / sons / sons / violet / recevoir.wav') p> li>
ol>
Je reçois ce qui suit: p>
8 Réponses :
Audiolab est le meilleur moyen, mais cela ne fonctionne pas dans tous les environnements et le développeur ne fonctionne pas dessus. J'utilise toujours Python 2.5 afin que je puisse l'utiliser. P>
Avez-vous installé libsndfile ? p>
Avez-vous essayé le module de vague? Il a moins de dépendances:
http://docs.python.org/library/wave.html p>
Au lieu de tout, utilisez [0 :: 2] et out [1 :: 2].
Combinez ceci avec des outils de conversion externes pour ouvrir d'autres formats. assembler.com/code/ Freesound / Git / Nœuds / Freesound / Utils / ...
Après avoir essayé tant de choses qui ne fonctionnent pas, j'ai utilisé la bibliothèque de décodage de Utilisez (python) gstreamer pour décoder audio (aux données PCM) et construire une fonction pour analyser les données PCM brutes dans un tableau SCIPY. P>
C'est bien et peut ouvrir n'importe quel fichier audio que Gstreamer peut ouvrir: http://gist.github.com/592776 (voir test et fin du fichier pour l'utilisation info) p>
C'est assez bon pour moi Il ignore les 24 premières valeurs, car ce n'est pas audio, c'est l'en-tête. P> aussi, si le fichier était stéréo , vos canaux auront des index alternatifs, donc je le réduisez généralement à Mono avec Audacity d'abord. P> P>
Cela fonctionne si vous connaissez le format de fichier (nombre de canaux, taux d'échantillonnage) et savoir qu'il n'y a pas de choses étranges dans le fichier (comme plusieurs blocs de données - voir CCRMA.STANFORD.EDU/COURSES/422/PROJECTS/WAVEFORMAT ).
J'ai écrit un wrapper simple sur le module de vague dans le std lib. C'est ce qu'on appelle pydub et il a une méthode de lecture d'échantillons à partir des données audio en tant qu'OB.
>>> from pydub import AudioSegment >>> song = AudioSegment.from_wav("your_song.wav") <pydub.audio_segment.AudioSegment at 0x1068868d0> >>> # This song is stereo >>> song.channels 2 >>> # get the 5000th "frame" in the song >>> frame = song.get_frame(5000) >>> sample_left, sample_right = frame[:2], frame[2:] >>> def sample_to_int(sample): return int(sample.encode("hex"), 16) >>> sample_to_int(sample_left) 8448 >>> sample_to_int(sample_right) 9984
Vous pouvez également utiliser le module d'onde avec la fonction numpy.fromstring () pour le convertir en une matrice
import wave import numpy fp = wave.open('test.wav') nchan = fp.getnchannels() N = fp.getnframes() dstr = fp.readframes(N*nchan) data = numpy.fromstring(dstr, numpy.int16) data = numpy.reshape(data, (-1,nchan))
Audiolab semble être non maintenu, vous devriez essayer pysoundfile .
L'installation est simple: p> et lire un fichier son aussi: import soundfile as sf
x, fs = sf.read('/usr/share/sounds/purple/receive.wav')
pydub fournit une solution encore plus facile sans aucune dépendance à installer (pour les fichiers WAV). J'utilise actuellement cette méthode de production sans aucun problème.
from pydub import AudioSegment awesome_song = AudioSegment.from_wav('awesome_song.wav') print('Duration in seconds is {}'.format(awesome_song.duration_seconds))
Comment installiez-vous exactement audiolab?
Comment est-ce différent de vos questions précédentes sur le même sujet?
Audiolab est génial. Essayez de réussir ça. Assurez-vous d'avoir installé les paquets libsndfile et SeugoTools. Avez-vous suivi sec. 2.4 Dans le manuel?
Avez-vous reçu une nouvelle version de Scipy lorsque vous avez mis à niveau votre version de Numpy? J'utilise une vague pour lire dans des fichiers d'ondes telles que James Roth suggéré ci-dessous, mais si vous souhaitez utiliser SciPy, vous devez vérifier si votre version de Scipy est à jour. Des messages d'erreur que vous obtenez, je suppose que ce n'est pas le cas.
Avez-vous vu cette? Stackoverflow.com / Questions / 2060628 / ... Time-timbre est (plus) récente, mars 2011.
pydub est une autre alternative pour la lecture dans les fichiers d'ondes.
Comment gérer des sons stéréo? 2 tableaux qui ont 1-dimension? ou un seul tableau 2 dimensions?