7

有没有一种简单的方法可以将声音字体文件转换为.wav文件(或任何常见的音乐格式,真的),为每个音符分开?

所以假设我有一个健全的字体a.sfz;我想从中得到一个文件列表A0.wav, A#0.wav, B0.wav, C1.wav,C#1.wav等。

特别是,我希望.wav每个音符都有一个,在我看来这不是声音字体本身所具有的(似乎它只有几个音符分开的样本——我假设软件应该改变音高声音字体中包含的样本以获得剩余音符的声音,但我想以某种方式.wav直接为所有音符生成文件,这样我就不需要以任何方式改变样本的音高)。

如果有一些软件可以做到这一点,完美,请提供一个链接,但我没有找到任何(我发现的所有这些只生成.wav文件,除了几个注释)。如果没有,我将如何以编程方式执行此操作?

4

5 回答 5

2

在 Linux 下,您可以使用 SWAMI ( http://www.swamiproject.org/ ) 来管理 soundfont 文件(SF2 格式)。

于 2015-01-02T10:02:08.593 回答
2

在 Ubuntu 上,sf2extractgigtools中可以将所有样本从 SF2 文件中提取为 WAV。

于 2021-02-01T16:39:59.397 回答
0

您可以编写一个程序来执行此操作。使用 RtAudio 库和 Fluidsynth 以编程方式生成您想要演奏的所有音高。生成这些音高后,将它们写为波形文件。从那时起,该程序可以用于任何声音字体。您可以使用 google 找到这些库。

于 2012-05-01T05:36:30.530 回答
0

将您的 sf 文件导入 Audacity,如 Import>Raw Data。

然后,您可以将其导出为音频文件,例如 wav 或 mp3

我得到了一些新的 sf2 音频补丁,但我的作曲软件无法识别它们。做了一个互联网搜索,并没有想出任何东西。所以我做了这个大胆的事情,它对我有用。具体到你所问的,我的文件是一个吹奏音阶的小号。我删除了除第一个之外的所有笔记并导出了该单个笔记。我将导出 (wav) 复制到我的音库文件夹中,并且能够通过一个小文件以不同的音高进行创作。现在......大约有 30 种其他乐器可以应用它!

于 2016-07-16T02:32:00.333 回答
0

我为此编写了一个简单的工具。需要安装 Node.js。

Linux使用说明(适配其他操作系统):

  1. 创建新的 nodejs 模块:
    mkdir midigen && cd midigen && npm init -y && npm i --save midi-writer-js
    
  2. 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());
      }
    }
    
    
  3. 随意修改八度范围、乐器类型(以匹配您的 SoundFont)、持续时间和音量(力度)
  4. node .
  5. 安装你的 SoundFont
  6. 将生成的 midi 文件转换为 wav 文件:
    for f in *.mid; do timidity $f -Ow -o ${f%.mid}.wav; done
    
于 2019-09-25T18:55:24.513 回答