Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

7 - Développer/Traduire/Documenter/Annoncer une application

Dernier post

[Recherche] Analyse du son en python

Inglebard utilisateur non connecté
Bonjour,

Je viens ici suite à une question que j'ai posé  .

''Voici ce que je voudrais faire :
Tout d'abord pour qu'on parle de la même chose, j'imagine le son comme audacity le représente.
Dans mon vocabulaire, l'axe des Y allant de -1;1 est l'amplitude et l'axe des X le temps
Veuillez m'excuser si mon vocabulaire n'est pas correcte, n'hésitez pas à me corriger.''

-J'aimerais récupérer l'amplitude maximale et minimale d'un fichier audio ou d'un flux audio.
-J'aimerais calculer la moyenne globale de l'amplitude d'un fichier audio ou d'un flux audio.
-J'aimerais calculer l'amplitude maximale et minimale d'un fichier audio sur une période donnée ou savoir si l'amplitude dépasse un certain seuil sur une période donnée d'un fichier audio ou d'un flux audio.
-(Optionnel) J'aimerais savoir en précisant une amplitude, sur quelle période de temps elle apparaît.

L'objectif serait d'activer un programme lorsque l'amplitude dépasse un certain seuil et détecter des pics d'amplitudes sur des intervalles.
Pour donner un exemple, le morse correspond. En supposant que les lettres soient sur 3 sec comprenant 8 intervalles possibles (ici en ms [0,375;375,750,...] ) pour avoir tout l'alphabet , on pourrait retrouver la lettre.

Je ne sais vraiment pas comment m'y prendre pour analyser des sons.
Connaissez vous des fonctions/modules pouvant faire cela ?
Si vous avez une autre solution je suis aussi intéressé.
En espérant avoir été compréhensible confused

sonik utilisateur non connecté
Citation :
En espérant avoir été compréhensible confused


Ben, pas trop redface

Quelle programme voudrais tu activer?
Sinon, tu peux très bien utiliser un gate sur ta piste audio (ardour), c'est toi qui règle le seuil. Ensuite tu peux même réenregistrer ta piste, comme ça tu pex voir tous les peaks le gate a laissé passer. Je sais pa si ça t'aide?

Inglebard utilisateur non connecté
Bonjour sonik,
sonik écrit :
Quelle programme voudrais tu activer?


C'est vrai que ce n'est pas clair...

Le programme que je voudrais crée devra agir on fonction de ce qu'il a entendu. Par exemple si il entend 3 amplitudes plus forte qu'un seuil prédéfini il lance le programme X, alors que si il en que entend 2 amplitudes plus forte que le seuil prédéfini, il lance le programme Y.
J'ai également oublié de préciser que le programme que je voudrais créer n'a pas d'interface graphique, dans l'idée ça doit tourner sur un raspberry .



Citation :
Sinon, tu peux très bien utiliser un gate sur ta piste audio (ardour), c'est toi qui règle le seuil. Ensuite tu peux même réenregistrer ta piste, comme ça tu pex voir tous les peaks le gate a laissé passer. Je sais pa si ça t'aide?

Heu.. J'ai pas tout compris mais je pense pas qu'on imagine la même chose biggrin
Je recherche plus une librairie python open source et légère, pas un logiciel déjà existant.
Je ne recherche que dés éléments de programmation pur.


Pour essayer d'être plus clair voici une image example.png ainsi que les éléments clés que je voudrais calculer en python depuis un fichier audio ou flux.

La ligne rouge correspondant à l'amplitude maximale
La ligne jaune correspondant à l'amplitude minimale
La ligne verte un seuil prédéfini
Les carrés représentant des intervalles de temps prédéfinis
- les verts là ou on détecte qu'une amplitude dépasse le seuil.
- les rouge là ou on ne détecte pas qu'une amplitude dépasse le seuil.

J’espère que c'est plus clair et pas le contraire lol

sonik utilisateur non connecté
Si tu sais programmer, deux pistes:
Juce
SoX

Il y a certainement d'autres....

Inglebard utilisateur non connecté
Voila c'est plus ce genre de chose que je recherche.
Après je suis quelqu'un de difficile rolleyes mais j'aimerais bien que tout, si possible, se fasse en python. (Pour que ça soit portable sur différents OS et que je me retrouve pas coincé avec un programme externe)

Je connais SoX mais je crois pas qu'il puisse faire ce que je recherche.
Je vais regarder Juce.

ardoisebleue utilisateur non connecté France
EN GROS, SI j'ai bien compris, tu veux analyser un son pour en extraire des valeurs d'amplitude de son signal! (après tu en fais ce que tu veux) et tu veux traiter soit un fichier, soit un flux sous toute plate-forme OS.
Évite d'utiliser un logiciel dont tu vas être dépendant, surtout si ton objectif n'est pas de fabriquer ou triturer du son, mais juste l'analyser.
Tu as tout intérêt, étant donné le but de ce que tu veux faire, de créer ton propre logiciel dans ton langage python ; De le réaliser au départ en traitant un fichier type "wav" (pas de compression). Tu peux trouver les spécifications de ce type de fichier sur le Web (je les ai mais sur papier).
Ainsi tu obtiens toutes les données que tu souhaites et faire ce que tu veux, tu peux aussi le "grapher", si tu veux un graphique type audacity.
Il te suffira ensuite d'adapter ton logiciel pour traiter les "flux" ou autre format de fichier.

Inglebard utilisateur non connecté
Salut ardoisebleue,

Il semblerait que tu ais parfaitement compris ce que je veux faire.

Merci pour ta réponse, je vais donc rechercher de la doc sur les WAV.

ardoisebleue utilisateur non connecté France
Si tu travailles avec un wav, qui est un fichier de type "RIFF", pour t'éviter de chercher son principe de structure, regarde ici le principe du fichier riff, j'ai passé du temps à déchiffrer le modèle de cette structure, alors utilise cette doc, ça te fera gagner du temps, et elle servira à quelque chose! (et si tu trouves des erreurs n'hésite pas à les corriger le wiki est fait pour ça!)
Bon courage, et tiens nous au courant !

Inglebard utilisateur non connecté
Ok

Merci pour ton aide.

programLyrique utilisateur non connecté France
Salut,

J'ai mené il y a peu un projet d'apprentissage automatique sur des pistes audio de batterie (et des vidéos des batteurs qui jouaient); le but était de faire une transcription automatique de ce qui était joué (en sortie, on obtient un fichier avec à chaque ligne une date en ms et le nom de l'instrument joué).

On a fait entièrement cela en Python : Yaafe permet d'extraire des caractéristiques audio et est très utilisé dans le monde de la recherche.

Et pour l'apprentissage automatique, on a utilisé scikit-learn (mais pas sûr que ça t'intéresse).

Inglebard utilisateur non connecté
Salut programLyrique,

Je ne connais pas Yaafe mais il me semble très intéressant.

Cependant, je pense que la solution que propose ardoisebleue est plus intéressante (d'un point de vue technique bien que cela soit plus difficile).

Je garde tout de même tes liens sous le coude, ça pourra me servir.

programLyrique utilisateur non connecté France
Je ne sais pas ce que tu veux par « plus intéressant » wink: tu apprendras effectivement plus de choses sur le parsing de fichiers wav en extrayant directement les informations depuis le signal en lisant le fichier audio comme le propose ardoisebleue.
Je vois cependant plusieurs limitations à ce qu'il propose :
  • ça se limite au format wav (prêt à jouer avec les diverses valeurs d'échantillonnage, de dynamique ? :-) ). Que feras-tu lorsqu'il faudra traiter du mp3 ?
  • tu vas réinventer la roue
  • manifestement, tu veux faire du traitement du signal, pas du parsing, donc j'ai l'impression que tu vas t'éparpiller en lisant manuellement du wav plutôt que de confier la lecture à une lib.

Quitte à travailler directement sur le signal audio sans utiliser de l'extraction de caractéristiques déjà existantes (donc sans utiliser Yaafe), je pense qu'il vaut mieux utiliser une lib pour charger le fichier audio dans un buffer, et puis travailler sur le buffer (c'est comme ça que font quasiment tous les projets qui travaillent avec de l'audio ; ils ne recodent pas un parseur de fichier wav !!) : libSoX déjà, mais aussi libAudioStream , libsndfile , PyAudio (un binding de PortAudio en python) et pleins d'autres encore.

Sinon, des équivalents un peu moins complets que Yaafe, en Python aussi: Aubio ou encore http://ajaxsoundstudio.com/software/pyo/ .
Tu peux aussi regarder la page PythonInMusic pour plus d'infos sur comment traiter du son (et plus généralement, de la musique), avec Python.

Inglebard utilisateur non connecté
Merci pour ta réponse détaillée.

programLyrique écrit :
Je ne sais pas ce que tu veux par « plus intéressant » wink


Je veux dire par là qu'il est toujours intéressant de connaître l'intégralité d'un programme que l'on fait. J'ai toujours été frustré d'utiliser des librairies et de me dire "Mais comment ils font ça ?".


Après comme je l'ai indiqué sur le sujet et ainsi que dans mon premier post, pour le moment c'est uniquement de la recherche et je suis ouvert à toutes les solutions. Je vais brasser pas mal de doc avec toutes les infos présentes sur ce sujet pour
me donner une idée plus précises (que ce soit sur des structures de fichier ou des librairies).

Je ne suis pas fermé aux librairies, aux contraires, mais il est toujours difficile d'avoir une vue d'ensemble de leurs fonctionnalités et de les faire correspondre à ce que l'on souhaite.

Mais ne t'inquiète pas smile je compte bien jeter un œil à tous ça.

vampouille utilisateur non connecté
Est-ce que tu as de besoin de traitement temps réel, c'est à dire de réagir rapidement par rapport à l'entrée de carte son ?

Pour le traitement temps réel en python, tu peux utiliser ce module activement développé :

https://github.com/spatialaudio/jackclient-python

Ça te permet de créer un "client" jack en python. Dans ton cas, une application jack avec une entrée audio. Il te reste ensuite à traiter chaque bloc de son envoyer par le serveur jack. L'avantage, c'est que tu ne te soucis pas du format, tu auras toujours un tableau de valeur entre -1 et 1.
Avec le système de routage de jack, tu pourras connecter sur ton programme soit un lecteur audio (audacity) pour traiter des fichiers soit l'entrée de la carte son.

N'hésite pas si tu veux plus de détails sur la prise en main du module.

Vampouille

Inglebard utilisateur non connecté
Salut Vampouille,

Je pense commencer par du traitement de fichier, ensuite, pourquoi pas du temps réel.

Merci pour ton lien, je le garde dans un coin.

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

eazymaogeek, 17:02, lun. 25 Sep 2017: a voté sympa les sons
tenryu, 13:38, lun. 25 Sep 2017: A voté !
sub26nico, 08:43, lun. 25 Sep 2017: Salut et bienvenue à Ubuntu_Studio_User et Mary Haugen :-)
olinuxx, 14:15, dim. 24 Sep 2017: N'oubliez pas de voter pour la joute [Lien] :-)
ardoisebleue, 10:52, dim. 24 Sep 2017: A voté
sub26nico, 02:01, dim. 24 Sep 2017: Salut et bienvenue à MdMax :-)
olinuxx, 16:58, sam. 23 Sep 2017: OK sub26nico, merci. Allez @jz, t'es attendu dans les forums pour nous en parler maintenant :-)
sub26nico, 14:11, sam. 23 Sep 2017: @olinuxx, c'était juste pour répondre au coté 'libre', mais j'attends aussi le retour de @jz ;-)
olinuxx, 13:50, sam. 23 Sep 2017: @sub26nico : exact @sub26nico ! Mais on avait qu'une seule ligne, peut être que jz peut nous en dire un peu plusse ? :-)
sub26nico, 23:28, ven. 22 Sep 2017: olinuxx ,on en avait parlé dans l'édito de mars 2017, son code est open-source :S
olinuxx, 22:30, ven. 22 Sep 2017: Tu viens nous en parler dans les forums @jz et nous dire pourquoi tu trouves qu'il est chouette ce synthé, et ce qu'il a en rapport avec du logiciel libre ? Là, ça paraîtra moins comme du spam :-)
jz, 20:27, ven. 22 Sep 2017: http://nozoid.com/ocs-2/ est le synthé le plus cool que je connaisse (ca serait du spam s'il n'était pas aussi du logiciel libre! ;)