電話での会話に関する音声ファイルがたくさんあります。音声ファイルを 2 つに分割して、それぞれに 1 人のスピーカーのスピーチのみが含まれるようにしたいと考えています。音声ダイアライゼーションを使用する必要があるかもしれません。しかし、どうすればそれができますか?誰かが私にいくつかの手がかりを与えることができますか? ありがとうございました。ps: Linux OS.C/C++
2 に答える
個々のスピーカーを分離することは非常に難しい問題ですが、一時停止がある場所でオーディオを自動的に分割できます。これにより、スピーカーが一時停止を交互に繰り返すことが多いため、管理が容易になる一連のファイルが生成されます。
このアプローチには、オープンソースのJulius音声認識デコーダーパッケージが必要です。これは、多くのLinuxパッケージリポジトリで利用できます。私はUbuntuマルチバースリポジトリを使用しています。
サイトは次のとおりです:http://julius.sourceforge.jp/en_index.php
ステップ0:Juliusをインストールします
sudo apt-get install julius
ステップ1:オーディオをセグメント化する
adintool -in file -out file -filename myRecording.wav -startid 0 -freq 44100 -lv 2048 -zc 30 -headmargin 600 -tailmargin 600
-startidは、ファイル名に追加される開始セグメント番号です。
-freqは、ソースオーディオファイルのサンプルレートです。
-lvは、音声検出がアクティブになるオーディオのレベルです。
-zcは、それを超えると音声検出がアクティブになるゼロ交差です。
-headmarginおよび-tailmarginは、各オーディオセグメントの前後の無音の量です。
-lvと-zcは特定のオーディオ録音の属性に合わせて調整する必要があり、-headmarginと-tailmarginは特定のスピーカーのスタイルに合わせて調整する必要があることに注意してください。しかし、上記の値は、過去の私の音声録音ではうまく機能しました。
ドキュメントは次のとおりです:http://julius.sourceforge.jp/juliusbook/en/adintool.html
私の経験では、圧縮と正規化を使用してオーディオを前処理すると、より良い結果が得られ、Julius引数の調整が少なくて済みます。これらの最初の手順が推奨されますが、必須ではありません。
このアプローチには、オープンソースのSoXオーディオツールキットパッケージが必要です。これは、多くのLinuxパッケージリポジトリでも利用できます。Ubuntuユニバースリポジトリを使用しています。
ここにサイトがあります:http ://sox.sourceforge.net
ステップ-2:SoXをインストールする
sudo apt-get install sox
ステップ-1:オーディオの前処理
sox myOriginalRecording.wav myRecording.wav gain -b -n -8 compand 0.2,0.6 4:-48,-32,-24 0 -64 0.2 gain -b -n -2
ゲイン-b-nは、オーディオのバランスを取り、特定のレベルに正規化します
compandは、パラメーターに基づいてオーディオを(この場合は)圧縮します
compandは、パラメータを完全に理解するのに時間がかかる場合があることに注意してください。しかし、上記の値は、過去の私の音声録音ではうまく機能しました。
ドキュメントは次のとおりです:http ://sox.sourceforge.net/sox.html
これでは各スピーカーの識別はできませんが、耳で行う作業が大幅に簡素化され、しばらくの間は唯一の選択肢になる可能性があります。しかし、それがすでに利用可能であるならば、あなたが実用的な解決策を見つけることを願っています。