REALITYの配信音量分析 -快適な配信環境を作っていく-
REALITY新卒サーバエンジニアのうすぎぬです。好きな電子部品はスケスケでカチカチのメカニカルリレーとMPU6050と曲げセンサです。
今回は「終わりなき挑戦プロジェクト」で挑んだ「音声が不安定問題」の特に音量バランスが安定しない問題について書いていきます。「終わりなき挑戦プロジェクトとは?」という方はまず↓の記事を読んでから帰ってきてください。
1. はじめに
音量バランス改善班は、OS別に配信時の音量が異なるのを改善して、どのユーザも同じような音量で配信ができるような環境作りをしようというテーマで2週間問題解決に取り組みました。
実は、以前よりチームのエンジニアさんや一部ユーザの方から「Androidの配信音声がiOSより小さく感じる」という声を頂いてまして、OSによる音量差を改修しようというモチベーションはチーム内にありました。しかし、実際には、
配信音量が異なる問題がOS起因なのかが不明
小さいとしてどの程度小さいのかが不明
という状況で、さらには、
配信音量の評価指標が不定である
という課題もあり、大きくまとまった時間を取らなければ音量バランス問題の改善は難しい状況でした。
そこで、今回「終わりなき挑戦プロジェクト」始動により新規機能開発をストップして上記課題に取り組める時間を確保できたので、オーディオが趣味のうすぎぬは音量バランス問題解決のため分析班として2週間この課題に取り組んだというわけです。本記事では、上述の課題に対して二週間で行ったことをつらつらと書いていくぞ。
2. 配信音量の定量評価
配信の音量を評価すると言っても「配信者が配信する音声の音量」と「視聴者が再生する音量」のどちらに問題があるのかが分かりませんので、今回はこれらを別々に評価しました。2章では「配信者が配信する音声データの音量」、3章では「視聴者がスピーカ出力した配信音声の音量」の調査・分析について解説します。
さて、今回配信時音声データの音量を評価するにあたって、音量の指標にはLUFS (dB)を選択しました。LUFSは放送業界向けに設計されたラウドネスの指標で、音声データに対してDigital Full Scaleに基づいた絶対値評価を行うことが可能な指標です。具体的な用途としては、テレビやラジオにおいて音量バランスの基準を数値的に定義し、音声データのうるささ(ラウドネス)を評価するときなどに使われています。REALITYの配信音量の定量評価にはぴったりの指標ですね。
ラウドネスを計測する指標は他にもありますが、今回は配信枠全体での人間の聴覚特性を考慮した配信音量を絶対値評価したいという目的があったので、これに合致するLUFSを選択しました。(LUFSに興味のある方はラウドネスメーターについての話やニコニコ動画におけるラウドネス調整の話が面白かったので是非読んでみてください!)
LUFSの解析にはオープンソースのエンコードツールであるFFmpegを使用しました。リファレンスより
ffmpeg -nostats -i [input_file] -filter_complex ebur128 -f null -
で音声ファイルのLUFSを解析してくれます。さっそくやっていきます。
まず、
1. 10分以上配信している
2. ゲームをプレイしていない
3. コラボ配信をしていない
4. 10月14日の配信(調査期間だったので
の配信音声のラウドネスを各OSで500件ずつ解析しました。OS別に500件ずつLUFSを解析すれば各OSの配信音量の傾向が見えるでしょう。
OS別の配信音声ラウドネスのヒストグラムは以下の通りです。(REALITY配信においては-20 dBあたりを聞きやすいラウドネスと設定しました)
なるほど、たしかにAndroidの方が配信音声のラウドネスが小さい(配信時音量が小さい)傾向にあることがヒストグラムから分かりました。また、iOSの配信は -35から-15 dB付近に寄っている一方で、Androidは -70から-35 dB の非常に音量が小さい範囲にも一定数配信が分布していることが確認できました。つまり、iOS配信は多くの配信が聞きやすい音量で配信されている一方で、Android配信では全体的に配信音量が小さめで、音量が小さく聞こえづらい配信も少なくない、ということです。
これはiOSのマイクが優秀なのか?それともiOSは自動で入力音声信号の音量を自動調整しているのか?といろいろ原因は推察できますが、とりあえずAndroidの配信時の音量はiOSに比較して小さい傾向にあることを確認できました。ピーク値で言うとだいたい10 dBくらい差がありますからね。結構違います。
3. 視聴音声の定量評価
次は配信音量ではなく、視聴時の音量計測について解説します。これは同じ配信を試聴した時の音量において、端末ごとに音量にどの程度の差があるのか、OS別に異なる音声出力特性が見られるか、を確認する目的で計測しました。そんなん、端末ごとにスピーカーも違うし、絶対音量は違うやんという感じがしますが、OS別の出力音声のラウドネス傾向に明らかな違いが見られれば両OSの視聴環境を揃える方向に改修する必要がありますので、調査は必要です。
視聴音声のラウドネス評価のために今回は、iOSを4端末、Androidを9端末用意しました。さらに、ラウドネスが大・中・小のサンプル配信音源を用意し、それらを任意のタイミングでREALITY開発環境に配信する仕組みを用意しました。今回は、それらの配信を各端末で視聴し、そのスピーカー出力のラウドネスを評価することで配信視聴時の出力音声のラウドネス評価としました。
計測には弊社サウンドルーム(防音室)を使用し、1端末ごとに上述の3配信を視聴し、配信のスピーカー出力を録音しました。スピーカー出力した音は外部マイクで録音し、これを2章と同様の手法で評価しました。当然、端末間の録音環境に差異が生じないように外部マイクとスマートフォンスピーカーの位置関係には注意し、スマートフォンは全端末音量MAXの状態でラウドネスを計測しました。
ちなみにサンプル音源は、ラウドネスが-17, -23, -33 dBの3つを用意しました。グラフは青い部分が長ければ長いほど音が小さいという認識で大体おっけーです。(それぞれお手本のラウドネスの配信音声、iOS、Androidで最も一般的なラウドネスの配信音声)
当然、サンプル音源をiOS、Androidで視聴した音源のLUFSのグラフは、上のサンプル音源のLUFSのグラフと、似た形になることが期待されますね。
結果は以下の通りです。
ん〜、Androidは概ね期待通りの概形のグラフが出力されましたが、iOSのグラフがおかしいなあ。何度もグラフが間違っていないか確認しました。iOSはaudio_02がaudio_01のラウドネスよりも大きく、どの配信も近いラウドネスでスピーカー出力されていますね。また、上には計測結果の代表例のみを掲載していますが、全体的にAndroidよりもiOSの方が音量が大きい傾向にあることを確認しました。iOSは音声出力時に音量を自動調整しているのか?
4. 考察
iOSでは配信・視聴共に何らかの工夫がなされていることが確認されました(OS標準)。冒頭で触れたAndroid配信の音が小さいのでは?という指摘は正確には誤りで、iOSには自動音量調節が入っているので、Androidも同じように音量の自動調整をすべきでは?というのが正しい表現だったというわけです。
以上、2章3章による計測により、AndroidアプリにもiOSと同様の配信音量バランス調整を入れるとREALITYがより素晴らしいアプリになることが確認できました。特に2章の計測では、配信音量をAndroidで全体的に10 dB程度上げ、音量が小さい配信に対してもなんらか補助してあげると幸せになれそうという具体的な対応方針までも見えました。
というわけでAndroid配信に音量バランス機能を入れていく。
5. Androidの配信音量バランス調整にAGCを導入
REALITYでは配信時のマイクのノイズ抑制をするためにspeexdspというライブラリを使用しているのですが、その中にAutomaticGainControlという「いい感じに音量を調整してくれる機能」が用意されていたので使用してみました。
AutomaticGainControlでは音声配信時の出力レベルが一定になるようにマイクからの入力音声を自動で調節してくれるとのこと。よし!さっそくアプリにぶち込むぞ!!!(チームのAndroidエンジニアの方が本当にいつの間にかアプリにぶち込んだ
というわけで自動配信音量調節を入れたアップデート後の配信サンプルでラウドネスを計測してみました。
Androidの配信が-20 dB付近に集中している。ん〜わかんね。なんか多分ミスったな。。。もっかい解析しなおします。。。
やっぱ合ってました!!!(公式放送の前日あたり
上のヒストグラムはAGC導入後のバージョン4.3.1のユーザの配信音声のラウドネスを100件解析したものです。-20 dBあたりに集中してるすげえ(-20 dBあたりが快適なラウドネスです)
しかし、その日のandoid配信はやたらノイズが大きかったり、環境音も増幅されており、配信が聞きやすい音量になりました!というよりは、全部の音を無理やり聞きやすい音量を目標に上げました!みたいな状態になっていたようです。なので改善したかと問われると、それは微妙だなという結果に。。。
6. 快適な配信環境を作っていくために
というわけで、Androidの配信音量調整は調整が入った2日後には完全にオフに設定されました。
ここからはNextActionとしてノイズフィルターを入れ、音量バランスも配信に問題ない範囲で慎重に上げていきます。楽器配信や歌配信などでREALITYを盛り上げてくれているユーザには迷惑をかけられない!と言うわけで、音量バランス改善班は、まだまだ終わりなき挑戦を続けていきます。
7. まとめ
今回の挑戦では、「Androidの配信、音小さいんじゃねー?」というふわっとした疑問を計測により数値で評価可能な課題に落とし込み、具体的な対応策の検討・実装まで行いました。完全に改善した!までは到達しなかったものの、これからの配信環境改善の指針が定まったと言う感じですね。
音量バランス問題は時間をかけて、丁寧に解決していきます。これからも継続的に音量バランス調整は続けていくから期待して待っていてくれーー!!!