10
votes

conversion wav-to-midi

Je suis nouveau dans ce domaine - mais je dois effectuer une conversion WAV-TO-MIDI en Java. Existe-t-il un moyen de savoir quelles sont exactement les étapes impliquées dans la conversion WAV-TO-MIDI? J'ai une idée très approximative comme dans vous besoin de; Échantillon du fichier WAV, filtrez-le, utilisez FFT pour une analyse spectrale, une extraction de fonctionnalités, puis écrivez les fonctions extraites sur MIDI. Mais je ne trouve pas de sources solides ou de papiers comme dans la façon de faire tout ça? Quelqu'un peut-il me donner des indices comme dans comment et où commencer? Existe-t-il des API open source disponibles pour ce processus de conversion WAV-TO-MIDI?

Avance merci


2 commentaires

5 Réponses :


28
votes

C'est un processus plus impliqué que vous pourriez imaginer.

Ce problème de recherche est souvent appelé transcription musicale : le fait de convertir une représentation de musique de basse niveau (par exemple, de forme d'onde) en une représentation de niveau supérieur tel que MIDI ou même partition .

La sophistication de votre solution dépendra de la complexité de vos données d'entrée. Des tonnes de documents de recherche abordent la transcription de la musique uniquement sur le piano monophonique ou les tambours ... car ils sont faciles à transcrire. (Relativement.) Le violon est plus difficile. La voix est encore plus difficile. Violon Plus Voice Plus Le piano est beaucoup plus difficile. Une symphonie est presque impossible. Vous obtenez la photo.

Les éléments de base de la transcription musicale impliquent l'une des zones de chevauchement suivantes:

  1. (multi) estimation de hauteur
  2. Reconnaissance des instruments, modélisation TIMBRAL
  3. Détection de rythme
  4. NOTE DECLARATION / Détection de décalage
  5. Formulaire / Structure Modélisation

    Recherche de documents sur "TRANSCRIPTION MUSIC" sur Google Scholar ou à partir de la procédure ISMIR: http://www.ismir.net . Si vous êtes plus intéressé par l'une des subtopies ci-dessus, je peux vous indiquer plus loin. Bonne chance.

    Edit: Cela étant dit, il existe des solutions existantes que nous pouvons tous trouver sur le Web. N'hésitez pas à les essayer. Mais comme vous le faites, évaluez-les avec un œil critique et une oreille. Quels types de signaux audio entraîneraient l'échec de la transcription?

    Edit 2: Ah, vous ne le faites que pour piano. D'accord, ceci est faisable. La transcription de la musique a avancé au point où il peut transcrire un piano monophonique assez bien. Un concerto Rachmaninov posera toujours des problèmes.

    Nos recommandations dépendent de votre objectif final. Vous déclarez " besoin pour effectuer ... dans java ." Donc, on dirait que vous voulez juste que quelque chose fonctionne, quelle que soit la façon dont il vous obtient là-bas. Dans ce cas, je suis d'accord à 100% avec les autres: utilisez quelque chose qui existe.

    C'est en fait une question intéressante; Toutes les bibliothèques MIR que je connais sont typiquement C / C ++ / Python / Matlab. Mais pas Java. L'ECHONEST a une API Java, mais je ne pense pas que la transcription au niveau de la note. http://developer.echoneest.com . (Edit: Il fait la transcription de niveau de notes. Les données retournées comprennent la hauteur, la timbre, le battement, le tatum, etc. Mais je trouve que la polyphonie est toujours un problème.)

    Oh, marsyas est basée sur Java. Frais. Je pensais que c'était juste C ++. http://marsyas.info/ Je le recommande. Il est développé par George Tzanetakis, professeur à Mir. Il utilise une analyse au niveau du signal et devrait être une bonne option.

    Maintenant, s'il s'agit d'une expérience d'apprentissage amusante, je pense que vous pouvez utiliser les utilitaires de manipulation sonore en Java pour expérimenter le signal WAV et voir ce qui sort.

    EDIT: Cette page décrit le logiciel MIR mieux que je ne peux: Les outils que nous utilisons

    Pour Matlab, vous pouvez être intéressé par le MIR Boîte à outils

    Voici une belle page de jeux de données communs: Datasets MIR < / p>


5 commentaires

Merci pour les conseils Steve. Je prévois WAV-TO-MIDI uniquement pour les performances du piano. Je pensais que la transcription de la musique ne génère qu'un score de musique numérique, merci de me corriger. Je dois enregistrer un jeu de piano d'une pièce de musique et générer un fichier midi (fichier MIDI iewrite du fichier WAV), capturant la plupart des caractéristiques musicales de la hauteur, de la dynamique, du chronométrage, du rythme, des phrases, des tons, de l'articulation, etc. être utilisé pour le traitement. Les capturer directement de MIDI sont possibles, mais de WAV-je ne peux pas penser à partir d'où commencer. Je vais devoir faire des recherches sur les zones où vous avez dit d'abord - merci Steve


Dois-je utiliser Matlab pour ce processus et vous intégrer à Java? Advance merci Steve. Vous avez vraiment peint la plus grande image.


Je vous en prie. Voir ma réponse aux commentaires dans l'article original.


Steve, merci beaucoup pour vos réponses. Je voudrais apprendre plus et explorer ce champ. Vous avez mentionné "toutes les bibliothèques MIR que je connais ...". Je ne suis pas lié à une langue spécifique. Pouvez-vous vous recommander une bibliothèque (de préférence open source, mais pas nécessaire) - Toute langue? Je suis spécifiquement intéressé par une seule transcription de l'instrument. En outre, l'état actuel de la technologie permet une transcription «en temps réel»? C'est-à-dire un PC moyen peut transcrire la musique tel qu'il est joué?


Je vous en prie. La transcription en temps réel sur un PC moyen est assez mauvaise, je suppose. Ni je ni moi ni beaucoup d'autres ne se soucient de la peine parce que nous avons un temps suffisamment difficile à obtenir hors ligne la transcription perfectionnée! Il est rare d'obtenir un taux de transcription meilleur que, disons, 80% (des notes). Voir Modifier pour plus d'outils.



4
votes

Il s'agit d'une très grande entreprise d'être nouvelle sur le terrain, à moins que vous signiez que vous connaissez une analyse de signal et une détection de fonctionnalités en général et que vous souhaitez avoir l'air plus spécifiquement en transcription automatique.

Il n'y a pas d'API pour la conversion de WAV à MIDI. VAMP est un cadre pour les plug-ins d'extraction de fonctionnalités, mais pour faire une transcription automatique, vous devez utiliser tous les La fonctionnalité des plugins existants, plus la fonctionnalité de mise en œuvre n'existe pas encore dans aucun d'eux.

parcourir les descriptions des plugins sur La page de téléchargement de la VAMP , toutes les descriptions que vous faites. Pas comprendre sont des sujets que vous devriez commencer à rechercher si vous voulez le faire.


4 commentaires

Merci pour les suggestions Smith. Au moins maintenant, je sais que ce n'est pas un point de rechercher des API qui le fait. Pouvez-vous utiliser des plug-ins avec le code Java? Extraction de fonctionnalités - Dois-je utiliser des algorithmes? Juste parce que je connais un algorithme comment puis-je le mettre au code? Devrai-je utiliser Matlab et intégrer une langue (disons Java)? Pouvez-vous s'il vous plaît me donner une photo? Merci encore Smith


VAMP utilise C, C ++. Ne sous-ils pas des plugins Java et de telles ressources? Ce serait le plus utile. Comment pouvez-vous utiliser des plug-ins dans le code Java? Remerciement


Java n'est pas vu si souvent dans le traitement / analyse du signal car il est relativement intensif de la CPU, et jusqu'à ce que le matériel assez récemment ne soit pas assez rapide pour faire ce genre de chose en Java à des vitesses acceptables. On dirait que Steve ait trouvé un bon avantage. Pour une approche de niveau supérieur, il est également possible d'utiliser un environnement tel que Csound Csounds.com qui fournit un grand nombre de Outils pour synthétiser et analyser le son avec moins de soucis pour l'allocation de mémoire explicite et la libération de la mémoire que vous ne recevriez avec C.


Concernant comment utiliser des plugins dans Java, un plugin est une bibliothèque chargée de manière dynamique, vous pouvez utiliser JNI pour le charger et l'accéder à un programme Java: EN.Wikipedia.org/wiki/java_native_interface



3
votes

Si vous n'avez pas besoin d'automatiser cette tâche (c'est-à-dire pour un site Web dans lequel les gens peuvent télécharger des fichiers MP3 et obtenir des fichiers MIDI), vous devez envisager d'utiliser un outil tel que Melodyne qui est déjà assez bon pour cela. Comme l'a noté Steve, il s'agit d'une tâche très difficile d'accomplir, et même les meilleurs algorithmes et solutions présentes pour le moment ne sont pas 100% fiables.

Donc, si vous faites du travail en studio et que vous devez effectuer quelques conversions, cela vous évitera probablement un peu de temps (et beaucoup de mal de tête) pour utiliser un outil déjà conçu pour cette tâche.


0 commentaires

1
votes

Dauphin, désolé d'être brusque, mais vous avez complètement sous-estimé le problème. Ce que vous voulez réaliser - une transcription sonore complète de piano impliquant tous les paramètres utilisés lors de la lecture nécessiterait une quantité énorme de recherches avec des personnes qui ont travaillé sur le terrain pendant de nombreuses années. Même un groupe de doctorants dans le traitement du signal devrait investir beaucoup de travail à proximité de ce que vous voulez dire. La transcription musicale a besoin de décennies de travail pour travailler à mi-chemin fiables. Je vous suggère de choisir un problème différent que vous pouvez gérer mieux que cela.


0 commentaires

1
votes

Il s'agit d'un domaine qui est toujours très en développement, mais il existe des algorithmes (expérimentaux) disponibles.

Vous pouvez installer Sonic Annotator et utiliser quelques plug-ins de VAMP. p>

Par exemple: P>

./sonic-annotator file.wav -d vamp:qm-vamp-plugins:qm-transcription:transcription -w midi

./sonic-annotator file.wav -d vamp:silvet:silvet:notes -w midi

./sonic-annotator file.wav -d vamp:ua-vamp-plugins:mf0ua:mf0ua -w midi


0 commentaires