L'importation de fichiers audio en Python comme des tableaux NumPy (alternatives à l'audiolab)
J'ai été en utilisant Audiolab pour importer des fichiers audio dans le passé, et cela a fonctionné assez bien. Cependant:
- Il ne prend pas en charge certains formats, comme le mp3, parce que le sous-jacent libsndfile refuse de les soutenir
- Il ne fonctionne pas dans la version 2.6 de Python sous Windows, et l'auteur n'est pas là pour le fixer
-
In [2]: from scikits import audiolab
--------------------------------------------------------------------
ImportError Traceback (most recent call last)
C:\Python26\Scripts\<ipython console> in <module>()
C:\Python26\lib\site-packages\scikits\audiolab\__init__.py in <module>()
23 __version__ = _version
24
---> 25 from pysndfile import formatinfo, sndfile
26 from pysndfile import supported_format, supported_endianness, \
27 supported_encoding, PyaudioException, \
C:\Python26\lib\site-packages\scikits\audiolab\pysndfile\__init__.py in <module>()
----> 1 from _sndfile import Sndfile, Format, available_file_formats, available_encodings
2 from compat import formatinfo, sndfile, PyaudioException, PyaudioIOError
3 from compat import supported_format, supported_endianness, supported_encoding
ImportError: DLL load failed: The specified module could not be found.``
Je voudrais donc soit:
- Comprendre pourquoi ça ne fonctionne pas en 2.6 (quelque chose de mal avec _sndfile.pyd?) et peut-être trouver un moyen de l'étendre à travailler avec des formats non pris en charge
- Trouver un remplacement complet pour l'audiolab
Le problème est spécifique à la version 2.6 de python sur windows (c'est à dire que vous ne le verrez pas sur python 2.5). Je n'ai pas trouvé un moyen de le fixer encore
Et j'ai enfin pris le temps entre deux vols, il a fini par être un mingw bug. J'ai posté une nouvelle version 0.11.0, qui devrait corriger ce problème.
David, vous avez fait un merveilleux outil audiolab! Je l'utilise souvent. Je vous remercie.
Il travaille maintenant! Merci
Et j'ai enfin pris le temps entre deux vols, il a fini par être un mingw bug. J'ai posté une nouvelle version 0.11.0, qui devrait corriger ce problème.
David, vous avez fait un merveilleux outil audiolab! Je l'utilise souvent. Je vous remercie.
Il travaille maintenant! Merci
OriginalL'auteur endolith | 2010-03-01
Vous devez vous connecter pour publier un commentaire.
Audiolab est de travailler avec moi sur Ubuntu 9.04 avec Python 2.6.2, de sorte qu'il pourrait être un problème Windows. Dans votre lien vers le forum, l'auteur suggère aussi que c'est une erreur Windows.
Dans le passé, cette option a fonctionné pour moi, trop:
Méfiez-vous cependant que
data
peut avoirint
type de données, de sorte qu'il n'est pas mis à l'échelle dans [-1,1). Par exemple, sidata
estint16
, vous devez diviserdata
par2**15
à l'échelle à l'intérieur de [-1,1).Je ne suis pas certain à ce sujet. 16 ou 32 bits devrait être bon, mais je ne sais pas à propos de 24 bits.
Il n'a pas beaucoup lu de quoi que ce soit. Même les fichiers 16 bits sortir inversé, enveloppant les erreurs pour une valeur de -1. 24-bit devient "TypeError: type de données non compris" il y a Certainement quelque chose de mieux...
Pouvez-vous poster un fichier qui vous donne cette erreur ? Aussi, la suite de test passe correctement (scikits.audiolab.test()) ? audiolab utilise libsndfile, qui est de loin la meilleure et la plus fiable audio IO bibliothèque que je sais. Il peut y avoir une erreur dans audiolab lui-même, bien sûr
Je ne vois pas le wraparound bug maintenant, mais c'était un bug avec scipy.io, pas audiolab.
OriginalL'auteur Steve Tjoa
Sox http://sox.sourceforge.net/ peut être votre ami pour cela. Il peut lire de nombreux de nombreux différents formats et de les exporter en tant que matières premières dans quel que soit le type de données que vous préférez. En fait, j'ai juste écrit le code pour lire un bloc de données à partir d'un fichier audio dans un tableau numpy.
J'ai décidé d'aller dans cette voie pour des raisons de portabilité (sox est très largement disponible) et à maximiser la flexibilité de l'entrée audio types que je pourrais utiliser. En fait, il semble que des premiers tests que ce n'est pas beaucoup plus lent pour ce que je suis en utilisant... qui est la lecture de courte durée (quelques secondes) de l'audio depuis très longtemps (en heures) des fichiers.
Les Variables dont vous avez besoin:
Le code est très simple. Si vous voulez extraire la totalité du fichier, vous pouvez supprimer le start_samp, len_samp, et "finition" des choses.
PS: Voici le code pour lire des trucs de fichier audio les en-têtes à l'aide de sox...
Je vais regarder pysox... merci. Si le sous-processus de l'approche à l'aide de sox n'est pas vraiment pythonic ou plutôt, il est très puissant et relativement portable (depuis sox binaires/installateurs peuvent être trouvés pour la plupart des systèmes).
OriginalL'auteur travc
FFmpeg prend en charge les fichiers mp3 et fonctionne sur Windows (http://zulko.github.io/blog/2013/10/04/read-and-write-audio-files-in-python-using-ffmpeg/).
La lecture d'un fichier mp3:
Format des données dans un tableau numpy:
OriginalL'auteur Vincent Berthiaume
Dans le cas où vous voulez le faire pour MP3
Voici ce que j'utilise: Il utilise pydub et scipy.
Complète de la configuration (sur Mac, peut varier sur d'autres systèmes):
De crédit à James Thompson blog
os.close(_)
(et probablement renommer_
àfd
) pour fermer le temp descripteur de fichier. Sinon, lorsque vous exécutez dans une boucle for, vous finirez par obtenir[Errno 24] Too many open files
.OriginalL'auteur Peter
J'ai été en utilisant PySoundFile dernièrement, au lieu de Audiolab. Il s'installe facilement avec
conda
.Il ne prend pas en charge mp3, comme la plupart des choses. MP3 n'est plus breveté, donc il n'y a aucune raison pourquoi il ne peut pas le soutenir; quelqu'un a juste à en écriture, en libsndfile.
OriginalL'auteur endolith