将SoundFont转换为每个音符的.wav文件

时间:2012-05-01 03:17:07

标签: audio wav sampling soundfont

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

所以让我说我有一个声音字体a.sfz;我想从中删除文件列表A0.wavA#0.wavB0.wavC1.wavC#1.wav等。

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

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

5 个答案:

答案 0 :(得分:1)

在 Ubuntu 上,gigtools 包中的 sf2extract 可以将 SF2 文件中的所有样本提取为 WAV。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

将您的sf文件导入大胆,作为导入>原始数据。

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

我有一些新的音频补丁是sf2,我的作曲软件没有识别出来。互联网搜索并没有提出任何问题。所以我做了这个大胆的事情,它对我有用。特别是你问的问题,我的文件是一个吹奏音符的小号。我删除了所有笔记但是第一个并且导出了那个单笔记。我将导出(wav)复制到我的soundbank文件夹中,并且能够通过一个小文件以不同的音高进行编写。现在......大约有30种其他工具可用于此!

答案 4 :(得分:0)

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

Linux指令(适用于其他操作系统)

  1. 创建新的nodejs模块:
    otherThing
  2. 使用以下内容创建const eA = new Example(1, "okay"); // Example<1> eA.otherThing; // string const a: A = eA; // okay const eB = new Example(2, 12345); // Example<2> eB.otherThing; // number const b: B = eB; // okay const c: C = Math.random() < 0.5 ? eA : eB; // okay

    mkdir midigen && cd midigen && npm init -y && npm i --save midi-writer-js
    
  3. 随时修改八度音程,乐器类型(以匹配SoundFont),持续时间和音量(力度)
  4. 运行index.js
  5. Install your SoundFont
  6. 将生成的midi文件转换为wav文件:
    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());
      }
    }