Geração automatizada de arquivos de som para notas individuais de música em um Mac

1

Eu tenho uma tarefa específica que quero realizar ... Estou tentando descobrir se existe uma maneira de fazer isso. Basicamente, para um projeto em que estou trabalhando, quero criar arquivos de som para notas musicais individuais.

Assim, por exemplo, um piano tocando um único som "A" seria um arquivo. Um piano tocando um som "B" seria outro arquivo.

Eu gostaria de fazer isso para um grande número de instrumentos. Eu sei que o Mac OS possui instrumentos midi embutidos. Eu consegui criar o tipo de arquivos que estou procurando manualmente no Garage Band, tocando um instrumento de software, salvando o arquivo e alterando o tom.

Isso é demorado, no entanto, e acho que o processo pode ser automatizado. Talvez se eu pudesse criar um arquivo midi com a linha de comando e depois converter esse arquivo midi para um arquivo de som, eu poderia fazê-lo com um script de shell?

Alguém tem alguma recomendação para me colocar no caminho certo?

    
por Matthew Gillingham 14.05.2011 / 12:06

1 resposta

1

A solução que usei envolveu o abc2midi e o Amadeus Pro, embora pareça que eu poderia ter usado o FluidSynth se eu quisesse usar a linha de comando completa. Basicamente, eu fiz um arquivo abc modelo que se parecia com isso

X:1
M:4/4
K:C
%%MIDI program number
note z

então eu substituí "number" e "note" por um shell script parecido com este

#/bin/sh

for i in {0..127}
do
    for j in C ^C D ^D E F ^F G ^F A ^A B c ^c d ^d e f ^f g ^g a ^a b c\'
    do
        sed "s/number/$i/g" template | sed "s/note/$j/g" > $i$j.abc
    done
done

for file in *.abc
do
    abc2midi $file
done

Nesse ponto, isso basicamente me deu uma pasta cheia de arquivos midi que eu poderia usar um sintetizador para transformar em arquivos wav. Aqui, eu os processei em lote com o Amadeus Pro (que é um aplicativo comercial).

Eu entendo que um sintetizador de linha de comando como o FluidSynth também poderia ter funcionado, mas este foi apenas um (pequeno) passo no meu projeto e eu estava tentando fazer isso da maneira mais rápida possível, não fazer a solução mais elegante. Eu não aproveitei para fazer isso e adicioná-lo ao meu shell script.

    
por 22.05.2011 / 06:41