Raspberry PiからUSBスピーカー経由で、Javaのプログラム経由で音を流す。
HDMIに接続しているRaspberry Piは、音声出力の優先順位がHDMIになっているため、Javaから音を流すプログラムを書いた場合、HDMI接続先のデバイスから音が出ます。家の環境は、HDMIの接続先はテレビになっているので、テレビにRaspberry Pieの画面を出していないと音が出ない状態になってしまいます。
今回Javaプログラムから、定時でチャイムをUSBスピーカーから流すプログラムを組みたいと思っていて、Raspberry Piに接続したUSB スピーカーから音を出せるように、色々思考錯誤しました。
基本的には、以下のページに記載している内容を参考にさせていただいた結果、問題なくテレビのHDMI経由で音が鳴りました。
Javaでmp3を再生する(コード編) - 技術系備忘録
RaspberryPiでUSBスピーカーから音を鳴らす - uepon日々の備忘録
今回は、プログラムから流す音のみをUSBスピーカ側に流したいと考えていたので、Javaのソースコードを以下のように追加しました。
// 以下、追加したソース
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
Mixer.Info finalMixerInfo = null;
for (Mixer.Info aMixerInfo : mixerInfo) {
if (aMixerInfo.getName().contains("MicroII")&&!aMixerInfo.getName().contains("Port")) finalMixerInfo=aMixerInfo;
};
Mixer mixer=AudioSystem.getMixer(finalMixerInfo);
line = (SourceDataLine) mixer.getLine(info);
// ここまで追加したソース// ラインを取得
//line = (SourceDataLine) AudioSystem.getLine (info);
line.open();
上記の赤字については、接続したUSBスピーカーによるので、以下のコマンドで調べて合わせます。
$ cat /proc/asound/cards
0 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
1 [MicroII ]: USB-Audio - Audio Advantage MicroII
C-Media INC. Audio Advantage MicroII at usb-3f980000.usb-1.3, full speed
今回接続したUSBスピーカーは以下です。対応OSには記載されていませんが、Raspberry Pi 3(RASPBIAN JESSIE)に接続して問題なく認識しました。