ママンです。その節はお世話になりました。
今度はMCIを使って音声を録音、再生するソフトにチャレンジしています。
MCIや音声に関する知識は殆どなく、勉強しながら作成しています。
現在、他の方が作ったサンプルプログラム等を参考に、以下の所まではできました。
マイクから入力 → wav形式で保存 → 再生
しかしファイルを再生してみると、「さーっ」というノイズが思った以上に大きく入っていました。
windowsのマイク設定をいじってもこのノイズはどうにもならなかったので、ソフトウェア上で解決したいと考えています。
私の感では、録音した音を一度全部小さくして、細かい音をデータ上から消してしまってから、元の大きさに戻せば
多少質は落ちてもノイズは減りそうな気がするのですが、それをどうやって実現するかがわかりません。
もしかすると私の考え方自体が間違っているかもしれないのですが、何卒ご教示の程お願いいたします。
環境 VC++2010 + DXライブラリ
waveファイルからノイズを減らす方法について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: waveファイルからノイズを減らす方法について
そのノイズは、ホワイトノイズと言いますがマイクとかPCの入力側の問題であり、S(サウンド)/N(ノイズ)比が悪い状態と言います。
これは、どう加工しても決して良い音にはなりません。原因を元から断つのが最善の策と言うのは理解しておいてください。
さて、ソフト的にホワイトノイズを消し去るのはどうすれば良いかですが結構難しいです。
理由はホワイトノイズが全周波数にわたって存在するために周波数でフィルタリングすることが困難だからです。
それと、音声処理は高度な数学的になるので知識的に難易度が高いというのも理由です。
場合によっては微分・積分とかも使いますが大丈夫ですか?
http://www.sc.kansai-u.ac.jp/STL/view_f ... xdm5xt.pdf
後、私も詳しくありません。
これは、どう加工しても決して良い音にはなりません。原因を元から断つのが最善の策と言うのは理解しておいてください。
さて、ソフト的にホワイトノイズを消し去るのはどうすれば良いかですが結構難しいです。
理由はホワイトノイズが全周波数にわたって存在するために周波数でフィルタリングすることが困難だからです。
それと、音声処理は高度な数学的になるので知識的に難易度が高いというのも理由です。
場合によっては微分・積分とかも使いますが大丈夫ですか?
http://www.sc.kansai-u.ac.jp/STL/view_f ... xdm5xt.pdf
後、私も詳しくありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: waveファイルからノイズを減らす方法について
さっそくのご回答ありがとうございます。
微分・積分ですか・・・・・・使うだろうとは思ってましたが、懐かしすぎて記憶の彼方です。
同じ環境でも、他の方が作成したレコーダーを使うとノイズが少ないので、素人心にちょっとしたテクニックで何とかなるのかなとなめてました。すみません。
今、添付していただいたpdfを読んでいますが、非常に興味深いです。
まずこちらを読んで、分からないところを調べながら勉強してみます。
(なんとなく画像処理で似たようなものを見かけた事があるような気もします・・・・・・)
ある程度知識を高めてから分からないところを再度質問させていただきたいと思いますので、その時は宜しくお願いします。
微分・積分ですか・・・・・・使うだろうとは思ってましたが、懐かしすぎて記憶の彼方です。
同じ環境でも、他の方が作成したレコーダーを使うとノイズが少ないので、素人心にちょっとしたテクニックで何とかなるのかなとなめてました。すみません。
今、添付していただいたpdfを読んでいますが、非常に興味深いです。
まずこちらを読んで、分からないところを調べながら勉強してみます。
(なんとなく画像処理で似たようなものを見かけた事があるような気もします・・・・・・)
ある程度知識を高めてから分からないところを再度質問させていただきたいと思いますので、その時は宜しくお願いします。
Re: waveファイルからノイズを減らす方法について
既に解決されているのに書きこんでいいのかわかりませんが、ノイズサプレッサについて。
どこか間違っていたらすみません。
音声データ読み込み
↓
ハニング窓を掛ける
↓
FFT
↓
振幅スペクトルと位相スペクトルを計算
↓
振幅スペクトルから任意の数値(一定)を引く
(振幅スペクトルが負になったら0にする)
↓
振幅スペクトルと位相スペクトルから実部・虚部を計算
↓
IFFT
↓
50%オーバーラップ
振幅 = sqrt(実部 * 実部 + 虚部 * 虚部);
位相 = atan2(虚部, 実部);
実部 = 振幅 * cos(位相);
虚部 = 振幅 * sin(位相);
どこか間違っていたらすみません。
音声データ読み込み
↓
ハニング窓を掛ける
↓
FFT
↓
振幅スペクトルと位相スペクトルを計算
↓
振幅スペクトルから任意の数値(一定)を引く
(振幅スペクトルが負になったら0にする)
↓
振幅スペクトルと位相スペクトルから実部・虚部を計算
↓
IFFT
↓
50%オーバーラップ
振幅 = sqrt(実部 * 実部 + 虚部 * 虚部);
位相 = atan2(虚部, 実部);
実部 = 振幅 * cos(位相);
虚部 = 振幅 * sin(位相);