Linuxのサウンドのテーマの構造、作り方

Linuxのサウンドのテーマの構造と作り方を紹介します。
Ubuntu、Ubuntu MATEをベースに説明しているので、他のディストリビューションでは違う可能性があります。

# Linuxのサウンドのテーマの構造
* (フォルダー名)
	* stereo
		* （サウンド名）.ogaか（サウンド名）.ogg、（サウンド名）.wav
	* index.theme

サウンドのテーマは（フォルダー名）フォルダーの中にstereoフォルダーとindex.themeがあり、
stereoフォルダーの中に（サウンド名）.ogaか（サウンド名）.ogg、（サウンド名）.wavファイルが入っています。

# index.theme
index.themeは次のような書式です。

```ini:index.theme
[Sound Theme]
Name=（サウンドのテーマ名）
Directories=stereo

[stereo]
OutputProfile=stereo
```

# サウンド一覧
こちらを参考にまとめました（英語ですが）。
[Sound Naming Specification](http://0pointer.de/public/sound-naming-spec.html)

グループ名とは、（グループ名）.ogaか（グループ名）.ogg、（グループ名）.wavを用意すると、（サウンド名）.ogaか（サウンド名）.ogg、（サウンド名）.wavの代わりに鳴ります（bell.ogaがbell-window-system.ogaの代わりに鳴るので）。
対応するWindowsの音と簡単な説明は、僕が思ったものです（間違っている可能性があります）。
全部使われるわけではありません。

## アラート

|サウンド名|グループ名|対応するWindowsの音|簡単な説明|
|:--|:--|:--|:--|
|network-connectivity-lost|-|-|ネットワークが切断された|
|network-connectivity-error|-|-|ネットワークの接続に失敗した|
|dialog-error|-|システム エラー|「－」（Windowsでは「×」）のダイアログが表示された|
|battery-low|-|バッテリ低下アラーム|バッテリーが低下した|
|suspend-error|-|プログラム エラー※1|サスペンドに失敗した|
|software-update-urgent|-|-|緊急のソフトウェアアップデートが利用可能|
|power-unplug-battery-low|-|-|バッテリーが低下しているときに電源ケーブルが抜かれた|

※1：名前が似ていたので、対応させました。

## 通知

|サウンド名|グループ名|対応するWindowsの音|簡単な説明|
|:--|:--|:--|:--|
|message-new-instant|message|インスタント メッセージの通知<br>新着テキスト メッセージの通知|インスタントメッセージが届いた|
|message-new-email|message|デスクトップ メールの通知<br>新着メールの通知|メールが届いた|
|complete-media-burn|complete|印刷完了※1|光ディスクの書き込みが完了した|
|complete-media-burn-test|complete|印刷完了※1|光ディスクのテスト書き込みが完了した|
|complete-media-rip|complete|印刷完了※1|光ディスクのリッピングが完了した|
|complete-media-format|complete|印刷完了※1|光ディスクの消去が完了した|
|complete-download|complete|印刷完了※1|ファイルのダウンロードが完了した|
|complete-copy|complete|印刷完了※1|ファイルのコピーが完了した|
|complete-scan|complete|印刷完了※1|スキャナーのスキャンが完了した|
|phone-incoming-call|-|着信呼の通知 1～10|電話を着信した|
|phone-outgoing-busy|-|-|相手が電話に出なかった|
|phone-hangup|-|-|電話を切った|
|phone-failure|-|-|電話でエラーが発生した|
|network-connectivity-established|-|-|ネットワークに接続した|
|system-bootup|-|-|コンピューターが起動した|
|system-ready|-|-|コンピューターが起動し、ログイン画面が表示された|
|system-shutdown|-|-|コンピューターがシャットダウンした|
|search-results|-|-|検索結果が表示された|
|search-results-empty|-|-|検索結果が表示されたが、見つからなかった|
|desktop-login|-|Windows の起動|システムにログインした|
|desktop-logout|-|Windows の終了|システムからログアウトした|
|desktop-screen-lock|-|-|システムをロックした|
|service-login|-|Windows ログオン※2|サービスにログインした|
|service-logout|-|Windows ログオフ※2|サービスからログアウトした|
|battery-caution|-|バッテリ切れアラーム|バッテリーが切れそうになった|
|battery-full|-|NFP 完了※3|バッテリーの充電が完了した|
|dialog-warning|-|メッセージ (警告)|「！」のメッセージが表示された|
|dialog-information|-|メッセージ (情報)|「ｉ」のメッセージが表示された|
|dialog-question|-|メッセージ (問い合わせ)|「？」のメッセージが表示された|
|software-update-available|-|-|ソフトウェアアップデートが利用可能|
|device-added|-|デバイスの接続|デバイスがつながれた|
|device-added-audio|-|-|オーディオデバイスがつながれた|
|device-added-media|-|-|ディスク/メディアがつながれた|
|device-removed|-|デバイスの切断|デバイスが取り外された|
|device-removed-media|-|-|ディスク/メディアが取り外された|
|device-removed-audio|-|-|オーディオデバイスが取り外された|
|window-new|-|プログラムの起動|新しいウィンドウが開いた|
|power-plug|-|NFP 接続※4|電源ケーブルが差し込まれた|
|power-unplug|-|-|電源ケーブルが抜かれた|
|suspend-start|-|-|サスペンドした|
|suspend-resume|-|-|サスペンドから復帰した|
|lid-open|-|-|ノートパソコンのふたを開いた|
|lid-close|-|-|ノートパソコンのふたを閉じた|
|alarm-clock-elapsed|-|アラーム 1～10|アラーム時計のアラームが鳴った|
|window-attention-active|-|-|アクティブウィンドウの注意を引いた|
|window-attention-inactive|-|-|非アクティブウィンドウの注意を引いた|

※1：完了音ということで、対応させました。
※2：システムの中のログイン、ログアウトということで、対応させました。
※3：バッテリ充電完了アラームとして使う場合。
※4：バッテリ充電開始音として使う場合。

## アクション

|サウンド名|グループ名|対応するWindowsの音|簡単な説明|
|:--|:--|:--|:--|
|phone-outgoing-calling|-|-|電話を発信した|
|message-sent-instant|-|-|インスタントメッセージを送った|
|message-sent-email|-|-|メールを送った|
|bell-terminal|bell|一般の警告音|端末のベル|
|bell-window-system|bell|一般の警告音|ウィンドウシステムのベル|
|trash-empty|-|ごみ箱を空にする|ゴミ箱を空にした|
|item-deleted|-|-|ファイルをゴミ箱に入れずに削除した|
|file-trash|-|-|ファイルをゴミ箱に入れた|
|camera-shutter|-|-|写真を撮った|
|camera-focus|-|-|カメラを焦点に合わせた|
|screen-capture|-|-|スクリーンショットを撮った|
|count-down|-|-|毎秒繰り返される写真撮影などのカウントダウン音|
|completion-sucess※1|-|-|テキストの補完に成功した|
|completion-fail|-|-|テキストの補完に失敗した|
|completion-partial|-|-|テキストの補完が部分的に成功した|
|completion-rotation|-|-|テキストの補完がリストの最後に到達し、最初から開始した|
|audio-volume-change|-|一般の警告音※2|音量を変更した|
|audio-channel-left|-|-|左スピーカーのテスト音|
|audio-channel-right|-|-|右スピーカーのテスト音|
|audio-channel-front-left|-|-|左フロントスピーカーのテスト音|
|audio-channel-front-right|-|-|右フロントスピーカーのテスト音|
|audio-channel-front-center|-|-|中フロントスピーカーのテスト音|
|audio-channel-rear-left|-|-|左リアスピーカーのテスト音|
|audio-channel-rear-right|-|-|右リアスピーカーのテスト音|
|audio-channel-rear-center|-|-|中リアスピーカーのテスト音|
|audio-channel-lfe|-|-|サブウーファースピーカーのテスト音|
|audio-channel-side-left|-|-|左サイドスピーカーのテスト音|
|audio-channel-side-right|-|-|右サイドスピーカーのテスト音|
|audio-test-signal|-|-|テスト音|
|theme-demo|-|Windows テーマの変更※3|テーマの代表音|

※1：completion-successの間違い？
※2：Windowsでは音量を変更するときに一般の警告音が鳴るということで、対応させました。
※3：テーマの代表音ということで、対応させました。

## 入力フィードバック

|サウンド名|グループ名|対応するWindowsの音|簡単な説明|
|:--|:--|:--|:--|
|window-close|-|プログラムの終了|ウィンドウを閉じた|
|window-slide-in|-|-|ウィンドウをスライドインした|
|window-slide-out|-|-|ウィンドウをスライドアウトした|
|window-minimized|-|最小化|ウィンドウを最小化した|
|window-unminimized|-|元に戻す (拡大)|ウィンドウを最小化から復帰した|
|window-maximized|-|最大化|ウィンドウを最大化した|
|window-unmaximized|-|元に戻す (縮小)|ウィンドウを最大化から復帰した|
|window-inactive-click|-|-|非アクティブウィンドウをクリックした|
|window-move-start|-|-|ウィンドウの移動が始まった|
|window-move-end|-|-|ウィンドウの移動が終わった|
|window-resize-start|-|-|ウィンドウのサイズ変更が始まった|
|window-resize-end|-|-|ウィンドウのサイズ変更が終わった|
|desktop-switch-left|-|-|左側のデスクトップに切り替えた|
|desktop-switch-right|-|-|右側のデスクトップに切り替えた|
|window-switch|-|-|ウィンドウを切り替えた|
|notebook-tab-changed|-|-|ノートのタブを変更した|
|scroll-up|-|-|上にスクロールした|
|scroll-down|-|-|下にスクロールした|
|scroll-left|-|-|左にスクロールした|
|scroll-right|-|-|右にスクロールした|
|scroll-up-end|-|-|上にスクロールし、スクロールバーの端に着いた|
|scroll-down-end|-|-|下にスクロールし、スクロールバーの端に着いた|
|scroll-left-end|-|-|左にスクロールし、スクロールバーの端に着いた|
|scroll-right-end|-|-|右にスクロールし、スクロールバーの端に着いた|
|dialog-ok|-|-|ダイアログのOKをクリックした|
|dialog-cancel|-|-|ダイアログのキャンセルをクリックした|
|drag-start|-|-|ファイル/アイテムのドラッグが始まった|
|drag-accept|-|-|ファイル/アイテムのドラッグが受け入れられた|
|drag-fail|-|-|ファイル/アイテムのドラッグが受け入れられなかった|
|link-pressed|-|-|リンクを押した|
|link-released|-|-|リンクを離した|
|button-pressed|-|-|ボタンを押した|
|button-released|-|-|ボタンを離した|
|menu-click|-|メニュー コマンド|メニューをクリックした|
|button-toggle-on|-|-|トグルボタン/チェックボックス/ラジオボタンをオンにした|
|button-toggle-off|-|-|トグルボタン/チェックボックス/ラジオボタンをオフにした|
|expander-toggle-on|-|-|エキスパンダーをオンにした|
|expander-toggle-off|-|-|エキスパンダーをオフにした|
|menu-popup|-|メニュー ポップアップ|ポップアップメニューを開いた|
|menu-popdown|-|-|ポップアップメニューを閉じた|
|menu-replace|-|-|メニューを別のメニューに置き換えた|
|tooltip-popup|-|-|ツールチップが表示された|
|tooltip-popdown|-|-|ツールチップが消えた|
|item-selected|-|選択|アイテムを選択した|

## ゲーム

|サウンド名|グループ名|対応するWindowsの音|簡単な説明|
|:--|:--|:--|:--|
|game-over-winner|-|-|ゲームに勝った|
|game-over-loser|-|-|ゲームに負けた|
|game-card-shuffle|-|-|カードゲームのカードがシャッフルされた|
|game-human-move|-|-|ユーザーが動いた|
|game-computer-move|-|-|コンピューターが動いた|

# 作り方の例
Windows XPの音のLinuxのサウンドのテーマを作るには、次のようにします。
フォルダー名：WinXP

```ini:index.theme
[Sound Theme]
Name=Windows XP
Directories=stereo

[stereo]
OutputProfile=stereo
```

|サウンド名|元ファイル名|
|:--|:--|
|dialog-error.wav|Windows XP Critical Stop.wav|
|battery-low.wav|Windows XP Battery Low.wav|
|message-new-instant.wav|（message-new-email.wavへのシンボリックリンク）※1|
|message-new-email.wav|Windows XP Notify.wav|
|phone-incoming-call.wav|Windows XP Ringin.wav|
|phone-outgoing-busy.wav|（phone-outgoing-calling.wavへのシンボリックリンク）※1|
|desktop-login.wav|Windows XP Startup.wav|
|desktop-logout.wav|Windows XP Shutdown.wav|
|service-login.wav|Windows XP Logon Sound.wav|
|service-logout.wav|Windows XP Logoff Sound.wav|
|battery-caution.wav|Windows XP Battery Critical.wav|
|battery-full.wav|tada.wav※2|
|dialog-warning.wav|Windows XP Exclamation.wav|
|dialog-information.wav|Windows XP Error.wav|
|device-added.wav|Windows XP Hardware Insert.wav|
|device-removed.wav|Windows XP Hardware Remove.wav|
|power-plug.wav|chimes.wav※3|
|phone-outgoing-calling.wav|Windows XP Ringout.wav|
|bell.wav|Windows XP Ding.wav|
|trash-empty.wav|Windows XP Recycle.wav|
|audio-volume-change.wav|（bell.wavへのシンボリックリンク）※1|
|theme-demo.wav|（service-login.wavへのシンボリックリンク）※1|

※1：次のコマンドで作れます。

```shell
ln -s message-new-email.wav message-new-instant.wav
ln -s phone-outgoing-calling.wav phone-outgoing-busy.wav
ln -s bell.wav audio-volume-change.wav
ln -s service-login.wav theme-demo.wav
```

※2：もしもWindows XPにバッテリ充電完了アラームがあれば、tada.wavが鳴ると思いました。
※3：もしもWindows XPにバッテリ充電開始音があれば、chimes.wavが鳴ると思いました。

さらに音にこだわる人は、

|サウンド名|元ファイル名|
|:--|:--|
|complete.wav|Windows XP Print Complete.wav|
|message-new-instant.wav|Windows Messengerのtype.wav|
|message-new-email.wav|Windows Messengerのnewemail.wav|
|dialog-question.wav|chord.wav※1|
|window-minimized.wav|Windows XP Minimize.wav|
|window-unminimized.wav|Windows XP Restore.wav|
|menu-click.wav|Windows XP Menu Command.wav|

※1：もしもメッセージ (問い合わせ)に音があれば、chord.wavが鳴ると思いました。

# サウンドのテーマの登録方法
`/usr/share/sounds`フォルダーに（フォルダー名）フォルダーを入れれば、登録できます。
そのためには、次のコマンドを入力します。
`sudo cp -r （（フォルダー名）のパス） /usr/share/sounds`

# サウンドのテーマの設定方法

## Ubuntu
Ubuntuサウンドのテーマを設定するには、次のコマンドを入力します。
`gsettings set org.gnome.desktop.sound theme-name "（フォルダー名）"`

## Ubuntu MATE
Ubuntu MATEでサウンドのテーマを設定する方法は、2つあります。

1. サウンドの設定を使う
	メニュー→コントロールセンター→サウンドを開き、サウンドのテーマ(T)から設定したいサウンドのテーマを選びます。

1. コマンドを使う
	次のコマンドを入力します。
	`gsettings set org.mate.sound theme-name "（フォルダー名）"`

# サウンドのテーマに設定した音を任意に鳴らす方法
シェルスクリプトに次の記述を書けば、任意のサウンドが鳴ります。

**Ubuntu**

```shell
sound_theme=`gsettings get org.gnome.desktop.sound theme-name | sed -e "s/'//g"`
sound="/usr/share/sounds/${sound_theme}/stereo/（サウンド名）."
if [ -e "${sound}oga" ]; then
	paplay "${sound}oga"
elif [ -e "${sound}ogg" ]; then
	paplay "${sound}ogg"
elif [ -e "${sound}wav" ]; then
	paplay "${sound}wav"
fi
```

**Ubuntu MATE**

```shell
sound_theme=`gsettings get org.mate.sound theme-name | sed -e "s/'//g"`
sound="/usr/share/sounds/${sound_theme}/stereo/（サウンド名）."
if [ -e "${sound}oga" ]; then
	paplay "${sound}oga"
elif [ -e "${sound}ogg" ]; then
	paplay "${sound}ogg"
elif [ -e "${sound}wav" ]; then
	paplay "${sound}wav"
fi
```

Linuxでサウンドファイルを再生するには、`paplay`コマンドを使います。
例：`paplay test.wav`→test.wavを再生する

Linuxのサウンドは`/usr/share/sounds/（フォルダー名）/stereo`に入っているので、gsettingsコマンドで現在のサウンドのテーマのフォルダー名を取得し、変数`sound_theme`に代入して、サウンドのパスを取得し、変数`sound`に代入して、paplayコマンドで再生すればOKです。
サウンドファイルは（サウンド名）.ogaか（サウンド名）.ogg、（サウンド名）.wavなので、（サウンド名）.ogaが見つかれば再生し、見つからなければ（サウンド名）.oggを再生し、oggも見つからなければ（サウンド名）.wavを再生します。

ただし、この方法ではサウンドがないときにデフォルトの音が鳴る事はありません。
グループ名があるサウンド名を指定したときは、グループ名の音が鳴りません。

もしくは、関数にしてまとめることもできます。

**Ubuntu**

```shell
PlaySound() {
	sound_theme=`gsettings get org.gnome.desktop.sound theme-name | sed -e "s/'//g"`
	sound="/usr/share/sounds/${sound_theme}/stereo/$1."
	if [ -e "${sound}oga" ]; then
		paplay "${sound}oga"
	elif [ -e "${sound}ogg" ]; then
		paplay "${sound}ogg"
	elif [ -e "${sound}wav" ]; then
		paplay "${sound}wav"
	fi
}
```

**Ubuntu MATE**

```shell
PlaySound() {
	sound_theme=`gsettings get org.mate.sound theme-name | sed -e "s/'//g"`
	sound="/usr/share/sounds/${sound_theme}/stereo/$1."
	if [ -e "${sound}oga" ]; then
		paplay "${sound}oga"
	elif [ -e "${sound}ogg" ]; then
		paplay "${sound}ogg"
	elif [ -e "${sound}wav" ]; then
		paplay "${sound}wav"
	fi
}
```

シェルスクリプトの中にPlaySound関数を定義して、鳴らしたいところで`PlaySound "（サウンド名）"`と記述すれば、任意のサウンドが鳴ります。

**(2021/10/21追記)**
もっと簡単な方法がありました。
`canberra-gtk-play`コマンドを使えば、簡単に鳴らすことができます。

```shell
canberra-gtk-play -i "（サウンド名）"
```

このコマンドを使うと、サウンドがないときにデフォルトの音が鳴ります。
サウンド名を指定したときにグループ名の音を鳴らすことができます。