Armadillo Base OSで、USBオーディオで録音、再生するコンテナを作成してみます。
以下、ABOSDE(備考を参照)のサンプルプロジェクトから、USBオーディオで録音、再生するコンテナを作成する手順になります。
備考)Armadillo Base OS対応製品のアプリケーション開発にあたっては、VSCode上の開発環境として
ABOSDE(※)が用意されています。
※)ABOSDE:Armadillo Base OS Development Environmetの略称
ABOSDEには、C言語/Python/Shell/GUI等、プログラミング言語や機能に応じたサンプルプロジェクトがあります。
これらのサンプルプロジェクトをベースに、ユーザー独自のアプリケーション開発が始められます。
備考)以下、製品マニュアルへのリンクは、
Armadillo-IoT ゲートウェイ G4製品マニュアルになっていますが、
手順は、他のArmadillo Base OS対応製品でも同じです。
0. 前提(開発環境の準備)
ここでは、Linuxカーネルのビルド、および、Armadilloのイメージ書き換え環境として、該当する製品の
Armadillo-IoT ゲートウェイ G4製品マニュアル「3.1. 開発の準備」
の「3.1.5. Armadillo に初期設定をインストールする」まで実施済みの前提で説明します。
補足)後述の手順にて、上記手順内の
「
図3.22 initial_setup.swu 初回生成時の各種設定」で設定した
「証明書の鍵のパスワード」「abos-web のパスワード」が必要になります。
手順1. 準備
Armadillo Base OS:開発手順・Tips集の
【必須】①initial_setup
【任意】②ネットワーク設定
【任意】③拡張インターフェース設定
まで進めておきます。
手順2. USBオーディオデバイスの有効化
Armadillo Base OS(3.21.3-at.12以降)では、USBデバイスの接続許可をWeb UI(ABOS Web)の画面から
設定可能になっています。
下記ブログの手順で、PCのWebブラウザでABOS Webの画面を開きます。
Armadillo Base OS:ABOS WebでArmadilloにアクセスする方法(マニュアル抜粋)
補足)上記、手順0を実施している場合、ログイン画面のパスワードは、
手順0で設定したabos-web のパスワードを入力します。
ArmadilloにUSBオーディオデバイス(※)を接続した状態で、
ABOS Webの「USB接続制御」を選択して、設定画面を開きます。
※)ここでは、USBオーディオデバイスとして、ヘッドセットを使用しています。
デフォルトでは、USBオーディオの接続がブロックされています。
USBデバイスクラスの追加
USBデバイスクラスに、USBオーディオを追加します。
USBデバイスの接続を許可
対象のUSBオーディオを選択して「許可」します。
以上で、USBオーディオ(本例では「USB_Audio_Device」と認識されているヘッドセット)が使用できます。
手順3. サンプルプロジェクトをベースにサウンドデバイスで録音、再生するコンテナを作成
ABOSDEには複数のサンプルプロジェクトが用意されていますが、
ここでは「Shell New Project」を対象とします。
3-1. 「Shell New Project」で新規プロジェクト(example1)を作成
Armadillo Base OS:アプリケーションの作り方
1.プロジェクト作成
2.SSH接続設定を行う(任意)
当該ブログでは「任意」ですが、ここでは、後述の手順に必要なため、SSH接続を設定します。
上記の手順に沿って、「Shell New Project」でのプロジェクト作成を進めます。
3-2. サウンドデバイスを操作可能なコンテナを生成するための設定
プロジェクト(下記、赤枠アイコンで展開した赤線のファイル)を下記の内容で書き換えます。
packages.txt
インストールするパッケージのリストにサウンドデバイス(ALSA)を操作する「alsa-utils」を含めます。
bash
alsa-utils
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
まずは、サウンドデバイスのカード番号を確認する(※)だけのスクリプトにします。
※)「arecord -l」で確認します。
#!/bin/bash
arecord -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のコンソールにログが表示されます。
上記のログより、ここで使用しているサウンドデバイス(ヘッドセット)のカード番号が「1」
であることが確認できます。
3-4. サウンドデバイスで録音、再生
main.sh
上記手順で作成したmain.shをサウンドデバイスで録音、再生するアプリケーション(※)に
書き換えます。
※)本例の説明は後述。
#!/bin/bash
arecord -l
while :
do
echo -e "record start"
arecord -c 1 -f S16_LE -r 16000 sample.wav -D hw:1 -d 30
echo -e "record end"
sleep 5
echo -e "play start"
aplay sample.wav -D plughw:1
echo -e "play end"
sleep 5
done
上記のmain.shは、下記のように動作する例になっています。
30秒録音→5秒スリープ→録音した音声を再生→5秒スリープ、を繰り返します。
下記のコマンドで、録音と再生をしています。
arecord -c 1 -f S16_LE -r 16000 sample.wav -D hw:1 -d 30
下記のオプション指定で録音します。
-c 1:チャンネル数
-f S16_LE:サンプル・フォーマット
-r 16000:サンプリングレート
sample.wav:録音するファイル名
-D hw:1:サウンドデバイス名(ここでは、上記の3-3で確認したカード番号「1」)
-d 30:録音時間[秒]
aplay sample.wav -D plughw:1
下記のオプション指定で再生します。
sample.wav:再生するファイル名
-D plughw:1:サウンドデバイス名(ここでは、上記の3-3で確認したカード番号「1」)
録音、再生の確認
「example1」プロジェクトが開いている状態(上記手順実行直後のまま)で、
Armadillo Base OS:アプリケーションの作り方
「6.デバッグ実行(任意)」に記載の通り、下記を実行します。
1.App stop on Armadillo でコンテナを停止
2.App run on Armadillo でコンテナを起動
App run on Armadillo を実行すると、上記で書き換えたmain.shが実行され、
30秒録音→5秒スリープ→録音した音声を再生→5秒スリープ、を繰り返します。
また、VScodeのコンソールは、下記のようにログが表示されます。
ここでは、ヘッドセットで録音、再生を繰り返す例になってますが、
異なるデバイス(マイク/スピーカー等)、異なる用途(録音のみ/再生のみ)などの場合、
main.shの「サウンドデバイスのカード番号」「arecord」「aplay」の設定等は、適宜アレンジしてください。