回答:
Raspberry Piのさまざまなサウンド関連の問題を解決しようとするのにどれだけの労力が費やされたかを見るのは驚くべきことです。どうやら、新しいユーザーがRaspbianでALSAを使用して正常に開発し、使用するための最も弱い場所でなければなりません。さまざまなOSバージョンや他のLinuxディストリビューションでも独自のRPi3サウンドを動作させるためにかなりの時間と労力を費やしてきたので、最終的なソリューションソリューションページを作成することにしました。少なくとも、最新のRaspbian Stretchで外部サウンドカードを使用するというトピックについては 。
ALSAは、ハードウェア構成やハードウェアの古さに関係なく、あらゆる種類の* nixベースのデバイスをサポートすることを目的としています。言うまでもなく、20年にわたる 開発の詳細に取り組もうとする意味はほとんどありません 。本質を現在の状況に単純に適用します。
しかし、歴史上、ALSAを説明しようとするほど人類が無用で機能不全のダイアグラムを作成したことはありません。リモートで情報を提供できるのは、次の2つのみです。
最初のステップは、もしあればどんなサウンドが機能するか、そしてあなたがすでに持っているハードウェアを見つけることです。詳細を調べる方法はいろいろありますが、平均的な人にとっては、これらの詳細のほとんどは無意味です。最も重要なものを示します。
(サウンド)システムについて何を知りたいですか?
私たちは知りたい:
システムのどこからサウンドを再生して録音しますか?
サウンドを再生するためのオプションは次のとおりです。
サウンドを録音するためのオプションは次のとおりです。
で、この記事、私たちはどのようにするかを教えてくれるプレイすると、外部USBサウンドカードを使って録音します。
RPiの更新により、新しい変更と改善の絶え間ない流れがあり、多くの場合、古いソリューションが壊れています。ここでのアイデアは、システムに可能な限り少ない変更を加えるか、必要に応じてそれらを明確にすることです。つまり、システム全体の構成ではなく、ユーザーごとの構成を使用することを好みます。つまり、ルートが所有するシステムファイルではなく、ホームディレクトリの構成ファイルを使用してみてください。
再起動して、外部USBサウンドカードをプラグインします。そのため、同じページで開始します...
# 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サウンドカードを使用するようにシステムに指示することです。
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
内部サウンドカードは、次のカーネルモジュールによって駆動され
/lib/modules/4.9.59-v7+/kernel/sound/arm/snd-bcm2835.ko
ます。オーディオジャック(1)またはHDMI(2)を使用する場合を除き、このカーネルモジュールを無効にする必要があります。これを行うには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が独自のUSBサウンドカードをデフォルトとして使用するようにします。これはまた、カーネルサウンドモジュールのリストで最初に利用可能なインデックスが必要であることを意味します。モジュールが上で削除され、インデックスが同じ(カード1)であるため、問題ありません。ただし、bcm2835を再度ロードする必要がある場合、そのモジュールは最初のモジュール(card 0
)として再表示されるため、そうではありません。
私たちは、単に私たちのデフォルトPCMカードインデックスはどうあるべきかALSAを伝える必要があります し、どのように彼らはカーネルに優先されるべきで注文します。
ALSAを設定できる場所は3つあります。
~/.asoundrc
/usr/share/alsa/alsa.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
plughw
代わりに使用する必要がある理由にいくつかの光を当てるのに役立つでしょうhw
。ところで。以来hw
ストレートハードウェアにあるのに対し、plughw
いくつかの処理を行い、あなたが実際にプレイしようとしているかどうか確認することをお勧めします。
/usr/share/sounds/alsa
(具体的にFront_Center.wav
)
aplay
を使用-D plughw:0,0
しても、-D hw:0,0
(shttps://raspberrypi.stackexchange.com/a/89162に基づく)の代わりに使用するまで、この作業のすべての後、一貫して何もしませんでした。残念ながら、ほとんどすべてが今の仕事に(ほとんどのオーディオオーバーUSB、ユーティリティIの必要性を再生することができますがvban_receptor
)まだ仕事をしませんが、この時点でそれはもうほぼ確実にセットアップのせいではありません