Armadillo Base OSで、USBオーディオで音声ファイル(mp3)を再生するコンテナを作成してみます。
以下、ABOSDE(備考を参照)のサンプルプロジェクトから、USBオーディオで音声ファイル(mp3)を再生するコンテナを作成する手順になります。
備考)Armadillo Base OS対応製品のアプリケーション開発にあたっては、VSCode上の開発環境として
ABOSDE(※)が用意されています。
※)ABOSDE:Armadillo Base OS Development Environmetの略称
ABOSDEには、C言語/Python/Shell/GUI等、プログラミング言語や機能に応じたサンプルプロジェクトがあります。
これらのサンプルプロジェクトをベースに、ユーザー独自のアプリケーション開発が始められます。
備考)以下、製品マニュアルへのリンクは、
Armadillo-IoT ゲートウェイ G4製品マニュアルになっていますが、
手順は、他のArmadillo Base OS対応製品でも同じです。
まずは、
Armadillo Base OS:USBオーディオで録音、再生(ABOSDEで作成)と同様に
0. 前提(開発環境の準備)
手順1. 準備
手順2. USBオーディオデバイスの有効化
を実施します。
手順3. サンプルプロジェクトをベースに音声ファイル(mp3)を再生するコンテナを作成
ABOSDEには複数のサンプルプロジェクトが用意されていますが、
ここでは「Shell New Project」を対象とします。
3-1. 「Shell New Project」で新規プロジェクト(example1)を作成
Armadillo Base OS:アプリケーションの作り方の下記の手順に沿って、
「Shell New Project」でのプロジェクト作成を進めます。
1.プロジェクト作成
2.SSH接続設定を行う(任意)
当該ブログでは「任意」ですが、ここでは、後述の手順に必要なため、SSH接続を設定します。
3-2. サウンドデバイスを操作可能なコンテナを生成するための設定
プロジェクト(下記、赤枠アイコンで展開した赤線のディレクトリ/ファイル)を下記の内容で書き換えます。
packages.txt
インストールするパッケージのリストにサウンドデバイス(ALSA)を操作する「alsa-utils」と
mp3の再生に対応した「mplayer」を含めます。
bash
alsa-utils
mplayer
app.conf
コンテナでのサウンドデバイスの使用(ALSA)の許可(※)を含むコンフィギュレーションにします。
※)
Armadillo-IoT ゲートウェイ G4製品マニュアル「6.2.4. コンテナ起動設定ファイルを作成する」
6.2.4.5. ホットプラグデバイスの追加
の機能を用いて、下記「add_hotplugs alsa」により許可しています。
set_image localhost/{{PROJECT}}:latest
add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app:ro
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data
# Allow sound device
add_hotplugs alsa
# Allow input to containers and see output from containers
add_args -it
# Add environment variables set by Atmark Techno.
add_armadillo_env
set_command bash /vol_app/src/main.sh
main.sh
まずは、サウンドデバイスのカード番号を確認する(※)だけのスクリプトにします。
※)「aplay -l」で確認します。
#!/bin/bash
aplay -l
sleep infinity
以上のプロジェクトの編集が完了したら、ビルドしてArmadilloに書き込みます。
Armadillo Base OS:アプリケーションの作り方の
4.コンテナのビルド
「Generate development swu」を実行します。
5.アップデートでSWUファイル書き込み
を実施します。
Armadilloに書き込みが終了すると、自動的に再起動し、上記手順で作成した「example1」コンテナが
起動中になります。
3-3. オーディオ再生するサウンドデバイスのカード番号の確認
「example1」プロジェクトが開いている状態(上記手順実行直後のまま)で、
Armadillo Base OS:アプリケーションの作り方
「6.デバッグ実行(任意)」に記載の通り、下記を実行します。
1.App stop on Armadillo でコンテナを停止
2.App run on Armadillo でコンテナを起動
App run on Armadillo を実行するとVScodeのコンソールにログが表示されます。
上記のログより、ここで使用しているサウンドデバイス(USBオーディオ)のカード番号が「1」、
デバイス番号が「0」
であることが確認できます。
3-4. サウンドデバイスの情報の確認
main.sh
サウンドデバイスのカード番号(上記で確認した「1」)の情報を確認(※)するスクリプトにします。
※)「amixer -c 1」でカード番号「1」の情報を確認します。
#!/bin/bash
#aplay -l
amixer -c 1
sleep infinity
「example1」プロジェクトが開いている状態(上記手順実行直後のまま)で、
Armadillo Base OS:アプリケーションの作り方
「6.デバッグ実行(任意)」に記載の通り、下記を実行します。
1.App stop on Armadillo でコンテナを停止
2.App run on Armadillo でコンテナを起動
App run on Armadillo を実行するとVScodeのコンソールにログが表示されます。
上記のログより、ここで使用しているサウンドデバイス(USBオーディオ)の情報(※)が確認できます。
※)後述の手順で、ここで確認したサウンドデバイスの名前「Speaker」を使用することになります。
3-5. mp3ファイルを再生
app/src
ここでは、mp3ファイルを「[プロジェクト名]/app/src」(※)に置きます。
※)前述の「App run on Armadillo」実行時、Armadillo上で更新可能なディレクトリです。
下記のように「example1/app/src」ディレクトリに、サンプルの実行ファイル「main.sh」に 加え、
「sample.mp3」が追加がされた状態にします。
atmark@atde9:~/example1/app/src$ ls
main.sh sample.mp3
VSCodeの画面では、「app/src」に「sample.mp3」が追加された状態で見えます。
main.sh
上記手順で作成したmain.shをサウンドデバイスでmp3ファイルを再生するアプリケーション(※)に
書き換えます。
※)本例の説明は後述。
#!/bin/bash
#aplay -l
#amixer -c 1
amixer -c 1 sset Speaker 50%,50% unmute
while :
do
echo -e "play start"
mplayer -vo null -ao alsa:device=plughw=1.0 /vol_app/src/sample.mp3
echo -e "play end"
sleep 5
done
上記のmain.shは、下記のように動作する例になっています。
下記のコマンドで、音量を設定後、sample.mp3を再生→5秒スリープ、を繰り返します。
amixer -c 1 sset Speaker 50%,50% unmute
下記のオプション指定でオーディオの設定をします。
-c 1:チャンネル数
sset Speaker:設定 (ここでは、上記の3-4で確認したサウンドデバイスの名前「Speaker」)
50%,50% :左右の音量
unmute:ミュートの有無
mplayer -vo null -ao alsa:device=plughw=1.0 /vol_app/src/sample.mp3
下記のオプション指定でmp3ファイルを再生します。
-vo null:ビデオデバイス(ここでは未使用)
-ao alsa:device=plughw=1.0 :サウンドデバイス(※)
※)上記の3-3で確認したカード番号「1」デバイス番号「0」
/vol_app/src/sample.mp3:mp3ファイル(※)
※)本手順の最初でmp3ファイルを置いた[プロジェクト名]/app/src/と/vol_app/src/は、
プロジェクト内では同じディレクトリを意味しています。
mp3ファイルの再生の確認
「example1」プロジェクトが開いている状態(上記手順実行直後のまま)で、
Armadillo Base OS:アプリケーションの作り方
「6.デバッグ実行(任意)」に記載の通り、下記を実行します。
1.App stop on Armadillo でコンテナを停止
2.App run on Armadillo でコンテナを起動
App run on Armadillo を実行すると、上記で書き換えたmain.shが実行され、
sample.mp3を再生→5秒スリープ、を繰り返します。
また、VScodeのコンソールは、下記のようにログが表示されます。
ここでは、サウンドデバイスにヘッドセットを使用し、mp3ファイルの再生を繰り返す例になってますが、
異なるデバイス(スピーカー等)、異なる設定(音量等)にする場合、
main.shの「サウンドデバイス」「amixer」「mplayer」の設定等は、適宜アレンジしてください。