GNU/Linux >> Tutoriels Linux >  >> Linux

Analyse audio en temps réel sous Linux

Marsyas serait un excellent choix pour ce faire, il est conçu pour exactement ce genre de tâche.

Pour accorder un instrument, ce que vous devez faire est d'avoir un algorithme qui estime la fréquence fondamentale (F0) d'un son. Il existe un certain nombre d'algorithmes pour ce faire, l'un des plus récents et des meilleurs est l'algorithme YIN, qui a été développé par Alain de Cheveigne. J'ai récemment ajouté l'algorithme YIN à Marsyas, et l'utiliser est extrêmement simple.

Voici le code de base que vous utiliseriez dans Marsyas :

  MarSystemManager mng;

  // A series to contain everything
  MarSystem* net = mng.create("Series", "series");

  // Process the data from the SoundFileSource with AubioYin
  net->addMarSystem(mng.create("SoundFileSource", "src"));
  net->addMarSystem(mng.create("ShiftInput", "si"));
  net->addMarSystem(mng.create("AubioYin", "yin"));

  net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName);

  while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) {
    net->tick();
    realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>();
    cout << r(0,0) << endl;
  }

Ce code crée d'abord un objet Series auquel nous ajouterons des composants. Dans une série, chacun des composants reçoit la sortie du MarSystem précédent en série. Nous ajoutons ensuite un SoundFileSource, dans lequel vous pouvez insérer un fichier .wav ou .mp3. Nous ajoutons ensuite l'objet ShiftInput qui produit des morceaux d'audio qui se chevauchent, qui sont ensuite introduits dans l'objet AubioYin, qui estime la fréquence fondamentale de ce morceau d'audio.

Nous disons ensuite à SoundFileSource que nous voulons lire le fichier dansAudioFileName.

L'instruction while boucle alors jusqu'à ce que SoundFileSource manque de données. À l'intérieur de la boucle while, nous prenons les données que le réseau a traitées et produisons l'élément (0,0), qui est l'estimation de fréquence fondamentale.

C'est encore plus facile lorsque vous utilisez les liaisons Python pour Marsyas.


http://clam-project.org/CLAM est un cadre logiciel à part entière pour la recherche et le développement d'applications dans le domaine de l'audio et de la musique. Il propose un modèle conceptuel ainsi que des outils d'analyse, de synthèse et de traitement des signaux audio.

Ils ont une excellente API, une belle interface graphique et quelques applications finies où vous pouvez tout voir.


Ce guide devrait vous aider. N'utilisez pas ALSA pour votre application. Utilisez une API de niveau supérieur. Si vous décidez d'utiliser JACK, http://jackaudio.org/applications propose trois accordeurs d'instruments que vous pouvez utiliser comme exemple de code.


ALSA est en quelque sorte la norme par défaut pour Linux maintenant en raison du fait que les pilotes du noyau sont inclus dans le noyau et que l'OSS est déprécié. Il existe cependant des alternatives à l'espace utilisateur ALSA, comme jack, qui semble s'adresser à des applications de type professionnel à faible latence. Son API semble avoir une API plus agréable, même si je ne l'ai pas utilisée, ma brève exposition à l'API ALSA me ferait penser que presque tout serait mieux.


Linux
  1. Démarrer Linux plus rapidement

  2. Scénarios Linux en temps réel et problèmes avec leurs solutions

  3. Répertoire JAVA_HOME sous Linux

  4. est-il possible de réveiller un appareil Linux à une heure précise

  5. Comment Linux utilise-t-il une horloge en temps réel ?

Contrôle audio avancé sous Linux

Netdata - Outil de surveillance des performances en temps réel pour Linux

Vérifier le fuseau horaire sous Linux

3 façons de regarder les journaux en temps réel sous Linux

Linux date Exemples de commandes

Surveillez l'utilisation de la bande passante du réseau Linux en temps réel avec nload