LoginSignup
7
7

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-24

ラズパイ+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で配信する

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7