waveファイルからノイズを減らす方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ママン

waveファイルからノイズを減らす方法について

#1

投稿記事 by ママン » 12年前

ママンです。その節はお世話になりました。
今度はMCIを使って音声を録音、再生するソフトにチャレンジしています。
MCIや音声に関する知識は殆どなく、勉強しながら作成しています。
現在、他の方が作ったサンプルプログラム等を参考に、以下の所まではできました。

マイクから入力 → wav形式で保存 → 再生

しかしファイルを再生してみると、「さーっ」というノイズが思った以上に大きく入っていました。
windowsのマイク設定をいじってもこのノイズはどうにもならなかったので、ソフトウェア上で解決したいと考えています。

私の感では、録音した音を一度全部小さくして、細かい音をデータ上から消してしまってから、元の大きさに戻せば
多少質は落ちてもノイズは減りそうな気がするのですが、それをどうやって実現するかがわかりません。

もしかすると私の考え方自体が間違っているかもしれないのですが、何卒ご教示の程お願いいたします。

環境 VC++2010 + DXライブラリ

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: waveファイルからノイズを減らす方法について

#2

投稿記事 by softya(ソフト屋) » 12年前

そのノイズは、ホワイトノイズと言いますがマイクとかPCの入力側の問題であり、S(サウンド)/N(ノイズ)比が悪い状態と言います。
これは、どう加工しても決して良い音にはなりません。原因を元から断つのが最善の策と言うのは理解しておいてください。

さて、ソフト的にホワイトノイズを消し去るのはどうすれば良いかですが結構難しいです。
理由はホワイトノイズが全周波数にわたって存在するために周波数でフィルタリングすることが困難だからです。
それと、音声処理は高度な数学的になるので知識的に難易度が高いというのも理由です。
場合によっては微分・積分とかも使いますが大丈夫ですか?
http://www.sc.kansai-u.ac.jp/STL/view_f ... xdm5xt.pdf
後、私も詳しくありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ママン

Re: waveファイルからノイズを減らす方法について

#3

投稿記事 by ママン » 12年前

さっそくのご回答ありがとうございます。

微分・積分ですか・・・・・・使うだろうとは思ってましたが、懐かしすぎて記憶の彼方です。

同じ環境でも、他の方が作成したレコーダーを使うとノイズが少ないので、素人心にちょっとしたテクニックで何とかなるのかなとなめてました。すみません。

今、添付していただいたpdfを読んでいますが、非常に興味深いです。

まずこちらを読んで、分からないところを調べながら勉強してみます。
(なんとなく画像処理で似たようなものを見かけた事があるような気もします・・・・・・)

ある程度知識を高めてから分からないところを再度質問させていただきたいと思いますので、その時は宜しくお願いします。

tlnlniri

Re: waveファイルからノイズを減らす方法について

#4

投稿記事 by tlnlniri » 12年前

既に解決されているのに書きこんでいいのかわかりませんが、ノイズサプレッサについて。
どこか間違っていたらすみません。

音声データ読み込み

ハニング窓を掛ける

FFT

振幅スペクトルと位相スペクトルを計算

振幅スペクトルから任意の数値(一定)を引く
(振幅スペクトルが負になったら0にする)

振幅スペクトルと位相スペクトルから実部・虚部を計算

IFFT

50%オーバーラップ

振幅 = sqrt(実部 * 実部 + 虚部 * 虚部);
位相 = atan2(虚部, 実部);
実部 = 振幅 * cos(位相);
虚部 = 振幅 * sin(位相);

閉鎖

“C言語何でも質問掲示板” へ戻る