Question

Je me demande quelle est la bibliothèque audio recommandé d'utiliser?

Je tente de faire un petit programme qui aide dans les instruments de réglage. (Piano, guitare, etc.). J'ai lu sur les bibliothèques audio ALSA et Marsyas.

Je pense que l'idée est d'échantillonner les données du microphone, faire une analyse sur des morceaux de 5-10ms (de ce que j'ai lu). Effectuez ensuite une FFT pour savoir quelle fréquence contient le plus grand pic.

Était-ce utile?

La solution

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

Pour accorder un instrument, ce que vous devez faire est d'avoir un algorithme qui estime fondamental fréquence (F0) d'un son. Il y a un certain nombre d'algorithmes pour ce faire, l'un des plus récents et mieux est l'algorithme YIN, qui a été développé par Alain de Cheveigné. J'ai récemment ajouté l'algorithme YIN à Marsyas, et son utilisation est simple mort.

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 de la série que nous allons ajouter 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, que vous pouvez nourrir dans un fichier .wav ou .mp3 dans. Nous ajoutons ensuite l'objet ShiftInput qui délivre des morceaux de chevauchement audio, qui sont ensuite introduits dans l'objet AubioYin, qui estime la fréquence fondamentale de ce morceau de audio.

Nous disons alors SoundFileSource que nous voulons lire le fichier inAudioFileName.

L'instruction while boucle ensuite jusqu'à ce que le SoundFileSource court de données. A l'intérieur du tout boucle, on prend les données que le réseau a traité et la sortie de l'élément (0,0), qui est le estimation de la fréquence fondamentale.

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

Autres conseils

devrait aider à guider. Ne pas utiliser ALSA pour votre application. Utilisez une API de niveau supérieur. Si vous décidez souhaitez utiliser JACK, http://jackaudio.org/applications a trois tuners instrument que vous peut utiliser comme exemple de code.

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

Ils ont une grande API, interface agréable et quelques applications finis où vous pouvez tout voir.

ALSA est en quelque sorte la norme par défaut pour Linux maintenant en vertu des pilotes du noyau étant inclus dans le noyau et l'OSS se déprécient. Cependant, il existe des alternatives à ALSA, comme , qui semble être destiné à des applications de type professionnel à faible latence. Il est API semble avoir une API plus agréable, même si je ne l'ai pas utilisé, ma brève exposition à l'API ALSA me faire croire que presque tout serait mieux.

Audacity comprend une fonction de tracé de fréquence et a intégré les filtres FFT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top