外部USBサウンドカードを使用してデフォルトとして設定するにはどうすればよいですか?


16

RPi3で実行されているC-Mediaの外部USBサウンドカードを持っています。カードインデックスとALSAプラグインを指定することで、aplay / arecordを使用して録音を再生できます。ただし、他の多くのサウンドファイルはまったく再生されないか、期待どおりに再生されません。他の一部のプレーヤーソフトウェアも動作しません。

Q:ALSAをデフォルトで使用するように設定するにはどうすればよいですか?

回答:


32

バックグラウンド

Raspberry Piのさまざまなサウンド関連の問題を解決しようとするのにどれだけの労力が費やされたかを見るのは驚くべきことです。どうやら、新しいユーザーがRaspbianでALSAを使用して正常に開発し、使用するための最も弱い場所でなければなりません。さまざまなOSバージョンや他のLinuxディストリビューションでも独自のRPi3サウンドを動作させるためにかなりの時間と労力を費やしてきたので、最終的なソリューションソリューションページを作成することにしました。少なくとも、最新のRaspbian Stretchで外部サウンドカードを使用するというトピックについては 。

ALSAサウンドシステム

ALSAは、ハードウェア構成やハードウェアの古さに関係なく、あらゆる種類の* nixベースのデバイスをサポートすることを目的としています。言うまでもなく、20年にわたる 開発の詳細に取り組もうとする意味はほとんどありません 。本質を現在の状況に単純に適用します。

しかし、歴史上、ALSAを説明しようとするほど人類が無用で機能不全のダイアグラムを作成したことはありません。リモートで情報を提供できるのは、次の2つのみです。

ここに画像の説明を入力してください ここに画像の説明を入力してください

システム情報を取得する

最初のステップは、もしあればどんなサウンドが機能するか、そしてあなたがすでに持っているハードウェアを見つけることです。詳細を調べる方法はいろいろありますが、平均的な人にとっては、これらの詳細のほとんどは無意味です。最も重要なものを示します。

(サウンド)システムについて何を知りたいですか?

私たちは知りたい:

  • 組み込みのサウンドハードウェアの名前とバージョン
  • 外部サウンドハードウェアの名前とバージョン
  • 使用するカーネルドライバー(モジュール)
  • 他にどのようなサウンド関連のカーネルドライバー/モジュールがロードされているか
  • 利用可能なサウンドカード
  • OSおよびプログラムによってサウンドカードが使用および選択される順序
  • 競合するハードウェアまたはサウンドシステムプログラムがある場合

システムのどこからサウンドを再生して録音しますか?

サウンドを再生するためのオプションは次のとおりです。

  1. 内部3.5 mmオーディオヘッドフォンジャック(アナログオーディオ)から
  2. HDMI接続の画面/モニターから
  3. 外部USBサウンドカードから
  4. GPIOポートから

サウンドを録音するためのオプションは次のとおりです。

  • a。外部USBサウンドカードから(少なくとも1種類の入力)
  • b。ファイルまたはストリームから
  • c。GPIOから

、この記事、私たちはどのようにするかを教えてくれるプレイすると、外部USBサウンドカードを使って録音します

将来の成功計画ですか?

RPiの更新により、新しい変更と改善の絶え間ない流れがあり、多くの場合、古いソリューションが壊れています。ここでのアイデアは、システムに可能な限り少ない変更を加えるか、必要に応じてそれらを明確にすることです。つまり、システム全体の構成ではなく、ユーザーごとの構成を使用することを好みます。つまり、ルートが所有するシステムファイルではなく、ホームディレクトリの構成ファイルを使用してみてください。


TL; DR(もう始めましょう!)

再起動して、外部USBサウンドカードをプラグインします。そのため、同じページで開始します...

A.情報を収集する

# Check ALSA modules
cat /proc/asound/modules

 0 snd_bcm2835
 1 snd_usb_audio

# Check sound hardware
cat /proc/asound/cards

 0 [ALSA           ]: bcm2835 - bcm2835 ALSA
                      bcm2835 ALSA
 1 [Set            ]: USB-Audio - C-Media USB Headphone Set
                      C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed

# Check info on card-1
amixer -c 1

Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 151
  Mono:
  Front Left: Playback 104 [69%] [-8.88dB] [on]
  Front Right: Playback 104 [69%] [-8.88dB] [on]
Simple mixer control 'Mic',0
  Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: Playback 0 - 32 Capture 0 - 16
  Mono: Playback 23 [72%] [34.36dB] [off] Capture 0 [0%] [0.00dB] [on]
Simple mixer control 'Auto Gain Control',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]

ここでは、システムのデフォルト(card 0)がbcm2835 ALSAモジュールを使用していることがわかります。通常、使用するカードを指定できますが、omxplayerなどの一部のソフトウェアに はこのオプションがなく、さまざまな方法でサウンドを生成できません。

この時点で、すでにALSA構成ファイルを構成しようとしている可能性があります。成功するものもあれば、どのように、どこでこれを行うべきかが明らかでないために成功しないものもあります。最終的に必要なのは、外部USBサウンドカードを使用するようにシステムに指示することです。

B. オーディオブロートを削除する

PulseAudio(PA)または 追加の JACKサーバーソフトウェアを保持する非常に正当な理由がない限り、それらがある場合はアンインストールする必要があります。彼らは多くのALSA機能を制御し、それらに必要なすべての追加構成のために物事を非常に混乱させるため、ALSAに干渉する傾向があります!

sudo apt-get remove pulseaudio

# You can keep `jack*`, but make sure it is not running.
# If it is running you need to stop it, disble it or remove it.
service --status-all
# Disable the running service with:
sudo systemctl disable xxxxx

C.内蔵(Broadcom)サウンドカードを無効にする

内部サウンドカードは、次のカーネルモジュールによって駆動され /lib/modules/4.9.59-v7+/kernel/sound/arm/snd-bcm2835.ko ます。オーディオジャック(1)またはHDMI(2)を使用する場合を除き、このカーネルモジュールを無効にする必要があります。これを行うには2つの方法があります。

  1. ブート構成フラグで無効にします
  2. modprobe.dデーモンによってカーネルにロードされないようにします

ミニマルなアプローチを維持するために、(1)を選択します。

# Edit boot config with:
sudo nano /boot/config.txt
# so that:
cat /boot/config.txt
...
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on
dtparam=audio=off
...
# You need to reboot!
sudo reboot now

何らかの理由で方法(2)を使用する場合は、カーネルモジュールをブラックリストに登録する必要があります。これを行うには、を入力しblacklist、の後に任意の*.confファイルのモジュール名を入力します/etc/modprobe.d/。ただし、raspi-blacklist.confこの目的のために呼び出される空の予約済みファイルが既にあります。ただし、6か月後、これとその内容を忘れてしまったため、ブラックリストに載せるモジュールにちなんで名前を付ける方が良いでしょう。

cd /etc/modprobe.d/
# Manually edit a new file:  blacklist-snd_bcm2835.conf
#sudo nano blacklist-snd_bcm2835.conf
# And add the line: blacklist snd_bcm2835
## OR directly with:
sudo tee /etc/modprobe.d/blacklist-snd_bcm2835.conf <<EOF
blacklist snd_bcm2835
EOF
# You need to reboot!
sudo reboot now

違いは何ですか?なし、AFAICT。

再起動後、サウンドモジュールを再確認します。

$ cat /proc/asound/modules
 1 snd_usb_audio

$ cat /proc/asound/cards
 1 [Set            ]: USB-Audio - C-Media USB Headphone Set
                      C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed

ボン!迷惑なbcm2835(card 0)はなくなりましたが、USBカードのインデックスは同じです!これは実際には良いことです。

ALSAを構成する

すでに述べたように、ALSAが独自のUSBサウンドカードをデフォルトとして使用するようにします。これはまた、カーネルサウンドモジュールのリストで最初に利用可能なインデックスが必要であることを意味します。モジュールが上で削除され、インデックスが同じ(カード1)であるため、問題ありません。ただし、bcm2835を再度ロードする必要がある場合、そのモジュールは最初のモジュール(card 0)として再表示されるため、そうではありません。

私たちは、単に私たちのデフォルトPCMカードインデックスはどうあるべきかALSAを伝える必要があります し、どのように彼らはカーネルに優先されるべきで注文します。

ALSAを設定できる場所は3つあります。

  • ユーザーの設定で:~/.asoundrc
  • 次のシステム構成/usr/share/alsa/alsa.conf
  • システムモジュールconfの中:/lib/modprobe.d/aliases.conf

最初の2つはデフォルトのデバイスを変更しますが、最後の2つは外観の順序を保証します。

まず、ユーザー固有の構成を使用するように修正しますcard 1。複数のカードが表示されている場合、デフォルトにするカードのインデックスを選択します。

#cat ~/.asoundrc
cat << EOF | tee ~/.asoundrc

pcm.!default {
        type hw
        card 1
}

ctl.!default {
        type hw
        card 1
}
EOF

次に、上記と同じカードインデックス番号を使用して、システム構成を修正します。一部のシステムパッケージではユーザー設定ファイルが表示されないため、これを行う必要があります。

sudo nano /usr/share/alsa/alsa.conf
# then replace:
#defaults.ctl.card 0
#defaults.pcm.card 0
# with:
defaults.ctl.card 1
defaults.pcm.card 1

次に、変更を有効にするために再起動します。

これで、オーディオシステムが動作するようになります。


テストしてみましょう!

適切なテストを実行するには、テストする適切なファイルが必要です。そのため、何よりも前に、すべてのサウンドファイルとビデオファイルが実際に機能していることを確認してください。

(私はかなりの時間をかけて、h264 / mp4テストビデオを取得してオーディオを再生しようとしましたが、後になって、オーディオがエンコードされていないことを発見しました!

警告MPEG-2またはVC-1 コーデックを使用するビデオをテストしようとする場合 、RPi組織からコーデックキー購入(!)して、組み込みのハードウェアデコーダーで完全にデコードできるようにする必要があります。それ以外の場合は、最初にファイルを変換する必要があります。

次の方法でコーデックが有効になっているかどうかを確認できます。

# Check with:
vcgencmd codec_enabled MPG2
vcgencmd codec_enabled WVC1

テストするには、いくつかの検証済みファイルが必要です。持っていない場合は、これらをダウンロードして使用できます。

# get some demo sound and video files
cd ~/Music

wget -Lk http://rpf.io/lamp3 -O example_11k.mp3
wget -Lk http://www.kozco.com/tech/piano2-CoolEdit.mp3 -O pianoTest_48k.mp3
wget -Lk http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4 -O bbb_720p_2mb.mp4
wget -Lk https://raw.githubusercontent.com/mediaelement/mediaelement-files/master/big_buck_bunny.mp4 -O bbb_360_22k.mp4

次に、プレイしましょう!!

# Double-check! 
aplay -l && arecord -l

**** List of PLAYBACK Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

**** List of CAPTURE Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0


# Play white noise on 2-channels (L/R) on Card-1 
speaker-test -c2 -D hw:1,0

# Play a WAV sound file
speaker-test -c2 -D hw:1,0 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav

# Once the correct default card+device is set, and after reboot, 
# then full left/right voice test (above) is performed, just by:
speaker-test -c2 -twav

# Record some sounds (with a VU bar):
arecord --device=hw:1,0 --format S16_LE --rate 44100 -c1 -V mono test.wav

# Play recorded sounds
aplay -D plughw:1,0 test.wav

# Play recorded sounds (sample rate have to be equal) 
speaker-test -c2 -D plughw:1,0 -r 44100 --test=wav -W $HOME -w test.wav

# Install an MP3 player
sudo apt-get install mpg123

# Play some MP3 file
mpg123 -v -r 44100 some.mp3

# Play an MP3 sound stream
mpg123 http://ice1.somafm.com/u80s-128-mp3


# This plays video, but no sound!
omxplayer -o alsa /opt/vc/src/hello_pi/hello_video/test.h264

# This plays video and sound!
omxplayer -o alsa bbb_720p_2mb.mp4

# The following plays sometimes (!?) and at the wrong speed!
omxplayer -o alsa some.mp3

準備できた!


[オプション]追加のオーディオハードウェアの注文

このセクションを使用する場合、上記のセクションのすべてのカードインデックス値を変更する必要があります!

追加のオーディオハードウェアを接続したが、希望どおりに表示されない場合は、/lib/modprobe.d/aliases.confファイル内のモジュールの表示順序を強制的に再配置できます。

このファイルに変更を加えることを提案するソリューションがあります。残念ながら、RPiのデフォルトのUSBサウンドモジュールのスペルが間違っていることに気付いていません!したがって、変更は有効になりません。私たちが関係しているサウンドカーネルモジュールは、ではsnd_usb_audioなくと呼ばれていsnd-usb-audioます。ファイル名は次のsnd-usb-audio.ko場所にあります/lib/modules/4.9.59-v7+/kernel/sound/usb/

面白いことに、ファイル内のテキストには、変更する必要がないと書かれています!

sudo nano /lib/modprobe.d/aliases.conf

#--------------------------------------
# For original (out-of-box) use
#--------------------------------------
# replace this: 
options snd-usb-audio index=-2
# with this:
options snd_usb_audio index=-2

#--------------------------------------
# To change the index & order
#--------------------------------------
# Set the index value of the cards:
options snd_usb_audio index=0
options snd_bcm2835 index=1
# Set the order:
options snd slots=snd_usb_audio,snd_bcm2835

参照:


Raspianでraspi 3B + aplayを使用-D plughw:0,0しても、-D hw:0,0(shttps://raspberrypi.stackexchange.com/a/89162に基づく)の代わりに使用するまで、この作業のすべての後、一貫して何もしませんでした。残念ながら、ほとんどすべてが今の仕事に(ほとんどのオーディオオーバーUSB、ユーティリティIの必要性を再生することができますがvban_receptor)まだ仕事をしませんが、この時点でそれはもうほぼ確実にセットアップのせいではありません
マイクのPomax時"Kamermans

1
はい、これは血まみれの悪夢です。こちらの異なるPCMプラグインのリストをご覧ください。次に、「ALSAデバイスとプラグイン」 という名前の最初のセクションをここで読みます。多分それはあなたがplughw代わりに使用する必要がある理由にいくつかの光を当てるのに役立つでしょうhw。ところで。以来hwストレートハードウェアにあるのに対し、plughwいくつかの処理を行い、あなたが実際にプレイしようとしているかどうか確認することをお勧めします。
-not2qubit

/usr/share/sounds/alsa(具体的にFront_Center.wav
マイク 'Pomax' Kamermans

1
あなたは絶対星。ラズベリーパイから音を出すことは、何をすべきかの明確なガイダンスのない数日間のプロジェクトになるとは思っていませんでした。あなたのためのすべての+1。
キーラン

3
賛成票が非常に少ないのは犯罪者です。
BradChesney79
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.