オリジナルのスマートスピーカーを作ってみる 4 音声ファイル再生 & コンテナ構築
この記事は?
この記事は オリジナルのスマートスピーカーを作ってみる シリーズの続き「その4」です。
合成した音声ファイルを再生する
ラズパイで音声ファイルを再生できそうな .Net のライブラリーとして LibVLCSharp というものがあったので、試してみました。
結論としてラズパイ実機では音声再生することはできましたが、Docker コンテナ環境 (linux/arm64 debian:bookworm-slim) では再生できませんでした。
ここは無理に C# ライブラリを使わずに、ラズパイに音声再生ソフト (sox) をインストールして、C# からプロセスとして呼び出すことにしました。この方法ではラズパイ実機、コンテナ共に再生できることを確認しました。以下にコーディング例を紹介します。
$ sudo apt install sox
using System.Diagnostics;
internal class AudioFile
{
...
public static void PlayAudio()
{
//sox の "play" コマンドを実行する
var info = new ProcessStartInfo()
{
FileName = "play",
Arguments = "./any_audio_file.wav",
WorkingDirectory = "/any_working_directory",
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
};
using var audioPlayProcess = Process.Start(info);
audioPlayProcess.WaitForExit();
}
...
}
Docker 使いたい
ある程度のところまできたので、これからの動作確認は Docker でやりたいですね。(Docker の使い方を忘れてしまったので「米国AI開発者がゼロから教えるDocker講座」で復習しつつ)
しかし、コンテナ内の音声再生をホスト側スピーカーに出力する方法がわかりません。
調べてみました。
コンテナ内の音声再生をホスト側スピーカーに出力する
ググってみて、以下のチュートリアル動画を見つけてやってみました。
PulseAudio というソフトウェアを利用する方法らしいです。
(サンプルのコンテナイメージが悪いらしく、適当なイメージの latest に変えて)手順通りにやってみたら、できました。これを採用しようと思います。
Dockerfile
Dockerfile は以下のようになりました。
あとは適当に VOICEVOX ENGINE 立ち上げて docker run を実行するスクリプト (powershell) を作成して、いつでもワンタッチでアプリケーションの動作確認をできるようになりました!やったね!
これでいちいち実機ラズパイにデプロイする必要は無くなります。
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
pulseaudio \
sox
ENV PULSE_SERVER=host.docker.internal
CMD bash
以下の記事に続く
オリジナルのスマートスピーカーを作ってみる 5 目覚まし機能の作成
Discussion