Timidity++ - Arch Linux 中文维基

跳转到内容

# Timidity++

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Timidity++，最近一次同步于 2024-05-07，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

TiMidity++ 是用于在不使用硬件合成器的情况下播放 MIDI 文件的软件合成器。它可以实时将 MIDI 翻译给声卡，或是将成果存储到文件中，比如存储到 PCM.wav 文件格式。

## 安装

安装 timidity++包 包。

你还应当安装音色库（SoundFont）或 Gravis UltraSound（GUS） 补丁文件来获得产生音频的能力。参见 MIDI#SoundFont 列表

如果你使用 pipewire包，由于 TiMidity++ 有时依赖 ALSA 工作，你需要安装 pipewire-alsa包。

## 配置

将下面的配置加入到 timidity.cfg(5) 来选用你想用的音色库。

FreePats：

    /etc/timidity/timidity.cfg

    soundfont /usr/share/soundfonts/freepats-general-midi.sf2

Fluid：

    /etc/timidity/timidity.cfg

    soundfont /usr/share/soundfonts/FluidR3_GM.sf2

### 守护进程

如果你希望将 TiMidity++ 用作 ALSA 的音序器，你应当将用户加入到 `audio` 用户组。就像大部分用户组更改一样，你可能需要重启会话（比如登出后再登入），来使新加入的组可以通过 `groups` 指令显示出来。

启动/启用 `timidity.service` 用户单元。注意，当你没有在加入 `audio` 组后没有重启会话时，你可能无法正常启动这个服务。

使用 PulseAudio 的环境下，这个服务可能无法启动。你可能需要在你的桌面环境中将下列指令设为自启动项。如果你只想以守护进程模式运行 TiMidity++ 一次，你也可以直接使用这串指令来获得相对更易读的终端输出。

    $ timidity -iA

## 用例

### 播放文件

TiMidity++ 有两种用法：将它用作一个 MIDI 播放器，或是为 ALSA 添加 MIDI 支持的守护进程。

#### 独立模式

你可以用 TiMidity++ 播放 MIDI 文件：

    $ timidity example.mid

`-in` 选项会唤出一个基于文本的界面。TiMidyty++ 还有很多其他选项。详见 timidity(1) 或使用 `-h` 选项。

#### 守护进程模式

如果你选择将 TiMidity++ 用作守护进程，它将为 rosegarden、aplaymidi、vkeybd 之类的程序提供 MIDI 输出支持。

Timidity++ 会提供软 MIDI 接口（如果你的系统有硬件 MIDI 接口的话，就会另外创建一些）：

    $  aconnect -o

    client 128: 'TiMidity' [type=user]
        0 'TiMidity port 0 '
        1 'TiMidity port 1 '
        2 'TiMidity port 2 '
        3 'TiMidity port 3 '

你现在可以如此播放 MIDI 文件：

    $ aplaymidi filename.mid --port 128:0

另一个典型例子是 vkeybd，一个 X 下的虚拟 MIDI 键盘。

你可以安装 vkeybdAUR，然后如此使用：

    $ vkeybd --addr 128:0

选项 `--addr 128:0` 将软件 MIDI 输入接口（本例是由 vkeybd 提供的）连接到第一个 ALSA 输出接口（本例中是由 Timidity++ 提供的）。另外，你也可以使用 aconnect，patchageAUR 或是 kaconnect。最终，当你使用 vkeybd 提供的按键弹奏时，TiMidity++ 将演奏出恰当的乐声。

#### 连接到虚拟 MIDI 设备

如果你有一个 Timidyty++ 守护进程和 aplaymidi 一起运行，你可以将这个守护进程与虚拟 MIDI 设备连接，来使 rosegarden 或 scala 之类的程序运行。

加载 `snd-virmidi` 内核模块。如果你愿意，也可以让系统启动时加载模块。

用 acconnect 来确认接口数：

    $ aconnect -o

    client 14: 'Midi Through' [type=kernel]
         0 'Midi Through Port-0'
     client 20: 'Virtual Raw MIDI 1-0' [type=kernel]
         0 'VirMIDI 1-0     '
     client 21: 'Virtual Raw MIDI 1-1' [type=kernel]
         0 'VirMIDI 1-1     '
     client 22: 'Virtual Raw MIDI 1-2' [type=kernel]
         0 'VirMIDI 1-2     '
     client 23: 'Virtual Raw MIDI 1-3' [type=kernel]
         0 'VirMIDI 1-3     '
     client 128: 'TiMidity' [type=user]
         0 'TiMidity port 0 '
         1 'TiMidity port 1 '
         2 'TiMidity port 2 '
         3 'TiMidity port 3 '

然后创建连接：

    $ aconnect 20:0 128:0

现在，系统中的 `/dev/snd/midiC1D0` MIDI 虚拟输出设备应该可以使用了。

## 小技巧

### 转换文件

Timidity++ 可以将 MIDI 文件转为其他格式。下列指令将结果输出到 WAV 文件中：

    $ timidity input.mid -Ow -o out.wav

用 FFmpeg 可以转为其他模式。此例转为 mp3：

    $ timidity input.mid -Ow -o - | ffmpeg -i - -acodec libmp3lame -ab 256k out.mp3

### 如何使 DOSBox 使用 TIMIdity++

注意：下列方法测试于 DOSBox 0.72 版本。

首先，你需要写配置。在 DOSBox 中输入下列指令创建配置文件：

    config -writeconf dosbox.conf

你可以将 [[ic|dosbox.conf}} 替换成任何你想要的名字。如果你想要隐藏文件，在文件名前加点。

在执行下列指令前，使用 aconnect 指令以确保 Timidity++ 已经作为守护进程启动。

使用任何编辑器编辑配置，你需要直接跳转到此节：

    dosbox.conf

    [midi]
    mpu401=intelligent
    device=default
    config=

把 ALSA 连接端口写到 config= 后，默认是：

    config=128:0

在终端中重启 DOSBox 以阅读调错信息。情况下，你应该看见 128:0 接口已成功初始化。

## 疑难解惑

### TiMidity++ 并不能播放 MIDI 文件

可能是你的声音文件没有正确配置。运行：

    $ timidity example.mid

如果终端输出如下，那么你的声音文件可能没有正确配置。

    No instrument mapped to tone bank 0, program XX - \
    this instrument will not be heard

确保你已经安装了声音文件，并且你的声音文件已经列入 `/etc/timidity/timidyty.cfg`。详见#配置。

### 守护进程模式下，播放声音速度过快

TiMidity++ 的默认 ALSA 输出模块可能在 ALSA 服务模式下导致这个问题。尝试其他输出选项，例如 libao：

    $ timidity -iA -OO

然后用 aplaymidi 测试。如果不起效，你可能需要配置 JACK 然后将 Timidity++ 的输出改到 JACK 上。

## 参见

- USB MIDI 键盘

分类：​

- 音乐

Timidity++
添加话题