掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
無音時間を計測するには? (ID:120590)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>正弦波の最大値・・・これはD/A変換後の最大値と捉えればよろしいですか? 8ビットサンプルの場合、データーは正値は0000001〜01111111までの値すなわち 0〜127までの値を、負値は11111111〜10000000つまり255〜128までの値を取ります。 (負値の場合は値が大きくなる程音は小さくなることに注意します。) 00000000は無音です、つまり00000000がデーターとして連続した部分を無音と 判断すれば良いように思われますが、実はマイク入力には雑音が必ず入ります、 雑音と信号を区別する境界線を設ける必要があります。(スレッシュホールド値) この値を正弦波の最大値から換算することが一般的には必要となります。 正弦波の最大値は音源の音量とマイクボリュームの位置によって変わります。 スレッシュホールド値を厳密に定める必要があるのは、一般的に波形切れの検出が 1/2波長以下の場合で、この質問の様に何波長もの波形切れの検出には、 便宜的に『10以上の値がデーターのある状態』と決めしまっても良いでしょう。 このスレッシュホールド値はプログラム上で可変できる様にしておきます。 又負値(255〜128)は無視して波形が『検波』された状態として判断すれば良いでしょう。 1波長分のデーターは11025/1000=11となり100波長分のデーターは1100となります。 ファイルからデーターを1バイトずつ読んで、1100バイト の中に11〜127までのデーターが無い場合を、波形切れと判断すればいいことに なります。 データーは取りあえず、バイナリーアクセスで1バイトずつ読みましょう。 WAVファイルの頭には通常RIFFチャンクという52バイトのフォーマットデーターが 付いています、この部分は読み飛ばしましょう。 オンザフライ(入力と同時進行)で行う場合は、多分データーは割り込みで入って 来るのでしょうから、メインルーチンでLoopを回しAPIのTimeGetTimeを使って 11〜127のデーターの入って間隔を測り100msec以内の間に11〜127のデーターが 入らなかったら、波形切れと判断しても良いでしょう、この処理には殆ど時間は かかりません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.