※ ChatGPTを利用し、要約された質問です(原文:waveIn、waveOut系プログラミングについて)
waveIn、waveOut系プログラミングについて
このQ&Aのポイント
waveInとwaveOut系のプログラミングについて、メッセージ処理のタイミングや関数の関係について説明してください。
win32APIを用いた録音再生プログラムの作成中に、waveIn系とwaveOut系の関数の挙動とメッセージの関係を理解できていないので、教えてください。
具体的には、waveInPrepareやwaveInAddBufferなどの関数がどのタイミングで行われるべきか、録音前に準備する必要性などが気になっています。また、MMSYSERR_~というエラーメッセージの調べ方も教えていただけると助かります。
waveIn、waveOut系プログラミングについて
立て続けに投稿させて頂いております。
【要点】
メッセージ処理のタイミングについて。
現在win32APIを用いた録音再生をするプログラムを作成中です。最終目的はPCが音声をスピーカーから出力し、それを再度PCに録音するというものです。
waveIn系、waveOut系の関数を用いたプログラムについて様々なホームページを参考にさせて
頂いたのですがホームページごとに関数とメッセージの関係が異なっていた為、挙動をしっかりと
理解する為教えて頂きたいです。
例えば最初にGUI上の録音ボタンを押したときに
waveInOpen→waveInPrepare→waveInAddBuffer→waveInStart
と行っているのですが
私の認識ではwaveInPrepareはMM_WIM_OPENメッセージを受け取ってから行うものだと考えていたのですが
あるホームページではMM_WIM_OPENに対する処理が記述されていない、つまりcase MM_WIM_OPENがないサンプルソース
もあり、メッセージを処理するタイミングがわからなくなってしまいました。
1: waveInOpenによりMM_WIM_OPENが発行されるとしたら発行されたかわからないタイミングでwaveInPrepareはやるべきでないと思ったのです。
2: その他waveInAddはどのタイミングで行うのか、等もアドバイスいただけると助かります。
3: 私が見た限りのソースでは録音ボタンを押すとWAVEHDR、HWAVEINを行っているのですが
などの準備を行っているのですが、録音前に準備しておけばタイムラグがないのに、、と考えるのですが何か意図が
あるのでしょうか。
4:MMSYSERR_~というエラーをwave系関数は出すようなのですがそれについて調べたいのですがMSDN等で調べられるのでしょうか(私が調べた限りなさそうでした)
質問が多くて申し訳ないのですが極力自分で調べたので
よろしくお願いいたします。具体的な回答でなくとも
調べるヒントなどいただければ幸いです。
お礼
ありがとうございます。 メッセージのタイミングについて教えて頂けたのは本当に助かりました。 MSDNについても調べ方のコツがわかってきたのでこのアドバイスを元に作成していこうと思います。 (検索は.comでないと駄目&関数のみ検索も不可なんですね。) なお、この質問投稿は今日1日待ってから締め切りたいと思います。 丁寧なご回答ありがとうございました。
補足
補足というより追加質問なのですが メッセージを通るポイントに応じてVCのデバッグを使って値を見たのですが WAVEHDRのメンバのdwFlagsの値が18や3、1等の値をとていました。 フラグに使われる値のWHDR_BEGINLOOPが実際にどんな値か調べる為に printf("%d",WHDR_BEGINLOOP)というように、値を調べたところ、 WHDR_BEGINLOOP 4 WHDR_DONE 1 WHDR_ENDLOOP 8 WHDR_INQUEUE 16 WHDR_PREPARED 2 でした。 デバッグ中に現れた18,3にあたる数字はこの5つの中にないのですが どのような可能性が考えられるのでしょうか。 ちなみにwaveInOpenをした時が18,waveInDoneで3といった感じでした。ご意見お願いいたします。