Open Sound System

提供: ArchWiki
2018年8月30日 (木) 00:47時点におけるKusakata.bot (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

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'97HD Audio をサポートしています。
  • MIDI デバイスのサポートが優れています。
  • サスペンドをサポートしています。
  • ジャック検出のサポートが優れています。
  • 現代的なハードドライブをより良くサポートしています。
ノート:
  • OSS は USB オーディオデバイスへの出力を実験的にサポートしていますが、入力は使えません。
  • TimidityFluidSynth などのソフトウェアシンセサイザーの助けを借りて OSS は MIDI デバイスをサポートします。

インストール

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

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

テストする

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

次を実行して 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 ObjectsAudio 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 ControlGNOME 向け。
http://library.gnome.org/users/gnome-volume-control/stable/ || gnome
  • KmixKDE 向け。
https://www.kde.org/applications/multimedia/kmix/ || kdemultimedia-kmix[リンク切れ: 置換パッケージ: 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 を削除して、oss4sinkoss4src が必要としている gstreamer0.10-good-pluginsAUR パッケージをインストールしてみてください。

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

  • Default Output セクション: OSS がプラグインとして選択できない場合、PluginCustom に、Pipelineoss4sink に変更してください。
  • Default Input セクション: OSS が選択できない場合、PluginCustom に、Pipelineoss4src に変更してください。
ノート: oss4src の代わりに osssrc を使うこともできます。そのほうが良い音が出るかもしれません。

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

この問題の回避方法として、gstreamer-propertiesaudiosink の値を設定してから 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

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

MOC

OSS v4.1 で MOC を使うには (~/.moc にある) 設定ファイルの OSSMixerDevice/dev/ossmix に変更する必要があります。インターフェイスの問題については mocpw を押して 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-gitAUR[リンク切れ: アーカイブ: aur-mirror] をインストールします。これによって偽の 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 -- -ossAUR で OSS 対応のパッケージを検索できます。

参照: ossapps

ヒントとテクニック

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

AUR にある ossvolAUR[リンク切れ: アーカイブ: aur-mirror] スクリプトを使うことでミュート・アンミュートやボリュームの上げ下げを簡単にできます。スクリプトに関する詳細は OSS wiki の この記事 を見て下さい。

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

$ ossvol -t

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

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

マルチメディアキーで ossvol を使いたい場合、特別なキーボードキーを見てキーを正しく設定してください。キーを設定したら、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
Blu-ray や少数の高音質ダウンロード音声のサンプルレート。外付けの音声受信機のサポートはハイエンドオーディオに限られます。マザーボードによってはこのサンプルレートをサポートしていません。サポートしているマザーボードチップセットには 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 フィールドに OSSMIXCommand フィールドに /usr/local/bin/ossxmix_bg と入力して Add Button をクリックしてください。
  • 再ログインすれば変更が適用されます。

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

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

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

OSS には OSS を有効化・無効化する soundonsoundoff がありますが、これらはサウンドを使うプロセスが全て終了してからでしか 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
警告: このスクリプトはあくまで簡素なものであり 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"

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

ノート: 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.cwrite_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/setupcd して srcconf_linux.inc を編集、-Werror を探して削除する。そうしないと OSS がコンパイルされません。
  • makepkg --noextract を実行

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

ALSA のエミュレーション

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

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

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

将来的には、libsalsacuckoo など 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
}
ノート: 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 のオプションが表示されます。
ノート: ファイルに変更を加えた時は、変更が適用させるように oss デーモンを再起動してください。

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

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

# mplayer mmsh://yourstreamurl

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

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

参照