今、地図や音声で案内板を作ろうとしているのですが、
タイトルにもあるとおり音声ファイルを再生するとフリーズしてしまいます。
音声の再生にはmciSendString、sndPlaySoundを使用したのですが、両方フリーズします。
具体的に言うと・・・
実行して音声を再生すると案内板が応答しなくなります。ただその際音は流れます。TRACEを入れてdebugしてたところ、どうやらmciSendStringを組み込んだ関数内の処理は終えてました(その関数内から呼び出した関数の処理も終えてました)。
その関数の処理を終えると次の処理に移らずに画面もフリーズしてしまいます。
使用した音声ファイルの大きさは2kBです。
開発環境はVistaでVC++.net 2003を使っています。
なにか気になる点でもいいので宜しくお願いします。
No.1ベストアンサー
- 回答日時:
フリーズの殆どの原因は「割り込み処理中の不正な処理」です。
割り込み処理中は、自分より優先度の低い他の割り込みを禁止するので、優先度が高い割り込み処理が不正な処理を行って停止してしまうと、殆どの割り込みが入らなくなります。
殆どの割り込みが入らなければ、マウスカーソルも動かないし、画面も描画されなくなります。つまり「フリーズする」のです。
さて、質問者さんのプログラムで「割り込みが起きる」としたら「再生終了後」です。
音声再生をしていると、再生の終了は、非同期に突然に発生します。
つまり「再生終了割り込みが発生して、再生終了通知のコールバックが行われる」と言う事です。
ここで、質問者さんのプログラムが「コールバックを正しく処理していない」とすると、再生終了割り込みが発生した瞬間、プログラムが動作不安定になり、最悪、PCがフリーズします。
なので「mciSendString、sndPlaySoundを呼んだ関数をいくら追跡しても、何も判らない」でしょう。
コールバックルーチンが正しい処理をしているか、または、mciSendString、sndPlaySoundのコールバック指定の引数に適切な値を指定しているか、確認してみましょう。
お礼が遅れ、そのうえ質問表現が不適切であり申し訳ありません。
正しくは「フリーズ」ではなく例えばウィンドウをドラッグできないなどメインスレッド?が応答しなくなります。
ただ別スレッドに記述したプログラムは引き続き処理できていました。
コールバックは最初は指定していない(NULL)だったのですが、ダイアログに返すように設定しても変わらなく
AfxBeginThreadを使って音声再生を別スレッドに記述したのですが、それでも変わらず、色々調べていくうちにデッドロックが起こっているかもしれないと思って改善中な段階です。
何か思い当たる点はありませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 YouTubeを録音できるソフトを教えてください。 5 2023/02/12 10:19
- iPod・ウォークマン・音楽プレーヤー itunes 音楽再生時の音飛び 4 2022/11/30 17:24
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- Windows 10 windows付属のボイスレコーダー。雑音が入らないように録音するには? 1 2022/05/16 22:39
- スピーカー・コンポ・ステレオ 動画再生も可能なファイル管理のできる音楽再生ソフトはありますか。 2 2022/09/24 19:34
- その他(AV機器・カメラ) 動画音声の「一部」がモノラルオーディオだと再生できない 2 2022/11/26 20:18
- ノートパソコン ステレオミキサーが反応しない 1 2023/06/20 23:16
- ビデオカメラ BDの動画より音楽のみをpcへ取り込む方法 5 2022/09/18 13:17
- 防犯カメラ・監視カメラ・小型カメラ VHSを高画質な動画ファイルにしたいです。 3 2022/05/06 12:08
- CPU・メモリ・マザーボード BIOS画面で固まる(メーカーロゴの画面) 4 2022/08/03 17:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
H8マイコンで割り込みが任意の...
-
スーパーのレジで並んでいたら...
-
AKI-H8/3048Fでのタイマ割り込み
-
定周期での割り込み
-
Amazonfireタブレットにわから...
-
irqbalance って
-
ショッピング
-
優先度順方式とプリエンプショ...
-
PICのSleepからの復帰に関して
-
マイコン C言語 割り込み処理...
-
緯度、経度の 10進法と 60進法...
-
Macターミナルで実行中のプログ...
-
C言語で、メモリを解放しないで...
-
バックグラウンドのプロセスの...
-
メッセージBOXの「はい」「いい...
-
エクセル VBA でのCOMポート...
-
DoEvents関数って何?
-
C言語における再帰呼び出しの...
-
シェル(perl)が使用するメモリ...
-
explorer.exeが異様にメモリを食う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ショッピング
-
スーパーのレジで並んでいたら...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
Amazonfireタブレットにわから...
-
CPUの処理量を減らすコーデ...
-
irqbalance って
-
一定時間操作がなかったら、と...
-
CPU負荷率の安全な上限と計...
-
(H8マイコン)タイマ割込で変更...
-
駅のトイレでナイチンに邪魔さ...
-
電車で待機列の割り込みについ...
-
VB6でSendKeyを利用したTab移動...
-
アセンブラのタイマー割り込み
-
USJでの割り込み
-
PICのPIN変化割り込みに...
-
H8マイコンで割り込みが任意の...
-
PIC16F84AのRBポート変化割り込...
-
優先度順方式とプリエンプショ...
-
AKI-H8/3048Fでのタイマ割り込み
おすすめ情報