有没有一种简单的方法将声音字体文件转换为
.wav
文件(或任何常见的音乐格式,真的),每个音符分开?
假设我有一个健全的字体
a.sfz
;我想从中获取文件列表 A0.wav
、A#0.wav
、B0.wav
、C1.wav
、C#1.wav
等。
特别是,我想为每个音符都有一个
.wav
,在我看来,这不是声音字体本身所具有的东西(似乎它只有几个音符分开的样本——我认为软件应该改变声音字体中包含的样本的音高以获得剩余音符的声音,但我想以某种方式直接生成所有音符的 .wav
文件,这样我就不需要改变样本的音高以任何方式)。
如果有一些软件可以做到这一点,完美,请提供一个链接,但我还没有找到任何(我发现的所有这些都只生成
.wav
文件,中间有几个注释)。如果没有,我将如何以编程方式执行此操作?
在Linux下,您可以使用SWAMI(http://www.swamiproject.org/)来管理声音字体文件(SF2格式)。
您可以编写一个程序来执行此操作。使用 RtAudio 库和 Fluidsynth 以编程方式生成您想要播放的所有音高。生成这些音高后,将它们写为波形文件。从那时起,该程序可以重复用于任何声音字体。您可以使用 google 找到这些库。
将 sf 文件导入到 audacity 中,选择“导入”>“原始数据”。
然后您可以将其导出为音频文件,例如 wav 或 mp3
我得到了一些新的 sf2 音频补丁,但我的作曲软件无法识别它们。在网上搜索了一下,却一无所获。所以我做了这个大胆的事情,它对我有用。具体到你问的问题,我的文件是演奏音阶的小号。我删除了除第一个之外的所有笔记,并导出了该单个笔记。我将导出文件(wav)复制到我的音库文件夹中,并能够通过一个小文件以不同的音调进行创作。现在...大约 30 个其他乐器可以应用此功能!
我为此编写了一个简单的工具。需要安装 Node.js。
Linux使用说明(适配其他操作系统):
mkdir midigen && cd midigen && npm init -y && npm i --save midi-writer-js
使用以下内容创建
index.js
:
const fs = require('fs');
const MidiWriter = require('midi-writer-js');
for (let octave = 0; octave <= 8; octave++) {
for (const note of ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']) {
const track = new MidiWriter.Track();
track.addEvent(new MidiWriter.ProgramChangeEvent({ instrument: 10 }));
track.addEvent(new MidiWriter.NoteEvent({ pitch: [`${note}${octave}`], duration: '8', velocity: 100 }));
fs.writeFileSync(`${note}${octave}.mid`, new MidiWriter.Writer(track).buildFile());
}
}
node .
for f in *.mid; do timidity $f -Ow -o ${f%.mid}.wav; done
要将 SF2 Soundfont 文件转换为声音采样的 Wav 文件,您可以通过 Polyphone 应用程序将 SF2 转换为 SFZ 文件目录。此应用程序将创建一个 SFZ 曲目库,您可以在其中找到 *.sfz 可编辑文本文件和一个包含从初始 SF2 文件中提取的所有 Wav 文件的子目录。无论您的操作系统是什么,您都可以在“https://www.polyphone-soundfonts.com/download”上下载该应用程序。 要加载 SF2 文件,请单击主页左上角的图标,然后单击“打开声音库”(或类似我的菜单是法语的...)并选择要转换的 SF2 文件。双击所需的 SF2 文件(例如,如果您已经加载了其他 SF2 文件)