Cでも可能ですか[一般的に可能だと思います-GOMプレーヤーがそれを行います]?始めさせてください...あなたは何と言いますか?
他の音と区別される人間の声をどの程度正確に識別しますか?
mp3プレーヤーのフィルターは通常、ステレオレコーディングスタジオの音声ソース(パフォーマー)が中央に配置されているという事実に依存しています。したがって、チャネル間の差を計算するだけです。演奏者が失敗するように配置されていない録音を彼らに与えると、声は抽出されません。
信頼できる方法は、音声検出器を採用することです。これは非常に複雑な問題であり、ハードコアな数学と特定のタスクのアルゴリズムの徹底的な調整が含まれます。このようにすると、音声コーディング(ボコーダー)を読むことから始めます。
この正確なトピックはここで議論されました。それはオーディオコーディング技術の議論として始まりましたが、上のリンクされたページで誰かが言った
つまり、ステオロ信号から音声を抽出する方法がないということですか?
しかし、声を引き出すことは、声を取り除くことほど難しいことではないということが指摘されました。
さらに読みましょうが、抽出を成功させるには、楽器に比べて音声のスペクトル分布が比較的狭いことに依存しているのではないかと思います。
原則として、1つのトラックにミックスされた異なるサウンドを完全に分離することはできないことに注意してください。クリームをコーヒーに混ぜるようなものです。混ぜた後は、クリームとコーヒーを完全に分離することはできません。
許容できる結果を得るためのスマートな信号処理のトリックがあるかもしれませんが、一般的に、音楽から音声を完全に分離することは不可能です。
人間の声を他の音から分離することは、平均的な偉業ではありません。他のサウンドを録音している場合は、バックグラウンドサウンドをキャンセルして、人間の声を残すことができます。
バックグラウンドノイズがある種のランダムノイズである場合は、何らかの形式のスペクトルフィルタリングを使用することで効果が得られます。しかし、それは単純ではなく、良い結果を得るにはかなりの遊びが必要です。Adobe Auditionには、私が信じている適応スペクトルフィルターがあります...
記録された帯域全体にわたってかなり均一な周波数分布を持つホワイトノイズがあると仮定します(44Khzの非圧縮記録では、0〜22Khzについて話します)。次に、それに声を追加します。明らかに、音声はノイズと同じ周波数を使用しています。人間の声の範囲は〜300Hz〜〜3400Hzです。明らかに、オーディオをバンドパスすると、300〜3400Hzの音声範囲のみに削減されます。それで?あなたには声があり、そしてあなたは今やバンドパスされたホワイトノイズを持っています。どういうわけか、あなたはそのノイズを取り除き、声をそのままにしておくことができる必要があります。さまざまなフィルタリングスキームがありますが、すべてがその過程で音声を損傷します。
頑張ってください、それは本当に単純ではありません!
ここで、bufにはpcmwav44100サンプルレート入力データがあります
int voiceremoval(char * buf、int bytes、int bps、int nch) {{ short int * samples =(short int *)buf; int numsamples = 0; int x = 0; numsamples=バイト/2; x = numsamples; if(bps == 16) {{ 短い*a=サンプル; if(nch == 2) while(x--) {{ int l、r; l = a [1]-a [0]; r = a [0]-a [1];
if (l < -32768)
l = -32768;
if (l > 32767)
l = 32767; if(r 32767) r = 32767; a [0] = -l; a [1] = r; a + = 2; } } 0を返します。 }
独立成分分析(ICA)を検索する