掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
音のリミッター機能を作るには? (ID:53147)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず・・・ WaveOutSetVolume()関数やWaveOutGetVolume()関数を使った場合 ハードウェアによっては、雑音が入る場合があります。また、サ ポートしていないハードウェアもある場合があることを言い置い て・・・ 今回必要な機能としては、リアルタイムに変化する入力音源の レベルを何らかの数値フィルタでレベルを検出しつつ、結果、 ボリュームをリアルタイムに可変させて、出力を調整するとい う機能になりますネ! では、リアルタイムに出力としての音量を可変させられるか? と言う部分で、入力される音源の速度(サンプルレート)に対 し、そこまで高速にボリューム変化(応答性)を行って結果が 得られるかどうか・・・疑問です。 わざわざ数値フィルタでレベル検知をするのですから、もう 一歩踏み込んで、ソフトウェアアンプを作り、音量はそのま まで、出力を可変させるような仕組みの方が、具合がいいと 思います。 あと、WAVEデータ(RIFF)の中身はちゃんとご存知 ですか? それが解っていれば、ボリュームの可変と、WAVEデータ のみでの出力可変は、どちらでも可能かと思います。 データサブチャンクには、実際にサンプリングされた生の値 が入っていますので、試しにその値を半分にしてみるとかし て、聞き比べて下さい。ボリューム可変より楽に調整が可能 かと思います。 レベルの検出では、サンプリングレートによりますが、WAVE のサブチャンク中の生データの総和がレベルに相当します。 周波数成分をスペクトル解析で求めるのも手ですが・・・ FFT・逆FFTと言う方法です。 ですが、リアルタイム性にかけるので、オススメしません。 録音バッファにある程度の容量を持たせれば、それも可能か とは思いますが・・・ ただし、サンプリングレートやモノラル・ステレオ等のパラ メータはいじらないように・・・間違うとスピーカを壊すだ けではなくて、サウンドカードも壊してしまうことになりま すから・・・ ご検討下さい。 ※ WAVEファイルをエディットできるツールは別に持って おられますか?あれば、非常に便利です。 出力特性やレベルをいじって、別名で保存し、WAVE ファイルをバイナリエディタで見比べれば、その差として どこが変化したのか、歴然です。聞き比べれば尚、よく、 解りますので・・・ ● 言うは易し・・・行うは難し・・・です。 C言語で行う場合、かなりのコードをかかないと到達でき ないと思います。 掲載されていたホームページですが・・・ WaveOSC WaveSono この2ツを組み合わせれば、今欲しい機能の大半はできて しまいます。そういう意味では、コードを書く手間は無く なりますので、その2ツのソースも解析され、理解される ことをオススメします。 以上。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.