サウンドドライバ(出力サウンドシステム)がALSAかOSSに選択されていると、それらのサウンドシステムのMIDIデバイスが利用できる。
![]() | メモ |
|---|---|
バージョン1.3.25以上ではサウンドドライバ(出力サウンドシステム)は自動的に選択される。また、PulseAudioの統合も進んでおり、GNU/Linuxでは多くの場合、サウンドドライバにはALSAが選択された上で、PCMにはPulseAudioモジュール経由でPulseAudioが,MIDIデバイスにはALSAが用いられる形となる。 |
ALSAの場合、TiMidity++(alsaseqインターフェース使用)やFluidSynth(GUI版のQSynthを含む)などのソフトウェアシンセサイザも利用できる。また、USB接続のハードウェアMIDI音源はALSAで使用できることが多い。自動認識されなければカーネルモジュールsnd-usb-audioを読み込ませる。
![]() | 注意 |
|---|---|
上は、言い換えると「TiMidity++やFluidSynth,QSynthといったものをMIDIデバイスとして用いるにはALSAが選択されている必要がある」ということになる。また、これらのシンセサイザのPCM音声の出力先は幾つかのサウンドシステムから選択できるが、その中からALSA[11]が選択されているなど、シンセサイザからの音声が正常に出力される状態であることも必要となる。 |
PCMとMIDIとを別のドライバにすることはできないが、ALSAのプラグインを用いてWineからALSAへの出力時におけるPCMデバイス指定の要領でデバイス指定をすることで分けることは可能。
OS(仮想Windows)の出力先MIDIデバイスを切り替える部分。出力デバイスを選択しない/できないMIDIアプリケーションはこの設定に基づいて出力先デバイスを決定し、信号を送る。
設定はレジストリのHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap以下だがWindowsとは微妙に異なる。
例13 TiMidity++のalsaseqインターフェースを出力先にするレジストリ例(Wine 1.1.3以上向け)
REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap] "AutoScheme"=dword:00000000 "ConfigureCount"=dword:00000004 "CurrentInstrument"="TiMidity - TiMidity port 0" "CurrentScheme"="" "DriverList"="" "UseScheme"=dword:00000000
GUIではMIDIせれくたーのソースを修正したものをビルドしてWineのMIDIマッパー設定ツールとして使うことができる。
DLS音源はRPGツクールXP/VX系作品やWOLF RPGエディター作品など、MIDI音声の出力先がMicrosoft Synthesizer固定のアプリケーションで正常にMIDIオーディオを出力するのに必要
Windows標準のDLS形式のMIDI音源データgm.dlsはMicrosoft社が配布しているDirectXの8.1,8.1b,9.0cなどのバージョンの再頒布可能ランタイムパッケージの中にgm16.dlsのファイル名で含まれている(配布ファイルを展開すると得られるDirectX.cabの中にある)
DLS音源データのファイルはMicrosoft GS Wavetable SW Synth(いわゆるゲイツシンセ)の音源ファイルとしても用いられるが、Wineにこのシンセサイザは存在せず、DirectMusicを用いない一般的なMIDIアプリケーションから音色として用いることはできない
gm16.dlsをWine環境(prefix)のC:\WINDOWS\system32\drivers\へgm.dlsの名前で配置し、winetricksの「directmusic」をインストールすると、RPGツクールXP/VX系作品のような例外を除いて音が鳴るようになる
関連セクション
[任意]ファイル名: extract-gmdls-from-dx9c-redist.sh ライセンス: GPL-3 or lator
#! /bin/bash
# DirectX 9.0c 再頒布可能パッケージからMSGSの音源ファイルgm.dlsを取り出して保存
# (C) 2008-2010 kakurasan
# version 20100716
# Licensed under GPLv3+
PATH=/bin:/usr/bin:/usr/local/bin
MD5=a9ceefb23a51023e5c87feb9f3ec92dd
URL=download.microsoft.com/download/4/7/5/475cc4c2-09bb-4d7f-b7c9-b11750b45604/directx_9c_Aug05sdk_redist.exe
die()
{
zenity --error --text "${1}"
rm "${TEMPDIR}" -fr
exit 1
}
download()
{
! wget -O out ${URL} && ! curl -o out ${URL} && die "ファイルがダウンロードできませんでした"
EXEFILE=out
}
# ツールのチェック
if ! zenity --version > /dev/null; then
echo "zenityがインストールされていません"
exit 1
fi
if ! cabextract --version >/dev/null 2>&1; then
zenity --error --text "cabextractがインストールされていません"
exit 1
fi
# 開くファイルを決定
DO_DOWNLOAD=0
if [ ${#} -ge 1 ]; then # 実行ファイル名の後ろの引数の数が1以上
# 引数にファイルが指定されたらこれを直接開く
EXEFILE="$(cd $(dirname "${1}") && pwd)/$(basename "${1}")" # 相対パス指定された場合に絶対パスへ
else
EXEFILE="$(zenity --file-selection --title "DirectX 9.0c 再頒布可能パッケージの場所" --filename "${HOME}/")"
if [ ${?} -ne 0 ]; then
# キャンセル
zenity --question --text "ファイルをダウンロードしますか?" && DO_DOWNLOAD=1 || exit
fi
fi
# 一時ディレクトリの作成
TEMPDIR="$(mktemp --tmp -d extract-gmdls.XXXXXXXX)"
if [ ${?} -ne 0 ]; then
zenity --error --text "一時ディレクトリの作成に失敗しました。"
exit 1
fi
cd "${TEMPDIR}"
# ダウンロードする場合
[ ${DO_DOWNLOAD} -eq 1 ] && download
# ファイルチェック
if [ ! -f "${EXEFILE}" ]; then
zenity --question --text "${EXEFILE}は存在しません\nダウンロードしますか?" && download
fi
if [ "$(md5sum ${EXEFILE} | cut -d ' ' -f 1)" != "${MD5}" ]; then
zenity --error --title "ファイルが違います" --text "このファイルは
DirectX 9.0c 再頒布可能パッケージではありません"
rm "${TEMPDIR}" -fr
exit 1
fi
# 展開とコピー
cabextract "${EXEFILE}" > /dev/null || die "配布ファイルの展開に失敗しました"
cabextract DirectX.cab > /dev/null || die "DirectX.cabの展開に失敗しました"
ls | egrep -v "*gm16*" | xargs rm
mv gm{16,}.dls
OUTFILE=$(zenity --file-selection --title "gm.dlsの保存" --save --confirm-overwrite --filename=${HOME}/gm.dls)
if [ ${?} -ne 0 ]; then
zenity --info --title "キャンセル" --text "保存がキャンセルされました。
<span size='larger' weight='bold'>${TEMPDIR}/gm.dls</span>を手動でコピー後、
一時ディレクトリ<span size='larger' weight='bold'>${TEMPDIR}</span>を削除してください。"
exit 1
fi
cp -a gm.dls "${OUTFILE}" || die "${OUTFILE}の保存に失敗しました"
if zenity --question --title "Wine環境へのコピー" --text "Wine環境にもコピーしますか?"; then
if ! cp -a gm.dls "${WINEPREFIX:-${HOME}/.wine}/dosdevices/c:/windows/system32/drivers/"; then
wineboot -u
cp -a gm.dls "${WINEPREFIX:-${HOME}/.wine}/dosdevices/c:/windows/system32/drivers/" || die "Wine環境へのコピーに失敗しました"
fi
fi
rm "${TEMPDIR}" -fr
zenity --info --title "完了" --text "処理が完了しました"
DLS形式はサウンドフォント(SF2形式)と用途が近く、相互に変換するツールもあるが、いずれもWindowsのシェアウェアで、登録をしないと(単一音色でない)DLS形式の書き出しはできないようだ。
公開されているDLS音源としてはFuryがあり、全体的に音質は良いものの、音色が抜けていて鳴らない音も一部ある。gm.dlsの代用として用いる場合は${WINEPREFIX}/dosdevices/c:/windows/system32/drivers/gm.dlsとして配置するかレジストリHKEY_LOCAL_MACHINE\Software\Microsoft\DirectMusic\GMFilePathを書き換える。
下はFuryのダウンロードと展開を自動化するスクリプト(unzipとunrarが必要)。
[任意]ファイル名: download-and-extract-furydls.sh ライセンス: GPL-3 or lator
#! /bin/sh
# DLS音源Furyをダウンロード/展開する
# (C) 2010 kakurasan
# version 20100716
# Licensed under GPLv3+
PATH=/bin:/usr/bin:/usr/local/bin
die()
{
zenity --error --text "${1}"
rm "${TEMPDIR}" -fr
exit 1
}
# ツールのチェック
if ! zenity --version > /dev/null; then
echo "zenityがインストールされていません"
exit 1
fi
if ! unzip >/dev/null 2>&1; then
zenity --error --text "unzipがインストールされていません"
exit 1
fi
unrar > /dev/null 2>&1
if [ ${?} -ne 7 ]; then
zenity --error --text "unrarがインストールされていません"
exit 1
fi
# 一時ディレクトリの作成
TEMPDIR="$(mktemp --tmp -d furydls.XXXXXXXX)"
if [ ${?} -ne 0 ]; then
zenity --error --text "一時ディレクトリの作成に失敗しました。"
exit 1
fi
cd "${TEMPDIR}"
# ダウンロード
for N in $(seq 9) A B C; do
URL=www.ixbt.com/multimedia/utils/fury0${N}.zip
wget -O fury0${N}.zip ${URL} || curl -o fury0${N}.zip ${URL} || die "ファイルのダウンロードに失敗しました"
unzip fury0${N}.zip || die "ZIPファイルの展開に失敗しました"
done
unrar x Fury.exe || die "Fury.exeの展開に失敗しました"
# コピー
OUTFILE=$(zenity --file-selection --title "Fury.dlsの保存" --save --confirm-overwrite --filename=${HOME}/Fury.dls)
if [ ${?} -ne 0 ]; then
zenity --info --title "キャンセル" --text "保存がキャンセルされました。
<span size='larger' weight='bold'>${TEMPDIR}/Fury.dls</span>を手動でコピー後、
一時ディレクトリ<span size='larger' weight='bold'>${TEMPDIR}</span>を削除してください。"
exit 1
fi
cp -a Fury.dls "${OUTFILE}" || die "${OUTFILE}の保存に失敗しました"
rm "${TEMPDIR}" -fr
zenity --info --title "完了" --text "処理が完了しました"
RPGツクールXP/VX作品のMIDIオーディオの再生にはMicrosoft SynthesizerとDLS音源を使用しており、更にdsdmo.dllというライブラリを用いてリバーブ効果をかけているようだ。
Wineバージョン1.3.24,winetricksのバージョン20110629時点では音源ファイル(gm.dls)とwinetricksの「directmusic」以外にwinetricksの「dsound」パッケージを入れ、February 2010版DirectXの配布ファイルをcab展開した中のdxnt.cabからdsdmo.dllを取り出してC:\WINDOWS\system32\に入れた上で下のdsdmo.regを適用すると、MIDIオーディオが演奏されるようになる
Wineバージョン1.3.25-1.3.29では上の作業(「dsound」のインストールとその先)を行うと初期化エラーを起こして作品が起動しない(1.3.30では正常に動作する)
バージョン1.2のリリース候補段階時点では音源ファイル(gm.dls)以外にwinetricksの「directx9」パッケージと「dsound」の追加のDLLオーバーライド設定で動作していた
上記方法を用いても、曲の切り替わりが不安定な場合がある
音源ファイルやDLLオーバーライドなどの作業を行う代わりに、.midファイルを同名のOgg Vorbisファイルに置き換えるという方法もある
例14 dsdmo.dllを用いるためのレジストリ例
[任意]ファイル名: dsdmo.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{87FC0268-9A55-4360-95AA-004A1D9DE26C}]
@="DirectSoundWavesReverbDMO"
[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{87FC0268-9A55-4360-95AA-004A1D9DE26C}\InProcServer32]
@="C:\\windows\\system32\\dsdmo.dll"
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{87FC0268-9A55-4360-95AA-004A1D9DE26C}\ProgID]
@="Microsoft.DirectSoundWavesReverbDMO.1"
[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{87FC0268-9A55-4360-95AA-004A1D9DE26C}\VersionIndependentProgID]
@="Microsoft.DirectSoundWavesReverbDMO"