# 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

最近のバージョンでは OSS サポートが失くなったため、skype パッケージには ALSA のサポートしか含まれていません。OSS 対応の Skype を入手するには、AUR から skype-oss パッケージをインストールしてください。

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

参照: Skype#Skype-OSS Sound (Pre-2.0).

### VLC media player

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

### Wine

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

    $ winecfg

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

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

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

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

## 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

     /etc/rc.d/oss restart 2>/tmp/oss.txt || echo "OSS restart failed, check /tmp/oss.txt for information"

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

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

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

When running `osstest`, the first test passes for the first channel, but not for the stereo or right channel, it sounds distorted/hisses. If this is what your sound is like, then it is set to the wrong output.

    *** 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%)>

The left sounded good, the right and stereo were the distorted ones.

Let the test continue until you get a working output:

    /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%)>

If this passed the test on all left, right and stereo, proceed to next step.

For the command to change the default output see this OSS wiki article. Change it to what works for you, for example:

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

For surround sound (4.0-7.1) choose `dsp_multich`, for only 2 channels, `dsp` is sufficient. See this for all available devices.

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

This information is taken from the 4front-tech forum.

It is surprising to learn that the external card does not work just because of a missing true return value in the function `write_control_value(...)` in `ossusb_audio.c`.

To fix this, a recompile of OSS is necessary, for now.

- Grab the latest OSS from the Arch Repo

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

- Extract it
- `cd` into the folder
- run `makepkg --nobuild`
- `cd` to `src/kernel/drv/oss_usb/` and edit `ossusb_audio.c`: add a `return 1;`.
  - should look like so:

    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;
    ...

- `cd` to `src/kernel/setup` and edit `srcconf_linux.inc`, search for `-Werror` and remove it, otherwise OSS will not compile.
- do `makepkg --noextract`

Now you must install the package with `pacman -U`. Remove OSS first if already installed.

### 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: If you do not want to use OSS anymore, do not forget to revert changes in `/etc/asound.conf`.

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

If something is not working, there is a possibility that some of your OSS settings are driver specific or just wrong for your driver.

To solve this:

- Find out which driver is used

    $ 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

- Locate configuration file for device in:

    # cd /usr/lib/oss/conf/

- Try changing defaults. There are only few settings, and they are self explanatory

For example, the setting:

    ich_jacksense = 1

in `oss_ich.conf` turns on `jack-sense` (which is responsible for recognizing plugged headphones and muting the speaker). Other settings for `jack-sense` can be found in `hdaudio.conf` where you have to change the `hdaudio_jacksense` variable.

- Restart the oss daemon for changes take effects.

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

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

#### 問題を識別する

If you have a HD Audio sound device, it is very likely that you will have to adjust some mixer settings before your sound works.

HD Audio devices are very powerful in the sense that they can contain a lot of small circuits (called widgets) that can be adjusted by software at any time. These controls are exposed to the mixer, and they can be used, for example, to turn the earphone jack into a sound input jack instead of a sound output jack.

However, there are also bad side effects, mainly because the HD Audio standard is more flexible than it perhaps should be, and because the vendors often only care to get their official drivers working.

When using HD Audio devices, you often find disorganized mixer controls, that do not work at all by default, and you are forced to try every mixer control combination possible, until it works.

#### 解決方法

Open `ossxmix` and try to change every mixer control in the middle area, that contains the sound card specific controls, as explained in the #Volume Control Mixer section.

You will probably want to setup a program to record/play continuously in the background (e.g. `ossrecord - | ossplay -` for recording or `osstest -lV` for playing), while changing mixer settings in `ossxmix` in the foreground.

- Raise every volume control slider.
- In each option box, try to change the selected option, trying all the possible combinations.
- If you get noise, try to lower and/or mute some volume controls, until you find the source of the noise.
- Editing `/usr/lib/oss/conf/oss_hdaudio.conf`, uncommenting and changing `hdaudio_noskip=0` to a value from 0-7 can give you more jack options in `ossxmix`.

Note: If you modify this file, restart the oss daemon for the changes to take effect.

### 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 (日本語)