2009-03-30 16 views
16

Dado un archivo de música, ¿es posible dividir cada instrumento que se está reproduciendo? Es decir. digamos que tengo algunaSong.mp3, y en esa canción hay voces, guitarra, bajo y batería. Me gustaría obtener 4 "pistas", una para cada instrumento distinto.Distinguir instrumentos en un archivo de música

Supongo que es casi imposible hacer esto, dado que los instrumentos se pueden superponer, y es notoriamente difícil distinguir las voces superpuestas y mucho menos los instrumentos.

Sin embargo, hay una biblioteca, o un algoritmo, o ALGUNA manera de hacerlo, me gustaría saber cómo.

+0

¡Este es un problema difícil! No creo que exista software que pueda identificar de manera confiable y confiable qué notas se están reproduciendo en una grabación mixta, y mucho menos separar instrumentos en pistas. – Miles

+0

-no-anser --- has resuelto tu problema? ¿en que estas trabajando? Puede que tengamos una sobrelappp – relascope

Respuesta

27

Mi proyecto de pregrado se ocupó de la transcripción de notas de un archivo WAV a un archivo MIDI. Manejamos solo el caso simple de un instrumento, posiblemente tocando más de una nota a la vez (un piano, por ejemplo). Nuestra investigación sobre el tema antes de comenzar demostró que incluso este (es decir, un solo instrumento) se considera no trivial. Básicamente, el problema es:

  • encontrar qué frecuencias se están reproduciendo en un momento dado. Esto se puede hacer mediante DFT/FFT de ventanas pequeñas, una a la vez.
  • Usa alguna heurística para adivinar qué frecuencias son armonías de la misma nota y cuáles pertenecen a notas diferentes. Este puede ser fácil si sabes qué instrumento está sonando, pero es difícil en el caso general, porque las magnitudes de cada armonía difieren según el instrumento. Por ejemplo, puede tener dos Cs una octava aparte de un instrumento, o puede tener una C pero de un instrumento diferente.
  • después de saber qué notas están sonando en cada momento, debe adivinar cuándo hay interrupciones en las notas. Podría tener una nota larga o una serie de notas cortas. Dependiendo del tamaño de las ventanas que usaste para el DFT inicial, podrías tener diferentes resultados aquí.

Ahora, si usted tiene más de un instrumento a la vez, y no hay dos están jugando las mismas notas o acordes de éstos, en un momento dado, que puede ser capaz de decir los instrumentos separados utilizando algún heurístico sobre la magnitudes de las armonías o en las secuencias de notas que están jugando. Lo más probable es que haya momentos en que dos instrumentos toquen la misma nota. Entonces realmente no tienes forma de decidir si (a) hay un instrumento tocando la nota, (b) dos instrumentos tocando el mismo volumen, (c) uno tocando suavemente y el otro tocando fuerte o (d) cualquier combinación de los mismos

De todos modos, esa es la breve lista de problemas para resolver. No conozco ningún algoritmo que resuelva esto en el caso general. No creo que este problema haya sido resuelto todavía.

Editar: Mi presentación del proyecto se puede encontrar en http://www-sipl.technion.ac.il/new/Archive/Special_Events/sipl2004/Projects_PowerPoint/WAV-to-MIDI.pdf

+0

Buena descripción del problema, por cierto. – dmckee

+0

Gracias por la interesante respuesta. Voy a marcarlo como la respuesta aceptada, aunque técnicamente NO RESUELVE el problema, proporciona algunos elementos muy interesantes para pensar. ¡Gracias! :) – FreeMemory

+0

Creo que usaste la palabra "armonía" donde querías usar "armónico". – Mud

1

La manera más fácil de hacerlo es mantener los instrumentos por separado en primer lugar, razón por la cual muchas aplicaciones de procesamiento musical intermedio utilizan MIDI para almacenar mensajes de instrumento en forma abstracta en pistas separadas.

2

Cada instrumento tiene una oscilación espuria característica, por lo que si aísla notas individuales (con DFT/FFT) y compara las otras frecuencias en ese punto de tiempo, puede distinguir al menos diferentes tipos de instrumentos.

+0

No creo que llegue muy lejos con solo DFT, pero esta es la única respuesta que consideraría como remotamente corregida hasta ahora. Separar tantos instrumentos es sin duda una tarea de procesamiento de señal realmente difícil. Puede tener algo de suerte seleccionando diferentes frecuencias, pero eso es todo. –

+1

DFT/FFT no tiene suficiente resolución para separar las notas graves a menos que haga que su ventana FFT * sea * muy grande. Y no hace ninguna magia separar los armónicos de notas diferentes tocadas al mismo tiempo. –

+0

Difícil para obtener mucha certeza de esta manera, especialmente con la grabación de instrumentos reales (a diferencia de las señales sintetizadas), pero parece ser el enfoque más limpio si * debes * intentar elegir una sola pista. No es fácil. – dmckee

-1

mp3 es un formato con pérdida. Funciona modelando la respuesta acústica de una persona y arrojando información que considera que una persona no puede escuchar. En esencia, instrumentos más fuertes que eclipsan a los instrumentos suaves: el más suave es abandonado. Esto significa que nunca podrá extraer lo que originalmente entró en el mp3 y mucho menos separar los instrumentos.

Tengo un amigo que es ingeniero de sonido y siempre tiene que decir "No" a las personas que le piden que vuelva a diseñar una pista grabada como mp3.

Hace unas semanas vi un estudio que sugería que la generación más joven prefería el sonido de los mp3 en formatos más completos, ya que es con lo que habían crecido.

+0

Estaría dispuesto a conformarme con un formato no sin pérdida, como OGG. Esencialmente: cualquier formato ampliamente disponible. – FreeMemory

+0

Entonces sugeriría el enfoque de tsttenner. Lleve la música al dominio del tiempo, conviértala en dominio de frecuencia, busque bandas de frecuencias y luego intégrelas con notas producidas por instrumentos separados. ¡Me suena como un proyecto de nivel de investigación! –

0

Resumen de la historia larga: Usted no puede excepto en el caso de que sus cuatro instrumentos sean sintetizadores que reproduzcan ondas sinusoidales puras.

+0

Las ondas sinusoidales puras no son (teóricamente) necesarias. Debe conocer la distribución * linealmente independiente * de los armónicos para cada instrumento. Y debe tener suficientes datos en cada nota, lo que pone algunas restricciones sobre cuán complejas y similares pueden ser las distribuciones. – dmckee

8

De hecho, he tropezado con un algoritmo muy interesante llamado ICA (Análisis de Componentes Independientes). El concepto detrás de este algoritmo no proviene del mundo del procesamiento de señal, sino de las teorías probabilísticas. Lo usamos para separar dos canciones que se mezclaron en un solo archivo mp3. Puede encontrar una biblioteca de implementación en Matlab \ C++ \ Python llamada FastICA here. Dale una oportunidad, es realmente agradable.

+0

Más directamente, hay una implementación en 'sklearn' (ver [aquí] (http://scikit-learn.org/dev/auto_examples/decomposition/plot_ica_blind_source_separation.html)) – MichaelChirico

Cuestiones relacionadas