2010-09-07 23 views
6

¿Hay alguna manera de obtener los datos de las notas de un archivo MIDI? Es decir, quiero descomponer el archivo MIDI en sus partes constituyentes para que tengan la forma de una palabra única (o cualquier otro tipo de datos). Lo que quiero hacer al final es tomar un archivo MIDI y encontrar patrones en las notas. Acceda a cada nota, encuentre su frecuencia (de reproducción) y observe la probabilidad de que se toquen otras notas después de ella.Obtener datos de notas del archivo MIDI

Sería bueno hacer esto en C/C++, pero cualquier lenguaje estaría bien.

Respuesta

1

Analizar archivos MIDI a mano no es divertido, tome mi palabra al respecto. ;) El formato, aunque bien documentado, es difícil de tratar, ya que siempre está en el nivel de bytes sin formato. Como está interesado en extraer información significativa de los archivos MIDI, le recomiendo usar un marco como Juce, que está escrito en C++ y tiene soporte para leer archivos MIDI.

Juce es bastante grande, pero la API es buena y está bien documentada. El class for parsing MIDI files, por ejemplo, es bastante sencillo y fácil de usar.

5

Nik Reisman - lo siento, pero no estoy de acuerdo con usted ... el análisis de midi en C#, C++ es algo así como 400 filas de código ... No es nada difícil y no es nada difícil.

aconsejaré de empezar con este enlace: http://www.sonicspot.com/guide/midifiles.html Hay todo lo que necesita saber acerca de MIDI y cómo leerlo ..

En la breve descripción de cómo el analizador funcionará:
1) Abrir midi en modo byte
2) ¡Lee el fragmento de encabezado donde hay información sobre el tamaño, el número de pistas y el formato de archivo IMPORTANTE!
- Hay 3 tipos de formatos: 0,1,2 (el tipo 2 es realmente "valioso", solo hay pocos archivos midi con este tipo, por lo que no es necesario leer el midi si hay tipo 2)
- si no se escribe: "MThd" (0x4D546864), extremo con el error (que es un archivo mal midi)
3) Leer pista trozo
- si no se escribe: "MTrk" (0x4D54726B) final con el error (es un archivo MIDI malo)
4) Lea los eventos midi .. - Hay muchos eventos, puede leerlos todos con comandos if-else, o puede leer solo los eventos lo que quiere saber, por ejemplo, NOTA ENCENDIDA, NOTA DESACTIVADA - A veces en algunos archivos midi no están NOTE OFF ... este evento es chang ed con NOTE ON y velocidad 0

En los sitios web todo se explica muy bien. Si abre el archivo midi en modo byte, tendrá solo unos pocos métodos y todo será solo sobre los comandos if-else y allí encontrará lo que está almacenado en este momento.
Es importante entender LONGITUD VARIABLE, pero en los sitios web también se explica. No es dificil. Puede buscar en Google muchos sitios donde también se explica VARIABLE LENGTH, con algunas imágenes y ejemplos. Entonces no creo que sea difícil explicarlo aquí.

Si quiere un poco más de consejos, escríbame, lo intentaré. Pero analizar MIDI no es tan difícil como parece. Si tiene algún problema, escríbame ...

+1

¿Síndrome de NIH tal vez? Quiero decir que una clase std :: vector no es difícil de escribir, en la superficie es simplemente una matriz de longitud variable ... std :: log2() tampoco es difícil de escribir ... y así sucesivamente. ¿Por qué no escribir todo tú mismo? Cosas como el análisis de archivos a mano es lo más repetitivo de todos, incluso más cuando se trata de formatos "estándar" que definitivamente deberían tener una implementación sólida y funcional en alguna parte. – thesaint

+2

Lo siento, podría enviarle marcos de 2198312093 y soluciones de terceros y él podría tener problemas más grandes que solo con la escritura por su cuenta. Por lo menos si uso bibliotecas de terceros, estoy teniendo problemas más grandes que si lo hubiera escrito yo mismo. Y de todos modos ALGUIEN necesita escribir el código. Si yo soy uno o algún Joseph Nowak de Taiwán escribe que no es importante. Todo el tiempo puede obtener algunos errores. Y si realmente quiere ENTENDER lo que hace una biblioteca, debe mirar el código de todos modos. Entonces, en muchos casos, es más fácil escribirlo usted mismo. – piggy