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++
新增話題