Open Sound System (日本語) - ArchWiki

# Open Sound System (日本語)

Open Sound System (OSS) は Unix ライクな POSIX 互換のシステム向けのもうひとつのサウンドアーキテクチャです。OSS バージョン 3 は Linux のデフォルトのサウンドシステムでしたが、OSS バージョン 4 がプロプライエタリソフトウェアになったことで2002年に Advanced Linux Sound Architecture (ALSA) に取って代わられました。2007年には 4Front Technologies がソースコードを公開し GPL ライセンスでリリースしたことで OSSv4 はまたフリーソフトウェアになっています。

## ALSA との比較

Advanced Linux Sound Architecture を使用するのと比較したメリットとデメリット。

### OSS の利点 (ユーザー)

- アプリケーションごとにボリュームをコントロールできます。
- 古いカードによってはサポートが優れている場合があります。

### OSS の利点 (開発者)

- ユーザースペースでドライバーをサポートしています。
- クロスプラットフォーム (OSS は BSD や Solaris でも動作します)。
- クリーンで使いやすい API。

### OSS に対する ALSA の優位点

- USB オーディオデバイスのサポートが優れています。
- Bluetooth オーディオデバイスをサポートしています。
- Si3055 などのダイアルアップ式のソフトウェアモデム、AC'97 や HD Audio をサポートしています。
- MIDI デバイスのサポートが優れています。
- サスペンドをサポートしています。
- ジャック検出のサポートが優れています。
- 現代的なハードドライブをより良くサポートしています。

Note:

- OSS は USB オーディオデバイスへの出力を実験的にサポートしていますが、入力は使えません。
- Timidity や FluidSynth などのソフトウェアシンセサイザーの助けを借りて OSS は MIDI デバイスをサポートします。

## インストール

AUR から利用できる oss をインストールしてください。他にも AUR には OSS の実験バージョンである oss-git パッケージもあります。

OSS をインストールすると、OSS インストールスクリプトが走り (一時期に ALSA モジュールが無効になります) OSS カーネルモジュールがインストールされます。ブートスクリプトではデフォルトで ALSA が有効になっているので、OSS と衝突しないように無効にする必要があります。モジュールをブラックリストに入れることが無効にすることが可能です:

    /etc/modprobe.d/alsa_blacklist.conf

    install soundcore /bin/false

モジュールをブラックリストに入れた後、oss デーモンを有効にすればブート時に起動するように出来ます。

ユーザーが audio グループに入ってない場合は、グループに追加して変更を適用するために再ログインしてください:

    # gpasswd -a $USER audio

OSS があなたのカードを起動時に検出しない場合は、以下を実行してください:

    # ossdetect -v
    # soundoff && soundon

## テストする

Warning: デフォルトのボリュームは大音量になっているので、イヤフォンを使うのは避けたり、テストを実行する前に（可能であれば）物理的にスピーカーのボリュームを下げて下さい。

次を実行して OSS をテストしてください:

    $ osstest

このテストでは音楽が聞こえるはずです。音がしない場合、ボリュームを調節したり #トラブルシューティング セクションを参照してください。

複数のアプリケーションから同時に音声が聞こえるようにするには、OSS のソフトウェアミキサーである `vmix` が必要です。

次を実行して vmix が有効になっているか確認してください:

    $ ossmix -a | grep -i vmix

`vmix0-enable ON|OFF (currently ON)` のような行が表示されるはずです。もし `vmix` で始まる行が全く表示されない場合は、おそらくサウンドデバイスに `vmix` が結び付けられていません。`vmix` を使うには、次のコマンドを実行してください:

    $ vmixctl attach device

device はあなたのサウンドデバイスに置き換えてください (例: `/dev/oss/oss_envy240/pcm0`)。

これからもこのコマンドを手動で実行する必要をなくすために、ここ で提案されているように、`/usr/lib/oss/soundon.user` にコマンドを追加することができます。

"Device or resource busy" エラーが起こる場合、`vmix_no_autoattach=1` を `/usr/lib/oss/conf/osscore.conf` に追加して再起動してください。

次のコマンドを使って検出されているデバイスを確認してください:

    $ ossinfo

Device Objects や Audio Devices の下にあなたの使っているデバイスが表示されるはずです。使用したいデバイスがセクションの一番上にない場合、`/usr/lib/oss/etc/installed_drivers` を編集してデバイスのドライバーを一番上に記述してください。おそらく次を実行する必要があります:

    $ soundoff && soundon

これで動作しない場合、あなたの使っているデバイスを除く全てのドライバーをコメントアウトしてください。

## ボリュームコントロールミキサー

様々なデバイスのボリュームをコントロールするには、ミキサーのレベルを設定する必要があります。2つのミキサーが存在します:

- ossmix: コマンドラインのミキサー、BSD のオーディオミキサー `mixerctl` に似ています。
- ossxmix: GTK+ ベースのグラフィカルミキサー。

基本的な `ossxmix` のコントロールは以下のようになります:

     / High Definition Audio ALC262 \    --------------------------------> 1
    /________________________________\________________________________
    |                                                                 \
    | [x] vmix0-enable [vmix0-rate: 48.000kHz]      vmix0-channels    |--> 2
    |                                               [ Stereo [v] ]    |
    |                                                                 |
    |  __codec1______________________________________________________ |
    | |  _jack______________________________________________________ ||--> 3
    | | |  _int-speaker_________________   _green_________________  |||
    | | | |                             | |                       | |||
    | | | |  _mode_____ | |             | |  _mode_____   | |     | |||
    | | | | [ mix [v] ] o o [x] [ ]mute | | [ mix  [v] ]  o o [x] | |||
    | | | |             | |             | |               | |     | |||
    | | | |_____________________________| |_______________________| |||
    | | |___________________________________________________________|||
    | |______________________________________________________________||
    | ___vmix0______________________________________________________  |
    | |  __mocp___  O O   _firefox_  O O  __pcm7___  O O            | |--> 4
    | | |         | O O  |         | x x |         | O O            | |
    | | | | |     | x O  | | |     | x x | | |     | O O            | |
    | | | o o [x] | x x  | o o [x] | x x | o o [x] | O O            | |
    | | | | |     | x x  | | |     | x x | | |     | O O            | |
    | | |_________| x x  |_________| x x |_________| O O            | |
    | |_____________________________________________________________| |
    |_________________________________________________________________|

1. サウンドカードごとに一つのタブ
2. 上のところに `vmix` (virtual mixer) の特別設定。サンプリングレートやミキサーの優先度など。
3. サウンドカードのジャック設定 (入力と出力)。全てのミキサーコントロールはここに表示されます。
4. アプリケーションの `vmix` ミキサーコントロールとサウンドメーター。アプリケーションがサウンドを再生していないときは `pcm08, pcm09...` のように表示され、アプリケーションが再生しているときはアプリケーションの名前が表示されます。

### 色の定義

high definition (HD) audio の場合、`ossxmix` は既定のジャックの色を使ってジャックの設定を色付けします:

色 | タイプ | 接続子
--- | --- | ---
green | フロントチャンネル (ステレオ出力) | 3.5mm TRS
black | リアチャンネル (ステレオ出力) | 3.5mm TRS
grey | サイドチャンネル (ステレオ出力) | 3.5mm TRS
gold | センターとサブウーファー (デュアル出力) | 3.5mm TRS
blue | ラインレベル (ステレオ入力) | 3.5mm TRS
pink | マイクロフォン (モノ入力) | 3.5mm TS

### ミキサーのレベルを保存する

ミキサーのレベルはコンピュータのシャットダウン時に保存されます。いますぐミキサーのレベルを保存したい場合、root で次を実行してください:

    # savemixer

`-f` スイッチを使うことで `savemixer` によってミキサーレベルをファイルに保存することができ、`-L` スイッチで読み込むことができます。

### 他のミキサー

OSS をサポートしている他のミキサー:

- Gnome Volume Control — GNOME 向け。

  http://library.gnome.org/users/gnome-volume-control/stable/ || gnome

- Kmix — KDE 向け。

  http://www.kde.org/applications/multimedia/kmix/ || kdemultimedia-kmix

- VolWheel — インストール後、必要に応じて自動起動するよう設定してください。また、OSS サポートを有効にするために、システムトレイのアイコンを右クリックし、Preferences を選択して以下のように変更してください:

  - Driver: `OSS`。
  - Default Channel: `vmix0-outvol` (使用するチャンネルは `ossmix` でわかります)。
  - Default Mixer: `ossxmix`。
  - MiniMixer タブでは、`vmix0-outvol` などを任意で追加してください。

  http://oliwer.net/b/volwheel.html || volwheel

## OSS を使うようにアプリケーションを設定する

### GStreamer を使用するアプリケーション

オーディオに Gstreamer を利用しているアプリケーションで問題が発生する場合、pulseaudio を削除して、`oss4sink` と `oss4src` が必要としている gstreamer0.10-good-plugins パッケージをインストールしてみてください。

それから `gstreamer-properties` (gstreamer-properties パッケージに含まれています) を使って GStreamer 設定のサウンド出力をデフォルトの ALSA から OSS に変更してください。`gstreamer-properties` を起動して、以下のフィールドを修正する必要があります:

- Default Output セクション: OSS がプラグインとして選択できない場合、Plugin を `Custom` に、Pipeline を `oss4sink` に変更してください。
- Default Input セクション: OSS が選択できない場合、Plugin を `Custom` に、Pipeline を `oss4src` に変更してください。

Note: `oss4src` の代わりに `osssrc` を使うこともできます。そのほうが良い音が出るかもしれません。

アプリケーションによっては、(`gstreamer-properties` によって変更が加えられる) `audiosink` ではなく `musicaudiosink` を使っているために、`gstreamer-properties` による設定を読み込みません。

この問題の回避方法として、`gstreamer-properties` で `audiosink` の値を設定してから `gconf-editor` を使って `/system/gstreamer/0.10/default/audiosink` の値を `musicaudiosink` (同じ場所にあります) にコピーできます。

Phonon で GStreamer バックエンドを使っている場合は環境変数を設定する必要があります:

    export PHONON_GST_AUDIOSINK=oss4sink

上の行を `~/.bashrc` に追記することでログイン時にロードされるようになります。

### OpenAL を使用するアプリケーション

OpenAL はデフォルトでは ALSA を使います。これを変更するために、`/etc/openal/alsound.conf` で OSS の利用を定義してください:

    /etc/openal/alsound.conf

    drivers=oss

### Audacity

Audacity を起動しても、デバイスが開けないとエラーが出たり何も再生できない場合、`vmix` によって Audacity がサウンドデバイスへの独占的なアクセスをすることが出来なくなっている可能性があります。これを修正するには、Audacity を起動する前に、次を実行してください:

    $ ossmix vmix0-enable OFF

Audacity を終了した後は次のコマンドで `vmix` を戻せます:

    $ ossmix vmix0-enable ON

### Gajim

デフォルトでは Gajim は `aplay -q` を使ってサウンドを再生します。OSS を使うために Edit > Preferences > Advanced から `ossplay -qq` に変更することができます。Advanced Configuration Editor を開いて `soundplayer` 変数を変更してください。

### MOC

OSS v4.1 で MOC を使うには (`~/.moc` にある) 設定ファイルの `OSSMixerDevice` を `/dev/ossmix` に変更する必要があります。インターフェイスの問題については `mocp` で `w` を押して `OSSMixerChannel` を (ソフトウェアミキサー) に変更してみてください。

### MPD

MPD の設定は `/etc/mpd.conf` もしくは `~/.mpdconf` で行います。これらのファイルを両方ともチェックして、以下のようなところを探して下さい:

    /etc/mpd.conf

    ...
    audio_output {
        type    "alsa"
        name    "Some Device Name"
    }
    ...

上記のように ALSA の設定がアンコメントされている (行頭が # になってない) 場合、全てコメントアウトするか削除して、以下を追記してください:

    /etc/mpd.conf

    ...
    audio_output {
        type    "oss"
        name    "My OSS Device"
    }
    ...

ほとんどのユーザーはこれ以上の設定は必要ありません。ただし、(MPD を再起動した後に正しく動作しないなどの) 問題が発生する場合や、(自動設定ではなく、ユーザーが設定した) 特定の設定ファイルを使いたい場合は、以下の手順で OSS のオーディオ出力を細かく設定できます

- まず、次を実行してください:

    $ ossinfo | grep /dev/dsp

- `/dev/dsp -> /dev/oss/<SOME_CARD_IDENTIFIER>/pcm0` のような文字列が書かれた行を探して下さい。`<SOME_CARD_IDENTIFIER>` がどうなっているかメモを取って、MPD 設定ファイルの OSS `audio_output` に以下の行を追加してください:

    /etc/mpd.conf

    ...
    audio_output {
        type            "oss"
        name            "My OSS Device"
        device          "/dev/oss/<SOME_CARD_IDENTIFIER>/pcm0"
        mixer_device    "/dev/oss/<SOME_CARD_IDENTIFIER>/mix0"
    }
    ...

参照: Music Player Daemon (日本語)#グローバル設定。

### MPlayer

GUI (SMplayer, GNOME MPlayer など) を使っている場合、設定ダイアログからデフォルト出力として OSS を選択できます。コマンドラインから MPlayer を使っている場合、音声出力を指定してください:

    $ mplayer -ao oss /some/file/to/play.mkv

何度も入力するのが面倒ならば設定ファイル (`~/.mplayer/config`) に `ao=oss` を追加してください。

参照: MPlayer (日本語)#設定。

### Skype

最近のバージョン (バージョン 4.3 移行) では OSS サポートが失くなったため、skype パッケージには ALSA のサポートしか含まれていません。コミュニティの努力によって、(PulseAudio を使わずに) OSS で Skype を使えるようにする方法があります:

AUR から skype_oss_wrapper-git をインストールします。これによって偽の libpulse.so ライブラリを利用して Skype のために PulseAudio の挙動を偽装します。インストールした後は次のコマンドを使って Skype を起動する必要があります: `skype_oss`。もしくはパッケージによって作成されるアプリケーションショートカットを起動してください: "Skype (OSSv4)"。ラッパーとしては十分に機能しますが、48KHz の入力と出力でしか動作しません。何かおかしな挙動が発生したり欠けている機能を見つけたら、バグレポートとパッチを送ると良いでしょう。

もしくは module-oss と pulseaudio を使うことも可能です:

`/etc/pulse/default.pa` を編集して `load-module module-udev-detect` で始まる行をコメントアウトし、`load-module module-oss device="/dev/dsp" sink_name=output source_name=input mmap==0` を追記してください。

### VLC media player

オーディオ設定から OSS をデフォルト出力に選択することが出来ます。

### Wine

Wine で OSS を設定するには、次を実行して:

    $ winecfg

`Audio` タブから `OSS Driver` を選択してください。

参照: Wine (日本語)#サウンド。

### 他のアプリケーション

- ここに記載されていないアプリケーションで音が鳴らない場合は、Configuring Applications for OSSv4 のページを見て下さい。
- `pacman -Ss -- -oss` や AUR で OSS 対応のパッケージを検索できます。

参照: ossapps。

## Tips and tricks

### OSS でマルチメディアキーを使う

AUR にある ossvol スクリプトを使うことでミュート・アンミュートやボリュームの上げ下げを簡単にできます。スクリプトに関する詳細は OSS wiki の この記事 を見て下さい。

インストールしたら、ミュートを切り替えるには次を入力します:

    $ ossvol -t

また、利用できるコマンドを表示するには:

    $ ossvol -h

Note: `ossvol` が `Bad mixer control name(987) 'vol'` のようなエラーを表示する場合、`/usr/bin/ossvol` スクリプトを編集して `CHANNEL` 変数をあなたのデフォルトチャンネルに変更する必要があります (通常は `vmix0-outvol`)。

マルチメディアキーで `ossvol` を使いたい場合、Extra keyboard keys を見てキーを正しく設定してください。キーを設定したら、Xbindkeys などを使ってキーと `ossvol` スクリプトを結びつけることができます。以下を `~/.xbindkeysrc` ファイルに追加してください:

    ~/.xbindkeysrc

    # Toggle mute
    "ossvol -t"
        m:0x0 + c:121
        XF86AudioMute

    # Lower volume
    "ossvol -d 2"
        m:0x0 + c:122
        XF86AudioLowerVolume

    # Raise volume
    "ossvol -i 2"
        m:0x0 + c:123
        XF86AudioRaiseVolume

使いたいショートカットに自由に変更することができます。

### サンプルレートを変更する

まず、サンプルレート出力の変更は明瞭なものではありません。サンプルレートは root でしか変更ができず、変更する時はプログラムによって `vmix` が使われていない状態である必要があります。先に進む前に、受信機やアンプを通していて、コンピュータのスピーカーではなく高級スピーカーを使っているか確認してください。コンピュータのスピーカーしか使っていない場合、違いがほとんど生まれないので、サンプルレートの変更をする必要はありません。

デフォルトのサンプルレートは 48000hz です。これを変更する必要がある場合は複数考えられます。全てはあなたの使用状況によります。一番良く使うメディアに合わせてサンプルレートを設定すると良いでしょう。ハードウェアに合わせてメディアのサンプリングレートを変更する必要がある場合、保証はできませんが基本的に音質が落ちます。ダウンサンプリングでこれは顕著です (96000hz → 48000hz)。この問題についてよく知りたいのならば、Stereophile に記事があり、Apple の CoreAudio API メーリングリストで 議論 がされています。

サンプルレートの例:

44100hz
  標準のレッドブック音楽 CD のサンプルレート。
88000hz
  SACD 高音質音声ディスク・ダウンロード音声のサンプルレート。マザーボードがこのサンプルレートをサポートしているのは稀です。
96000hz
  ほとんどの高音質ダウンロード音声のサンプルレート。あなたの使っているマザーボードが AC'97 マザーボードの場合、おそらくこれが一番高いビットレートになります。
192000hz
  BluRay や少数の高音質ダウンロード音声のサンプルレート。外付けの音声受信機のサポートはハイエンドオーディオに限られます。マザーボードによってはこのサンプルレートをサポートしていません。サポートしているマザーボードチップセットには HD Audio が含まれます。

現在設定されているサンプルレートを確認するには、次を実行してください:

    ossmix | grep rate

普通は `vmix0-rate <decimal value> (currently 48000) (Read-only)` と表示されます。

`vmix0-rate` (または `vmix1-rate` など) が出力されない場合、おそらく `vmix` が無効になっています。この場合、OSS はデバイスを使用するプログラムによって要求されたレートを使用します。そのためこのセクションは適用されません。例外として Envy24 (と Envy24HT) カードは特別な設定 `envy24.rate` を使って似た機能を実現します (`oss_envy24` の man ページを見て下さい)。

サンプルレートを変更するには:

1. 最初に、あなたの使っているカードが新しいレートを使えるか確認してください。`ossinfo -v2` を実行して使用したいレートが Native sample rates 出力の中にあるか見て下さい。
2. root で、`/usr/lib/oss/scripts/killprocs.sh` を実行してください。サウンドチャンネルを開いているプログラムが終了されるので注意してください。
3. `vmix` を使用するプログラムが全て終了したら、root で次を実行してください: `vmixctl rate /dev/dsp 96000`。rate はあなたの使用したいレートに置き換えてください (必要ならば `ossmix envy24.rate 96000` も)。
4. `ossmix | grep rate` を実行して変更が問題なく行われたか `vmix0-rate <decimal value> (currently 96000) (Read-only)` をチェックしてください。
5. 変更を永続的にするには以下を `soundon.user` ファイルに追加してください:

    /usr/lib/oss/soundon.user

    #!/bin/sh

    vmixctl rate /dev/dsp 96000
    # ossmix envy24.rate 96000 # uncomment if you have an Envy24(HT) card

    exit 0

そして実行可能属性をつけてください:

    # chmod +x /usr/lib/oss/soundon.user

### シンプルなシステムトレイアプレット

軽量な OSS システムトレイアプレットが必要な場合は これ を見て下さい。

インストールするには:

- スクリプト を好きな名前でダウンロードしてください (例: `ossvolctl`)
- 実行可能にしてください:

    $ chmod +x ossvolctl

- `/usr/bin` にコピーしてください:

    # cp ossvolctl /usr/bin/ossvolctl

または:

    # install -Dm755 ossvolctl /usr/bin/ossvolctl

### 起動時にシステムトレイの中に ossxmix を実行する

#### KDE

ローカルアプリケーションランチャーディレクトリ (`~/.local/share/applications/`) の中に `ossxmix.desktop` という名前のアプリケーションランチャーファイルを作成してください:

    ~/.local/share/applications/ossxmix.desktop

    [Desktop Entry]
    Name=Open Sound System Mixer
    GenericName=Audio Mixer
    Exec=ossxmix -b
    Icon=audio-card
    Categories=Application;GTK;AudioVideo;Player;
    Terminal=false
    Type=Application
    Encoding=UTF-8

自動実行するには、System Settings > System Administration > Startup and Shutdown > Autostart のリストに加えて下さい。

#### Gnome

root でファイル `/usr/local/bin/ossxmix_bg` を作成してください:

    /usr/local/bin/ossxmix_bg

    #!/bin/sh

    exec /usr/bin/ossxmix -b

それから System > Preferences > Start Up Applications を開き:

- Add をクリックして、Name フィールドに `OSSMIX`、Command フィールドに `/usr/local/bin/ossxmix_bg` と入力して Add Button をクリックしてください。
- 再ログインすれば変更が適用されます。

### プログラムからの音声出力を録音する

- Recording sound output of a program.

### サスペンドとハイバネーション

OSS はサスペンドに自動的な対応をしないため、サスペンドやハイバネートをする前に手動で停止して、その後再起動する必要があります。

OSS には OSS を有効化・無効化する `soundon` と `soundoff` がありますが、これらはサウンドを使うプロセスが全て終了してからでしか OSS を停止することができません。

以下の簡単なスクリプトでサスペンドをする前に OSS を自動的にアンロードしてその後リロードすることができます。

    /usr/lib/systemd/system-sleep/50osssound.sh

    #!/bin/sh
    suspend_osssound()
    {
        /usr/lib/oss/scripts/killprocs.sh
        /usr/bin/soundoff
    }

    resume_osssound()
    {
        /usr/bin/soundon
    }

    case $1 in
        pre)
            suspend_osssound
     	;;
        post)
     	resume_osssound
     	;;
        *) exit $NA
     	;;
    esac

スクリプトの中身を (root で) `/usr/lib/systemd/system-sleep/50osssound.sh` に保存して実行可能属性を付けて下さい:

    # chmod a+x /usr/lib/systemd/system-sleep/50osssound.sh

Warning: このスクリプトはあくまで簡素なものであり OSS に直接アクセスしているアプリケーションを全て終了します。サスペンド・ハイバネートする前に作業を保存するようにしてください。

他にもサスペンドに s2ram を使う方法もあります。サスペンドスクリプトを `/usr/bin/suspend` に作成して実行可能属性を付けて下さい。

     #!/bin/sh

     ## Checking if you are a root or not
     if ! [ -w / ]; then
       echo >&2 "This script must be run as root"
       exit 1
     fi

     s2ram -f

     sleep 2

     systemctl restart oss.service 2>/tmp/oss.txt || echo "OSS restart failed, check /tmp/oss.txt for information"

このスクリプトなら、全てのアプリがちゃんと動くはずです。

Note: Opera を使っている場合はサスペンドの前に `operapluginwrapper` を終了する必要があります。`s2ram -f` の前に `pid=$(pidof operapluginwrapper) && kill $pid` を追加してください。

### デフォルトの音声出力を変更する

`osstest` を実行した時に、一番目のチャンネルの最初のテストは通るのに、ステレオや右チャンネルで、音声が歪んだりシュッと音が鳴る場合、間違った出力に設定がされています。

    *** Scanning sound adapter #-1 ***
    /dev/oss/oss_hdaudio0/pcm0 (audio engine 0): HD Audio play front
    - Performing audio playback test...
    <left> OK <right> OK <stereo> OK <measured srate 47991.00 Hz (-0.02%)>

左の音声が良くて、右やステレオが歪んだ音になっています。

正しい出力が得られるまでテストを続けて下さい:

    /dev/oss/oss_hdaudio0/spdout0 (audio engine 5): HD Audio play spdif-out
    - Performing audio playback test...
    <left> OK <right> OK <stereo> OK <measured srate 47991.00 Hz (-0.02%)>

左・右・ステレオ全てでテストが通ったら、次のステップに進んで下さい。

デフォルトの出力を変更するコマンドは この OSS wiki の記事 を見て下さい。動作するやつに変更してください、例えば:

    # ln -sf /dev/oss/oss_hdaudio0/spdout0 /dev/dsp_multich

サラウンド音声 (4.0-7.1) の場合 `dsp_multich` を選んで下さい。2チャンネルしかない場合は `dsp` で問題ありません。利用可能な全てのデバイスについては こちら を見て下さい。

### Creative Sound Blaster X-Fi Surround 5.1 SB1090 USB

これは 4front-tech フォーラム からの情報です。

`ossusb_audio.c` の `write_control_value(...)` 関数で true が返されないために外付けカードが動作しないというのは驚きです。

これを修正するには、今のところ OSS のリコンパイルが必要になります。

- Arch のリポジトリから最新の OSS を取得:

    https://projects.archlinux.org/svntogit/community.git/tree/trunk?h=packages/oss

- 展開する
- 展開したフォルダに `cd`
- `makepkg --nobuild` を実行
- `src/kernel/drv/oss_usb/` に `cd` して `ossusb_audio.c` を編集: `return 1;` を追加
  - 以下のようにします:

    ossusb_audio.c

    static int
    write_control_value (ossusb_devc * devc, udi_endpoint_handle_t * endpoint,
                         int ctl, int l, unsigned int v)
    {
         return 1;
    ...

- `src/kernel/setup` に `cd` して `srcconf_linux.inc` を編集、`-Werror` を探して削除する。そうしないと OSS がコンパイルされません。
- `makepkg --noextract` を実行

そして `pacman -U` でパッケージをインストールします。OSS を既にインストールしている場合は削除しておいてください。

### ALSA のエミュレーション

`alsa-lib` に音声出力システムとして OSS を使うように指示することが可能です。これは一種の ALSA エミュレーションとして働きます。

ただし、この方法は音声出力に遅延を増やすことになり、またエミュレーションは完全でないので全てのアプリケーションで動作するというわけではありません。例えば、ALSA を使ってデバイスを検出するようなプログラムではエミュレーションは動きません。

多くのアプリケーションは OSS を直接サポートしているので、この方法は最終手段としてのみ使って下さい。

将来的には、`libsalsa` や `cuckoo` など ALSA を完全にエミュレートする方法が使えるようになるかもしれません。

#### 手順

- 公式リポジトリにある alsa-plugins パッケージをインストールしてください。

- `/etc/asound.conf` を以下のように編集してください。

    pcm.oss {
       type oss
        device /dev/dsp
    }

    pcm.!default {
        type oss
        device /dev/dsp
    }

    ctl.oss {
        type oss
        device /dev/mixer
    }

    ctl.!default {
        type oss
        device /dev/mixer
    }

Note: OSS をもう使わない場合、`/etc/asound.conf` の変更を戻すのを忘れないで下さい。

### 特定のドライバーにあわせた設定

何かが動作しない場合、OSS 設定の中にドライバー固有のものがあったり、あなたのドライバーにあってなかったりする可能性があります。

これを解決するには:

- どのドライバーが使われているのか確認します

    $ lspci -vnn | grep -i -A 15 audio

    00:1e.2 Multimedia audio controller [0401]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller [8086:266e] (rev 03)
    Subsystem: Hewlett-Packard Company NX6110/NC6120 [103c:099c]
    Flags: bus master, medium devsel, latency 0, IRQ 21
    I/O ports at 2100 [size=256]
    I/O ports at 2200 [size=64]
    Memory at d0581000 (32-bit, non-prefetchable) [size=512]
    Memory at d0582000 (32-bit, non-prefetchable) [size=256]
    Capabilities: <access denied>
    Kernel driver in use: *oss_ich*
    Kernel modules: snd-intel8x0

- デバイスの設定ファイルを探して下さい:

    # cd /usr/lib/oss/conf/

- デフォルトの設定を変更してみて下さい。設定は少なく、見ればすぐわかります。

例えば、`oss_ich.conf` に次の設定をすることで `jack-sense` がオンになります (ヘッドフォンの接続の認識やスピーカーのミュートに関係しています):

    ich_jacksense = 1

`jack-sense` の他の設定は `hdaudio.conf` にあり `hdaudio_jacksense` 変数を変える必要があります。

- 変更を適用するために oss デーモンを再起動します。

## トラブルシューティング

### HD Audio デバイスのトラブルシューティング

#### 問題の所在

HD Audio サウンドデバイスを使う場合、大抵はサウンドを使えるようにする前にミキサーの設定を調整する必要があります。

HD Audio デバイスはソフトウェアでいつでも調整できる小さな回路 (ウィジェットと呼ばれます) がいくつも入れられるという点でとても強力です。これらのコントロールはミキサーに表示され、これを使うことで、例えば、イヤフォンジャックをサウンドの出力端子ではなくサウンドの入力端子にすることができます。

ただし、弊害も存在します。主として HD Audio の仕様の柔軟性があまりにありすぎるというのと、メーカーが基本的に公式ドライバーが動くのにだけしか注意を払っていないのが原因です。

HD Audio デバイスを使用する際には、乱雑なミキサーコントロールに手を焼き、デフォルトでは全く動作しないため、動作するようになるまで、あらゆるミキサーコントロールの組み合わせを試す羽目になります。

#### 解決方法

`ossxmix` を開いて中部分のミキサーコントロールを全て変更してみてください、ボリュームコントロールミキサーセクションで説明されているように、サウンドカード固有のコントロールが含まれています。

`ossxmix` でミキサー設定を変更する間は、後ろでずっと録音・再生するプログラムを起動しておくと良いでしょう (例: 録音には `ossrecord - | ossplay -` で再生には `osstest -lV`)。

- 全てのボリュームコントロールのスライダーを上げる。
- それぞれのオプションボックスで、選択するオプションを変更して、全ての組み合わせを試して下さい。
- ノイズが聞こえる場合、ノイズの元がわかるまで、ボリュームコントロールを低くしたりミュートにしてみてください。
- `/usr/lib/oss/conf/oss_hdaudio.conf` を編集して、`hdaudio_noskip=0` をアンコメントして 0-7 の値に変更することで `ossxmix` にさらに jack のオプションが表示されます。

Note: ファイルに変更を加えた時は、変更が適用させるように oss デーモンを再起動してください。

### Totem で MMS の音にノイズが乗る

Totem で再生中に音が割れたり異常なノイズが聞こえる場合は、FFmpeg など他のバックエンドを使ってみて下さい。MMS ストリームを再生すると GStreamer がポップアップする問題は修正できませんが、良い音質で聞こえるようになります。MPlayer で再生するのは簡単です:

    # mplayer mmsh://yourstreamurl

### マイクロフォンが出力チャンネルで再生される

デフォルトで、OSS はマイクロフォンからの入力をスピーカーで再生するようになっています。これを無効にするには `ossxmix` の Misc セクションから `input-mix-mute` のボックスのチェックを全て外して下さい。

## 参照

- 公式ウェブサイト
- OSS Wiki
- OSS フォーラム
- 開発者情報
- Git リポジトリ
- opensound-devel メーリングリスト

Categories:

- Sound (日本語)
- Audio/Video (日本語)