我有一个特定的任务想要完成...我正在尝试找出是否有办法做到这一点。基本上,对于我正在从事的一个项目,我想为单个音符创建声音文件。
例如,一架钢琴弹奏单个“A”音就是一个文件。一架钢琴弹奏“B”音就是另一个文件。
我想对大量乐器进行此操作。我知道 Mac OS 内置了 midi 乐器。我能够在 Garage Band 中手动创建我想要的文件类型,方法是演奏软件乐器、保存文件,然后更改音高。
但是,这很耗时,我认为这个过程可以自动化。如果我可以使用命令行创建一个 midi 文件,然后将该 midi 文件转换为声音文件,我是否可以使用 shell 脚本来完成此操作?
有人能给我一些建议来让我走上正确的道路吗?
答案1
我使用的解决方案涉及 abc2midi 和 Amadeus Pro,尽管如果我想使用完整的命令行,我似乎可以使用 FluidSynth。基本上,我制作了一个模板 abc 文件,如下所示
X:1
M:4/4
K:C
%%MIDI program number
note z
然后我用如下所示的 shell 脚本替换了“number”和“note”
#/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
此时,这基本上给了我一个装满 midi 文件的文件夹,然后我可以使用合成器将其转换为 wav 文件。在这里,我使用 Amadeus Pro(这是一款商业应用程序)对它们进行批量处理。
我知道像 FluidSynth 这样的命令行合成器可能也能起作用,但这只是我的项目中的一个(小)步骤,而且我试图以最快的方式完成此操作,而不是做出最优雅的解决方案,所以我没有花时间去运行它并将其添加到我的 shell 脚本中。