オーディオクリップの音量を確認する


10

GetSpectrumDataAudioSourceから曲を再生するために使用するコードがあり、プレーヤーが再生するためのレベルレイアウトを作成します。プレイヤーが自分の曲をアップロードし、これらの曲のデータで作成されたレベルを再生できる機能を追加したいと思います。残念ながら、異なるオーディオファイルを比較すると、次のような問題が発生しました。

ここに画像の説明を入力してください

ご覧のように、振幅はクリップごとに大幅に異なり、その結果、作成するのが簡単またはほとんど不可能であるレベルが作成されます。この「ラウドネス」を決定する方法を見つけたいので、曲からデータを取得した後、トーンを下げるか、乗数で増幅できます。また、曲を再生せずにこのデータを抽出する方法はありますか?

回答:


9

そのための手動の方法は、AudioClip.GetDataを使用して配列のサンプルデータを取得することです。次に、データをループして二乗平均平方根を見つけますを見つけ、オーディオクリップの「ラウドネス」を見つけます。

次に、最大値が1.0fになるように配列全体をスケーリングし、AudioClip.SetDataを使用してオーディオクリップに書き戻すこともできます。これはオーディオの正規化と呼ばれます、、サンプルに最大音量に対する最大のポイントを持たせます。これは、オーディオクリップの音量が非常に小さいがピークが非常に高い場合は考慮されないことに注意してください。そのためのより高度なテクニックがあります(以下に記載)。

Unityもデフォルトで自動的に正規化を行っています。そのため、インポート設定に触れていない場合、この操作は自動的に行われるため、心配する必要はありません。オーディオが正規化されていることを確認しても問題が解決しない場合は、おそらくダイナミックレンジ圧縮でオーディオ圧縮する必要があります(注:データ圧縮とは非常に異なり、ファイルサイズやメモリ使用量とは関係ありません)。外部ソフトウェアでニーズに適合します。


素晴らしい答えです。これについて詳しく説明します。ありがとうございました!
園芸家2017年

5
最大値は(あなたが言ったように)常に最良のオプションであるとは限りません。非常に短い大きな音のスパイク(クリックのような音)は、連続的な音ほど大きくは聞こえません。知覚されるラウドネスが必要な場合は、すべての値を二乗し、それを平均してから、平方根を計算する必要があります。このようにすることは正規化が行うことなので、うまくいけばUnityが組み込まれています。
Jezzamon 2017年

2
ラウドネスは音響エネルギーに関連し、これを決定する方法は、@ Jezzamonが示唆するように、二乗平均平方根(RMS)を計算することです。dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac Crites
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.