はじめに (対象読者・この記事でわかること)
本記事は、Android-x86 をインストールしたノートPC・デスクトップ・仮想マシンなど、物理的なサウンドカードが搭載されていない環境で「音が出ない」ことに悩んでいる方を対象としています。
Linux の基本操作ができれば問題なく実践でき、以下のことができるようになります。
- snd‑dummy などの仮想サウンドドライバを有効化し、OS 側で音声デバイスを認識させる手順
- PulseAudio や ALSA の設定を調整して Android アプリ側に音声を届ける方法
- 仮想環境(VirtualBox / QEMU)で音声出力を有効にするための具体的な設定
この記事を書いた背景は、Android-x86 の公式ドキュメントがサウンドカード不在時の対応を簡潔に示さない点が多くのユーザーを混乱させていることです。実際に筆者が自身の開発環境で試行錯誤した経験をもとに、再現性の高い手順をまとめました。
前提知識
- Android-x86 のインストール経験(ISO イメージの書き込みやブート設定)
- 基本的な Linux コマンド操作(
lsmod,modprobe,apt等) - 仮想化ソフト(VirtualBox、QEMU、VMware 等)でのネットワーク・ストレージ設定の経験(あると尚可)
なぜサウンドカードが必要か、代替手段の概要
Android-x86 は Linux カーネル上で動作し、音声は ALSA(Advanced Linux Sound Architecture)を通じてハードウェアへ出力されます。物理的なサウンドカードが存在しないと、カーネルは /proc/asound に何も表示せず、Android のオーディオフレームワークは「デバイスが見つからない」エラーを返します。
この問題を回避する一般的な手段は 2 つあります。
-
仮想サウンドデバイス(snd‑dummy)をロード
カーネルに組み込まれているsnd-dummyモジュールは、実際のハードウェアをエミュレートし、ALSA に “Dummy PCM” デバイスを提供します。これにより Android は「サウンドカードがある」前提で動作し、音声データは内部バッファに書き込まれます。 -
ホスト側の音声サブシステムと橋渡しする
PulseAudio や PipeWire を起動し、snd-dummyが出力した PCM ストリームをホストのスピーカーへ転送します。仮想環境の場合は、VirtualBox の「Audio」設定で「Intel HD Audio」や「AC97」エミュレーションを有効にし、ホスト側の音声デバイスとリンクさせます。
本稿では、上記 2 つの手順を組み合わせた「サウンドカードが無くても Android-x86 で音声を再生できる」構成を、実機と仮想マシンの両方で動作させる方法を詳述します。
具体的な手順や実装方法
ステップ1:snd‑dummy ドライバの有効化
-
カーネルモジュールが存在するか確認
bash lsmod | grep snd_dummy何も表示されなければ未ロードです。 -
モジュールをロード
bash sudo modprobe snd-dummy正常にロードできたらaplay -lで “Dummy PCM” が表示されます。 -
永続化設定
/etc/modules(または/etc/modprobe.d/dummy.conf)に以下を追記して再起動時に自動ロードさせます。
text snd-dummy
ポイント:Android-x86 のブートローダ(GRUB)でカーネルオプション
snd_dummy.enable=1を付与すると、起動時に自動的にロードできます。
bash sudo nano /boot/grub/grub.cfg # 例: 既存の linux 行に追加 linux /boot/vmlinuz ... snd_dummy.enable=1
ステップ2:ALSA と PulseAudio の設定
-
ALSA のデフォルトデバイスを dummy に変更
~/.asoundrcを作成し、以下を書き込みます。
text pcm.!default { type hw card 0 } ctl.!default { type hw card 0 } -
PulseAudio のインストール(Ubuntu/Debian 系の場合)
bash sudo apt update sudo apt install pulseaudio -
PulseAudio の自動起動
~/.bashrcに以下を追記し、端末起動時に PulseAudio が立ち上がるようにします。
bash if [ -z "$PULSE_SERVER" ]; then pulseaudio --start fi -
PulseAudio と dummy ALSA のブリッジ
default.paに次の行を追加(/etc/pulse/default.pa)
text load-module module-alsa-sink device=hw:0,0
これで dummy PCM が PulseAudio のシンクとして扱われ、ホスト側のスピーカーへ音声が流れます。
ステップ3:Android-x86 の音声出力設定
-
/system/build.propに音声ポリシーを追記
bash sudo mount -o remount,rw /system sudo nano /system/build.prop以下を追加(または既存の項目を上書き)
text audio.policy=android -
/system/etc/audio_policy.conf(またはaudio_policy_configuration.xml)の編集
仮想デバイスをsnd_dummyに合わせて記述します。実例は次の通りです。
xml <audioPolicyConfiguration> <mixPort name="PrimaryOutput" type="output" device="0x00000002"/> <device address="0" name="dummy"/> </audioPolicyConfiguration> -
再起動して設定を反映
bash sudo reboot
起動後、Android の「設定 → サウンド」画面で「音量」スライダーが操作できることを確認してください。音楽アプリで再生すると、ホスト側スピーカーから音が出ます。
ハマった点やエラー解決
| 発生したエラー | 原因 | 解決策 |
|---|---|---|
snd-dummy: unknown symbol __snd_pcm_ops |
カーネルと snd-dummy のバージョン不整合 |
Android-x86 のカーハンドブック(kernel ディレクトリ)に同バージョンの snd-dummy ソースをコピーし、make modules で再ビルド |
pulseaudio: module-alsa-sink.c: Unable to open PCM device |
ALSA の dummy デバイスが /proc/asound に未登録 |
modprobe snd-dummy が失敗しているケースが多い。/etc/modprobe.d/blacklist.conf に snd_hda_intel 等が書かれていないか確認 |
| 仮想マシンで音が出ない | VirtualBox の音声エミュレーションが無効 | VirtualBox の設定で「Audio」→「Enable Audio」をオンにし、ホストオーディオドライバ(PulseAudio/ALSA)を選択 |
Android の AudioFlinger が AudioPolicyService に失敗 |
audio_policy_configuration.xml が期待通りにロードされていない |
パスが正しいか (/system/etc/)、XML の構文エラーがないかを adb shell cat で検証 |
解決策のまとめ
- モジュールロードの永続化は
snd-dummyをmodprobeだけでなく、GRUB の起動オプションにsnd_dummy.enable=1を付与するのが最も簡潔。 - PulseAudio と ALSA の橋渡しは
module-alsa-sinkが正しくデバイス名hw:0,0を指すように設定し、aplay -lの出力と突き合わせると確実です。 - 仮想環境では、VirtualBox の「Audio」設定を「Intel HD Audio」にし、ホスト側で PipeWire に切り替えている場合は
pw-cliで node を確認してください。 - Android の音声ポリシーは
audio_policy.confの記述が最小限でも機能しますが、デバイス名とタイプが正確に一致していることが重要です。
まとめ
本記事では、サウンドカードが無い環境でも Android-x86 に音声再生機能を実装する手順を、snd‑dummy ドライバの有効化 → ALSA/PulseAudio のブリッジ構築 → Android の音声ポリシー設定という3段階で解説しました。
- snd‑dummy により仮想サウンドデバイスを Linux カーネルに認識させた
- PulseAudio を介して dummy PCM をホストのスピーカーへ転送した
- Android-x86 の audio_policy を調整し、Android アプリ側で音声出力を可能にした
この手順を踏めば、物理的なサウンドカードが無くても、実機・VM どちらでも Android アプリの音声を快適に楽しむことができます。今後は、Bluetooth オーディオや HDMI 音声出力を仮想環境で実現する手法についても取り上げていく予定です。
参考資料
- Android-x86 Project – Official Documentation
- ALSA Project – Dummy Soundcard (snd‑dummy) driver
- PulseAudio – Module-alsa-sink documentation
- VirtualBox Manual – Audio Emulation
- 「Linux Audio Cookbook」著者: Michael K. Roth, 2022 年版(音声設定全般に関する良質なリファレンス)
