-
Notifications
You must be signed in to change notification settings - Fork 1
Audio from HDMI
BeagleBone BlackがRasPiと較べて機能的に弱い部分の1つに、アナログでの音声出力がないところがあります。
HDMIでは音は出るので、TVなどにつないで音が出せないわけではないのですが、PC用のディスプレイなどでスピーカーの付いていない場合には音が出ません。ベビージャックに差し込んですぐに音を出せないところが、つらいところです。
音を出すために、外付けのUSB-DACを使うという手がありますが、できれば1つしかないUSBポートは、できればHUBなどをつながないで、Bluetoothや無線LANを使うのに残しておきたいところです。
世間には、HDMIからオーディオ出力だけを分離するアダプタ製品が売っていますので、それを使ってオーディオ出力をやってみましょう。
たまたま、マイコンソフト XDAC-1が手元にあったので、これを使ってみます。
これは、6,800円とBeagleBone Blackより高価で、Amazonで購入できず、ただ音を出すためだけに購入するのは、本末転倒なところがあります。
オーディオのインターフェイスの状態を確認します。aplayでも、procの中身でもどちらでも確認できます。
root@beaglebone:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Black [TI BeagleBone Black], device 0: HDMI nxp-hdmi-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
root@beaglebone:~# cat /proc/asound/cards
0 [Black ]: TI_BeagleBone_B - TI BeagleBone Black
TI BeagleBone Black
ALSAで、0番に"TI BeagleBone Black"として利用できるようになっています。NXPのICを使っているようです。
BagleBone Blackと、XDAC-1を接続します。
XDAC-1には電源スイッチはありません。ACアダプタをコンセントに接続し、HDMI端子をBagleBone Blackに接続し、イヤホンをアナログ端子に接続します。XDAC-1は、アナログ利用の場合はスイッチをA側にしておく必要があります。
TVへのスルーアウトが必要かと思いましたが、XDAC-1単体でもEDIDを出しているので、接続は不要です。
root@beaglebone:~# parse-edid /sys/class/drm/card0/card0-HDMI-A-1/edid
parse-edid: parse-edid version 2.0.0
parse-edid: EDID checksum passed.
# EDID version 1 revision 3
Section "Monitor"
# Block type: 2:0 3:fc
Identifier "EP-HDMI-RX"
VendorName "EXP"
ModelName "EP-HDMI-RX"
# Block type: 2:0 3:fc
# Block type: 2:0 3:fd
HorizSync 15-46
VertRefresh 59-61
# Max dot clock (video bandwidth) 80 MHz
# DPMS capabilities: Active off:yes Suspend:no Standby:no
Mode "1280x720" # vfreq 60.000Hz, hfreq 45.000kHz
DotClock 74.250000
HTimings 1280 1390 1430 1650
VTimings 720 725 730 750
Flags "+HSync" "+VSync"
EndMode
Mode "720x480" # vfreq 59.940Hz, hfreq 31.469kHz
DotClock 27.000000
HTimings 720 736 798 858
VTimings 480 489 495 525
Flags "-HSync" "-VSync"
EndMode
# Block type: 2:0 3:fc
# Block type: 2:0 3:fd
EndSection
TVへのスルーアウトがある場合は、TV側のEDIDを返します。
再生するための、サンプルファイルをscpでBeagleBone Blackに転送しておきます。
MacBook:~ kinneko$ scp ~/Music/iTunes/iTunes\ Music/BENI/Covers/* [email protected]:/home/root/
[email protected]'s password:
01 Ti Amo (English Ver.).mp3 100% 14MB 2.8MB/s 00:05
02 La.La.La Love Song.mp3 100% 5660KB 5.5MB/s 00:01
03 Hitomio Tojite.mp3 100% 14MB 1.2MB/s 00:11
04 Kanade.mp3 100% 12MB 2.5MB/s 00:05
05 _One More Time, One More Chanc.mp3 100% 13MB 2.7MB/s 00:05
06 Robinson.mp3 100% 10MB 2.6MB/s 00:04
07 Suddenly.mp3 100% 10MB 2.5MB/s 00:04
08 Mou Koinante Shinai.mp3 100% 11MB 2.8MB/s 00:04
09 Sakurazaka.mp3 100% 13MB 2.5MB/s 00:05
10 Kokonishika Sakanai Hana.mp3 100% 15MB 2.1MB/s 00:07
11 Imano Kimio Wasurenai.mp3 100% 9778KB 3.2MB/s 00:03
12 Itoshino Erii.mp3 100% 10MB 2.1MB/s 00:05
13 True Love.mp3 100% 9667KB 2.4MB/s 00:04
再生用のプレーヤーとしては、mplayerがインストールされていましたので、再生してみます。
root@beaglebone:~# mplayer /home/root/01\ Ti\ Amo\ \(English\ Ver.\).mp3
MPlayer2 2.0-379-ge3f5043 (C) 2000-2011 MPlayer Team
162 audio & 361 video codecs
Playing /home/root/01 Ti Amo (English Ver.).mp3.
Detected file format: Audio only
Load subtitles in /home/root/
==========================================================================
Forced audio codec: mad
Opening audio decoder: [libmad] libmad mpeg audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 320.0 kbit/22.68% (ratio: 40000->176400)
Selected audio codec: [mad] afm: libmad (libMAD MPEG layer 1-2-3)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: 343.1 (05:43.1) of 360.0 (06:00.0) 5.8%
Cannot sync MAD frame
Cannot sync MAD frame
A: 343.2 (05:43.2) of 360.0 (06:00.0) 5.8%
Cannot sync MAD frame
A: 343.2 (05:43.2) of 360.0 (06:00.0) 5.8%
Exiting... (End of file)
再生できました。高いだけあって、音が切れてもホワイトノイズが出たりしません。
プラグに100均のパッシブスピーカーを接続してみましたが、音量が小さくて使えませんでした。イヤホン以外で使うには、アンプは必須になるでしょう。
alsamixerを起動してみましたが、"This sound device does not have any controls."のメッセージが出るだけでした。
デバイスとしての音量調整機能は、そもそも持っていないようです。
HDMIの信号がスリープで停止すると、当然ながら追随する音声信号も止まってしまいます。スクリーンがスリープにならないような設定を別にしてやる必要があります。