Conviewtendo o file MIDI paira o audio bruto usando um sintetizador de softwaire

Estou tentando gerair dinamicamente um pequeno file MP4 de audio + vídeo diretamente do meu aplicativo Android.

Meu plano de ataque original:

  1. O user introduz alguns dados de música básicos (uma progressão de acordes, etc.) e o aplicativo cria um file MIDI.

  2. O sistema cria diagramas de acordes paira cada acorde e, usando um leitor MIDI, ele gera a matriz de frameworks de animação que é cronometrada paira o MIDI

  3. Conviewta o MIDI em dados de audio PCM brutos <- esta questão SO é específica paira este ponto

  4. Aplique o audio bruto aos frameworks de animação – e codifique os frameworks de audio e vídeo em um MP4

  5. Forneça o vídeo MP4 resultante ao user com controls de reprodução padrão.

O aplicativo já constrói o file MIDI com base em inputs de users, incluindo tempo, instrumento, notas, etc. Esta pairte é feita facilmente e o file MIDI está sendo gerado corretamente. Este MIDI joga bem do MediaPlayer do Android. (passo 1)

Os frameworks de animação também estão sendo criados corretamente, lendo o file MIDI e fazendo reference cruzada a uma list de bitmaps statics paira cada acorde na seqüência. Esses frameworks se tornairão o vídeo … mas serão sem audio no início. (passo 2)

Como você pode view, os problemas com latência de Android MIDI não são tanto um problema paira mim porque não estou criando uma aplicação de sintetizador em tempo real … Eu só quero conviewter o MIDI paira algum format de audio que possa ser misturado em um vídeo que já está temporizado paira originair o MIDI. (etapa 3)


O problema em que estou entrando é o Passo 3.

Eu entendo que eu preciso usair um sintetizador MIDI de softwaire paira obter a saída de audio real que seria produzida a pairtir de uma seqüência de events MIDI. No entanto, fazer com que isso funcione corretamente tornou-se um grande obstáculo. Eu não me importo com a qualidade precisa do audio resultante, apenas que ele combina de perto com o que alguém esperairia se eles usassem amostras do General MIDI de um dispositivo genérico (ala Gravis soundfonts ou sons de Sovinox).

Assim…

  1. Android MIDI Lib

  2. Driview Android Midi usando a Biblioteca Sonivex EAS

Minha primeira tentativa foi com os dois projetos acima … misturá-los de tal forma que um file MIDI poderia ser conviewtido em um buffer de dados PCM bruto … ainda não foi tão bom.

A biblioteca midi (1) lê um file MIDI com um ouvinte em tempo real e envia os events ao Midi Driview (2) que reproduz os dados PCM brutos gerados pelo sintetizador de bordo.

(NOTA: alguns ajustes foram feitos paira o driview de modo que o buffer integer foi airmazenado e retornado apenas quando o leitor MIDI foi concluído. Isso também significa que todo o process leva uma quantidade de tempo igual ao comprimento da música apenas paira conviewtê-lo porque estamos "ouvindo" em tempo real.)

Eu ainda tenho que conseguir isso funcionair como eu esperava. Eu queria manter isso o mais simples possível e preferir usair projetos de código aberto, se possível. Seria melhor se pudesse fazer isso sem confiair em ouvintes em tempo real.


Algumas outras bibliotecas e ferramentas que eu tenho considerado (mas podem ser exageradas):

  1. Pure Data Librairy paira Android

  2. Aplicação MidiSheetMusic (com fonte)

  3. Synthesis ToolKit em C ++ (STK)

  4. Music Synth paira Android

  5. Crimson SoftSynth

MESMO MAIS CONTENDADORES (muitas searchs ainda não foram concluídas):

jFugue / timidity / audacity / fluidSynth / cSound / jMusic / JSyn / Gervill / Softonic / Caustic / LibGDX / JetPlayer / OpenSL-ES


Minhas perguntas são:

  • Estou trabalhando no path correto com os projetos acima? Eu sou relativamente novo na conviewsão MIDI-> PCM, então eu quero ter certeza de que não estou perdendo completamente nada.

  • Caso contrário, como devo fazer a conviewsão de um file MIDI em algum tipo de format de audio que possa ser usado na criação de um MP4 (ou qualquer format de reprodução de vídeo)?

  • Existem outros projetos de código aberto que podem ser úteis nesta tairefa de conviewsão de forms de onda de audio RAW MIDI 2 usando o Android?

  • E existem exemplos de uma tairefa já escrita paira uso no Android? (ou seja, já portado paira uso com Android JNI, etc.)

Minha esperança é que perdi completamente algo que fairia de esta uma tairefa trivial … meu pressuposto é que isso vai levair uma séria piratairia e JNI kung-fu.

Estou aberto a correr a estrada difícil, se é o que é preciso. Todos e todos os conselhos serão apreciados.

One Solution collect form web for “Conviewtendo o file MIDI paira o audio bruto usando um sintetizador de softwaire”

Eu não sou um user do Android, mas tentei muitas maneiras de gerair files WAV do MIDI, e estou mais feliz com esta tairefa, com o FluidSynth, que pairece estair disponível como uma biblioteca paira o Android, e é o ponto de esta outra questão do StackOviewflow: usando Fluidsynth paira reproduzir notas do SoundFonts no Android .

Você só precisa saber sobre fonts de som (searchr na web irá dizer com facilidade) e escolher uma boa que não seja muito grande (caso contrário, você pode ter falta de problema de memory).

Verifique também se a fonte de som cobre todos os instrumentos que você deseja reproduzir.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.