はじめに (対象読者・この記事でわかること)

本記事は、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 つあります。

  1. 仮想サウンドデバイス(snd‑dummy)をロード
    カーネルに組み込まれている snd-dummy モジュールは、実際のハードウェアをエミュレートし、ALSA に “Dummy PCM” デバイスを提供します。これにより Android は「サウンドカードがある」前提で動作し、音声データは内部バッファに書き込まれます。

  2. ホスト側の音声サブシステムと橋渡しする
    PulseAudio や PipeWire を起動し、snd-dummy が出力した PCM ストリームをホストのスピーカーへ転送します。仮想環境の場合は、VirtualBox の「Audio」設定で「Intel HD Audio」や「AC97」エミュレーションを有効にし、ホスト側の音声デバイスとリンクさせます。

本稿では、上記 2 つの手順を組み合わせた「サウンドカードが無くても Android-x86 で音声を再生できる」構成を、実機と仮想マシンの両方で動作させる方法を詳述します。

具体的な手順や実装方法

ステップ1:snd‑dummy ドライバの有効化

  1. カーネルモジュールが存在するか確認
    bash lsmod | grep snd_dummy 何も表示されなければ未ロードです。

  2. モジュールをロード
    bash sudo modprobe snd-dummy 正常にロードできたら aplay -l で “Dummy PCM” が表示されます。

  3. 永続化設定
    /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 の設定

  1. ALSA のデフォルトデバイスを dummy に変更
    ~/.asoundrc を作成し、以下を書き込みます。
    text pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }

  2. PulseAudio のインストール(Ubuntu/Debian 系の場合)
    bash sudo apt update sudo apt install pulseaudio

  3. PulseAudio の自動起動
    ~/.bashrc に以下を追記し、端末起動時に PulseAudio が立ち上がるようにします。
    bash if [ -z "$PULSE_SERVER" ]; then pulseaudio --start fi

  4. 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 の音声出力設定

  1. /system/build.prop に音声ポリシーを追記
    bash sudo mount -o remount,rw /system sudo nano /system/build.prop 以下を追加(または既存の項目を上書き)
    text audio.policy=android

  2. /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>

  3. 再起動して設定を反映
    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.confsnd_hda_intel 等が書かれていないか確認
仮想マシンで音が出ない VirtualBox の音声エミュレーションが無効 VirtualBox の設定で「Audio」→「Enable Audio」をオンにし、ホストオーディオドライバ(PulseAudio/ALSA)を選択
Android の AudioFlingerAudioPolicyService に失敗 audio_policy_configuration.xml が期待通りにロードされていない パスが正しいか (/system/etc/)、XML の構文エラーがないかを adb shell cat で検証

解決策のまとめ

  • モジュールロードの永続化snd-dummymodprobe だけでなく、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 音声出力を仮想環境で実現する手法についても取り上げていく予定です。

参考資料