Pergunta

Sou novo neste campo - mas preciso realizar uma conversão de WAV para MIDI em java.Existe uma maneira de saber exatamente quais são as etapas envolvidas na conversão de WAV para MIDI?Tenho uma ideia muito aproximada de como você precisa;experimente o arquivo wav, filtre-o, use FFT para análise espectral, extração de recursos e, em seguida, grave os recursos extraídos no MIDI.Mas não consigo encontrar fontes ou documentos sólidos sobre como fazer tudo isso?Alguém pode me dar pistas sobre como e por onde começar?Há alguma API de código aberto disponível para este processo de conversão de WAV para MIDI?

Antecipadamente obrigado

Foi útil?

Solução

É um processo mais envolvido do que você imagina.

Este problema de pesquisa é frequentemente referido como transcrição musical: O ato de converter uma representação de baixo nível da música (por exemplo, forma de onda) em uma representação de nível superior, como MIDI ou mesmo partituras.

A sofisticação da sua solução dependerá da complexidade dos seus dados de entrada. Toneladas de trabalhos de pesquisa abordam a transcrição musical apenas em piano ou bateria monofônica ... porque são fáceis de transcrever. (Relativamente.) O violino é mais difícil. A voz é ainda mais difícil. Violin Plus Voice Plus Piano é muito mais difícil. Uma sinfonia é quase impossível. Você entendeu a foto.

Os elementos básicos da transcrição musical envolvem qualquer uma das seguintes áreas sobrepostas:

  1. (multi) estimativa de afinação
  2. Reconhecimento de instrumentos, modelagem timbral
  3. Detecção de ritmo
  4. Nota de detecção de início/deslocamento
  5. modelagem de formulário/estrutura

Pesquise artigos sobre "Music Transcription" no Google Scholar ou no ISMIR Proceedings: http://www.ismir.net. Se você está mais interessado em um dos subtópicos acima, posso apontá -lo ainda mais. Boa sorte.

EDIT: Dito isto, existem soluções existentes que todos podemos encontrar na web. Sinta -se à vontade para experimentá -los. Mas, como você faz, avalie -os com um olho e uma orelha críticos. Que tipos de sinais de áudio causariam falha na transcrição?

Edit 2: Ah, você está apenas fazendo isso para piano. Ok, isso é factível. A transcrição musical avançou até o ponto em que pode transcrever o piano monofônico muito bem. Um concerto de Rachmaninov ainda apresentará problemas.

Nossas recomendações dependem do seu objetivo final. Você afirma "precisar para se apresentar ... em Java. "Parece que você só quer que algo funcione, independentemente de como isso o leva lá. Nesse caso, eu concordo 100% com outras pessoas: use algo que existe.

Essa é realmente uma pergunta interessante; Todas as bibliotecas MIR que conheço são tipicamente C/C ++/Python/Matlab. Mas não Java. A eChonest tem uma API Java, mas acho que não faz transcrição no nível do ano. http://developer.echonest.com. (Edite-o faz Transcrição no nível da nota. Os dados retornados incluem pitch, timbre, batida, tatum e muito mais. Mas acho que a polifonia ainda é um problema.)

Oh, Marsyas é baseado em Java. Legal. Eu pensei que era apenas C ++. http://marsyas.info/ Eu recomendo isso. É desenvolvido por George Tzanetakis, professor de Mir. Ele faz uma análise no nível do sinal e deve ser uma boa opção.

Agora, se isso é para uma experiência divertida de aprendizado, acho que você pode usar os utilitários de manipulação de som em Java para experimentar o sinal WAV e ver o que sai.

EDIT: Esta página descreve o software MIR melhor do que eu: As ferramentas que usamos

Para Matlab, você pode estar interessado no Caixa de ferramentas MIR

Aqui está uma boa página de conjuntos de dados comuns: Conjuntos de dados MIR

Outras dicas

Este é um empreendimento muito grande para ser novo no campo, a menos que você queira estar familiarizado com a análise de sinais e a detecção de recursos em geral e deseja analisar mais especificamente a transcrição automática.

Não há API para conversão WAV para MIDI. Vamp é uma estrutura para plugins de extração de recursos, mas para fazer transcrição automática, você precisaria usar todas as funcionalidades dos plug -ins existentes, além de implementar a funcionalidade que ainda existe em nenhuma delas.

Navegue pelas descrições dos plugins a página de download de vamp, Quaisquer descrições que você não entende são tópicos que você deve começar a pesquisar se quiser fazer isso.

Se você não precisar automatizar esta tarefa (ou seja, para um site onde as pessoas podem fazer upload de MP3 e obter arquivos MIDI de volta), considere usar uma ferramenta como Melodyne O que já é muito bom em ir isso. Como Steve observou, essa é uma tarefa muito difícil de realizar e até os melhores algoritmos e soluções presentes no momento não são 100% confiáveis.

Portanto, se você estiver apenas fazendo um trabalho de estúdio e precisar fazer algumas conversões, provavelmente economizará um pouco de tempo (e muita dor de cabeça) para usar uma ferramenta já projetada para esta tarefa.

Dolphin, desculpe ser brusco, mas você subestimou completamente o problema.O que você deseja alcançar – uma transcrição completa do som do piano envolvendo todos os parâmetros usados ​​durante a execução exigiria uma enorme pesquisa com pessoas que trabalharam na área por muitos anos.Mesmo um grupo de PhDs em processamento de sinais teria que investir muito trabalho para chegar perto do que você quer dizer.A transcrição de música precisou de décadas de trabalho para funcionar até mesmo parcialmente confiável.Eu sugiro que você escolha um problema diferente que possa gerenciar melhor do que este.

Este é um campo que ainda está muito em desenvolvimento, mas existem alguns algoritmos (experimentais) disponíveis.

Você pode instalar o Sonic Anotator e usar alguns plugins VAMP.

Por exemplo:

./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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top