Armadilloフォーラム

HDMIからのオーディオ出力について

urasue

2023年2月9日 18時54分

いつもお世話になっております。
浦末です。

flutterのgui_appを改造し、音声を流すようにしてみました。
Armadillo X2をHDMIケーブルでモニターへ接続しています。
現状、音声が流れないのですが、コンテナに対してデバイスの指示等、何か設定が必要でしょうか。
また、I2Sで音声を流すケース場合についても、教えて頂けますでしょうか。

よろしくお願いいたします。

コメント

at_shiita.ishigaki

2023年2月10日 13時10分

石垣です。

> また、I2Sで音声を流すケース場合についても、教えて頂けますでしょうか。
下記に I2S で音声を流す方法が記載されていますので、ご参考ください。
記事のタイトル名は Armadillo-IoT ゲートウェイ G4 となっていますが、Armadillo X2 でも動作確認済みです。
https://armadillo.atmark-techno.com/howto/aiotg4-i2s-tlv320aic3110

> 現状、音声が流れないのですが、コンテナに対してデバイスの指示等、何か設定が必要でしょうか。
上記 HowTo に記載されていますように、コンテナにデバイス /dev/snd を渡す必要があるかと思います。
/dev/snd をコンテナに渡すには、/etc/atmark/containers/gui_app.conf に下記行を追加し、コンテナを再起動してください。

add_devices /dev/snd

浦末です。
ご回答ありがとうございます。
I2Sの件承知しました。

gui_appにAudioplayersを追加してmp3を鳴らそうとしています。
ATDE上でgui_appを動作させた段階で音が出力されておらず、下記のエラーが発生していました。
エラーメッセージ

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method setSourceUrl on channel xyz.luan/audioplayers)
#0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:294:7)
<asynchronous suspension>
#1      AudioPlayer.play (package:audioplayers/src/audioplayer.dart:131:5)
<asynchronous suspension>

pubspec.yaml

# The following section is specific to Flutter packages.
flutter:
  generate: true
  uses-material-design: true
  assets:
    - assets/sounds/

app/assets/sounds/の下にbeep.mp3ファイルを格納しています。

サウンドを流すコード

final player1 = AudioPlayer();
player1.play(AssetSource('sounds/beep.mp3'));

Windowsのvscodeからは動作するのですが、ATDE側へ移植したところ
エラーが起き、原因が分からない状況です。
ご確認の程、よろしくお願いいたします。

佐藤です。

すいません。一点確認させてください。
Audioplayers を使用しなければならない理由等は何かございますでしょうか。
もし、音を流すことが目的なのであれば、gstreamer を使うのも良いかと思います。
gstreamer であれば以下のコマンドで音が流れるかと思います。

[container]# gst-launch-1.0 playbin uri=file:///<ファイルパス>

浦末です。
お世話になっております。

> すいません。一点確認させてください。
> Audioplayers を使用しなければならない理由等は何かございますでしょうか。

flutterのGUI画面でボタンを押したら音声アナウンスや効果音を流そうとしております。
Audioplayersでなくても問題ありません。
VidePlayerに変えて試したところ、ATDE上では音声を確認できました。

ただ、リリースファイルを作り、実機で確認しようとしたところ、下記のエラーが起きswuファイルが作成できなくなっており、
原因を調査中です。

zstd: /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image/gui_app_rel_image_ta.._podman_update__l__1_4d2112033f42ecb62dbcd46a8baae5837f374a4c.zst.tmp already exists; not overwritten  
ERROR: /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image/gui_app_rel_image_ta.._podman_update__l__1_4d2112033f42ecb62dbcd46a8baae5837f374a4c を圧縮できませんでした。
 
 *  ターミナル プロセス "/usr/bin/bash '-c', './scripts/generate_rel_swu.sh'" が終了コード 1 で終了しました。 

圧縮に失敗しているようですが、原因が分かりません。

> もし、音を流すことが目的なのであれば、gstreamer を使うのも良いかと思います。

gstreamerはflutterでも動作しますでしょうか。
Windowsのみ対応しているようでした。
https://pub.dev/packages/gstreamer_launch

佐藤です。

>

> zstd: /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image/gui_app_rel_image_ta.._podman_update__l__1_4d2112033f42ecb62dbcd46a8baae5837f374a4c.zst.tmp already exists; not overwritten  
> ERROR: /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image/gui_app_rel_image_ta.._podman_update__l__1_4d2112033f42ecb62dbcd46a8baae5837f374a4c を圧縮できませんでした。
> 
>  *  ターミナル プロセス "/usr/bin/bash '-c', './scripts/generate_rel_swu.sh'" が終了コード 1 で終了しました。 
> 

> 圧縮に失敗しているようですが、原因が分かりません。
一度、podman images コマンドを実行してリストされたイメージを podman rmi コマンドで削除してから
実行するとどうでしょうか。

>
> > もし、音を流すことが目的なのであれば、gstreamer を使うのも良いかと思います。
>
> gstreamerはflutterでも動作しますでしょうか。
> Windowsのみ対応しているようでした。
> https://pub.dev/packages/gstreamer_launch
確かに、windowsにしか対応してなさそうに見えます。
Process というクラスを使えばコマンドを実行できるようなので、
https://api.dart.dev/stable/2.10.5/dart-io/Process-class.html
これを使って gst-launch-1.0 コマンドを実行するのも一つの方法かと思います。

加えて、armadillo 上のコンテナ内で音を出す場合は、
/etc/atmark/containers/gui_app.conf に下記行を追加するのと

add_devices /dev/snd

コンテナ起動後にコンテナ内で以下を実行してください。

[conteiner /]# apt install pulseaudio
[container /]# pulseaudio --start --exit-idle-time=-1

こうすることで音がHDMIで音が出力されるかと思います。

浦末です。

> 一度、podman images コマンドを実行してリストされたイメージを podman rmi コマンドで削除してから
> 実行するとどうでしょうか。

podman rmi でイメージを一旦削除してみましたが、状況は変わりませんでした。

> Process というクラスを使えばコマンドを実行できるようなので、
> https://api.dart.dev/stable/2.10.5/dart-io/Process-class.html
> これを使って gst-launch-1.0 コマンドを実行するのも一つの方法かと思います。

Processでのコマンド起動の情報ありがとうございます。
検討してみます。

佐藤です。

> podman rmi でイメージを一旦削除してみましたが、状況は変わりませんでした。
/home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image
このディレクトリも削除するとどうでしょうか

[ATDE]$ rm -r /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image

佐藤様
浦末です。

> > podman rmi でイメージを一旦削除してみましたが、状況は変わりませんでした。
> /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image
> このディレクトリも削除するとどうでしょうか
>

> [ATDE]$ rm -r /home/atmark/gui-app-project-v1.0.1/container/release/.gui_app_rel_image
> 

.gui_app_rel_imageを削除することで、swuの作成が出来るようになりました。
ありがとうございました。