Help us understand the problem. What is going on with this article?

ラズパイ+momoでWebRTCで送信するときにマイクの代わりに音声ファイルを使用する

ラズパイ+momoでWebRTCで送信するときにwebcamをつなぐとマイクとしてwebcamの内蔵マイクが使用できる。しかし専用カメラモジュールを使用したときはマイクがない。

音声なしの配信ではさびしいので、あらかじめ用意した音声ファイルの内容を送信できるようにした。

概要

ALSAのloopbackデバイスを使用するとオーディオキャプチャデバイスに任意の内容を流し込むことができる。
これを使ってmomoにあらかじめ用意した音声ファイルを読み込ませる。

使用したmomoのversionは以下の通り。

./momo --version
WebRTC Native Client Momo version 19.08.0 USE_MMAL_ENCODER=1

音声ファイルの準備

momoでは音声のエンコード、デコードはソフトウェアで行う。ラズパイのように非力なCPUにとっては負荷が大きい処理である。
そこで使用する音声ファイルはあらかじめデコードしてwavファイルにしておく。
形式はサンプリングレート 48kHz ステレオ。

ffmpeg -i input.mp3 -ar 48000 -ac 2 output.wav

ALSA loopback デバイス

今回は音声ファイルを流し込むのにALSAのloopback デバイスを使用する。

カーネルモジュールのロード

sudo modprobe snd-aloop

起動時に自動的にロードするには /etc/modules に追記しておく。

sudo sh -c "echo snd_aloop >> /etc/modules"

Loopback ができていることの確認、

$ arecord -L |grep Loopback
  ...
hw:CARD=Loopback,DEV=0
    Loopback, Loopback PCM
hw:CARD=Loopback,DEV=1
    Loopback, Loopback PCM
plughw:CARD=Loopback,DEV=0
    Loopback, Loopback PCM
plughw:CARD=Loopback,DEV=1
    Loopback, Loopback PCM

ALSA のコンフィグファイル

前回の記事 の通りmomoはオーディオキャプチャデバイスとして default を使用する。
なので、loopback の受け側を default として参照できるようにALSAのコンフィグファイルを用意する。

~/.asoundrc
pcm.!default {
  type plug
  slave.pcm "hw:Loopback,0,0"
}

音声ファイルを流し込む

-vv オプションをつけるとVUメータが表示される。

aplay -D hw:Loopback,1 -vv sample.wav

defaultのオーディオキャプチャデバイスに音がきていることの確認

arecord -D default -vv -f dat > /dev/null

これでVUメータが振れていればOK。^C で止める。

複数のwavファイルを順番に流す場合のスクリプト

#!/bin/sh

TEST_SOUND_DIR=~/wav/

while :; do
  for i in $TEST_SOUND_DIR/*.wav; do
    aplay -D hw:Loopback,1 "$i"
  done
done

momoの実行

これで通常通りmomoを実行すれば、流し込んだ音声ファイルの配信ができる。

しかし聞いてみるとモノラルになってしまっている。(ステレオの左チャネルの音しか聞こえない。)
ログを調べてみると、どうも人の話し声を想定したエコーキャンセリングやオートゲインコントロールがデフォルトで有効になってしまっているようだ。
音楽を流す時にはこれらの機能をオフにしたいが、現状のmomoにその機能はまだ無い。

今はとりあえずここまで。

続きを書きました。
ラズパイのmomoでステレオ音声でWebRTCで配信する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした