HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1001
ヒロ音声レベル監視プログラムの作成3解決


ヒロ

リンク

2009/10/1(Thu) 20:35:49|NO.28092

現在、マイクで入力された音声レベルを監視して、
ある一定のレベルに達すると画像が入れ替わるようにして、
マイクから音声にあわせて顔の画像の口元がパクパクしゃべってるように
見えるツールを作成しています。

http://hsptv.sakura.ne.jp/play/pforum.php?mode=pastwch&num=19810

の下側に記載してあったスクリプトを参考に作成しています。
スクリプトを転載します。


#uselib "winmm.dll" #func waveInOpen "waveInOpen" sptr, sptr, sptr, sptr, sptr, sptr #func waveInPrepareHeader "waveInPrepareHeader" sptr, sptr, sptr #func waveInAddBuffer "waveInAddBuffer" sptr, sptr, sptr #func waveInStart "waveInStart" sptr #func waveInStop "waveInStop" sptr #func waveInUnprepareHeader "waveInUnprepareHeader" sptr, sptr, sptr #func waveInClose "waveInClose" sptr #define SAMPRATE 1000 oncmd gosub *OnWimData, $000003C0/*MM_WIM_DATA*/ onexit *ExitProc hWaveIn = 0 dim wfe, 5 wfe(0) = 1 + ($00000001/*WAVE_FORMAT_PCM*/<<16) wfe(1) = SAMPRATE wfe(2) = SAMPRATE wfe(3) = (1*8/8) + (8<<16) wfe(4) = 18 sdim bWave, 1 dim whdr, 8 whdr(0) = varptr(bWave) whdr(1) = 1 whdr(2) = 1 waveInOpen varptr(hWaveIn), $FFFFFFFF/*WAVE_MAPPER*/, varptr(wfe), hwnd, 0, $00010000/*CALLBACK_WINDOW*/ waveInPrepareHeader hWaveIn, varptr(whdr), 32 waveInAddBuffer hWaveIn, varptr(whdr), 32 waveInStart hWaveIn width 640, 300 i = 0 stop *OnWimData val = peek(bWave, 0) waveInAddBuffer hWaveIn, varptr(whdr), 32 redraw 0 if i\ginfo_winx=0 { color : boxf color 128, 128, 128 line 0, ginfo_winy/2, ginfo_winx, ginfo_winy/2 line 0, ginfo_winy/2-128, ginfo_winx, ginfo_winy/2-128 line 0, ginfo_winy/2+128, ginfo_winx, ginfo_winy/2+128 pos 0, ginfo_winy/2+(val-128) } color 0, 255, 0 : line i\ginfo_winx, ginfo_winy/2+(val-128) redraw 1 i ++ return *ExitProc waveInStop hWaveIn waveInClose hWaveIn WaveInUnprepareHeader hWaveIn, varptr(whdr), 32 end

これを用いて、動くところまでいけましたが、ステレオミックスにした場合、
バックに流れる曲等にも反応して動いてしまいます。
ステレオミックス時でもマイクの入力信号だけを監視したいのですが、
どこをどう変更したらいいのかわかりません。

お分かりの方がいらっしゃいましたら、教えていただけますでしょうか?



この記事に返信する


new monkey

リンク

2009/10/3(Sat) 16:14:54|NO.28128

> ステレオミックスにした場合、バックに流れる曲等にも反応して動いてしまいます。

これはそういう仕様になんだとおもいます。
録音コントロールをマイクに切り替えるしかないと思うのですが、
それができない理由があるんでしょうか?

今回はたまたま問題ないですが、WAVEFORMATEX構造体の設定が一部間違っていたので修正しておきます。
ごめんなさい。

#define SAMPRATE 1000 //サンプリングレート(変更可) #define BITSPERSAMP 8 //量子化ビット数(変更不可) #define NCHANNELS 1 //チャンネル数(変更不可) dim wfe, 5 wfe(0) = (NCHANNELS << 16) + $00000001/*WAVE_FORMAT_PCM*/ wfe(1) = SAMPRATE wfe(2) = SAMPRATE * NCHANNELS * BITSPERSAMP / 8 wfe(3) = (BITSPERSAMP << 16) + (NCHANNELS * BITSPERSAMP / 8) wfe(4) = 18



ヒロ

リンク

2009/10/3(Sat) 18:14:04|NO.28130

ありがとうございます。
デバイスを指定して音声レベルを監視するモジュールがあったので、それを使ってできました!!



ヒロ

リンク

2009/10/3(Sat) 23:49:35|NO.28134

ちなみに
hspwave.as
というモジュールを使用してできました。



ONION software Copyright 1997-2023(c) All rights reserved.