Windows C++で複数のwavファイルを連続再生する方法

このQ&Aのポイント
  • WindowsのC++プログラミングで、複数の音楽ファイルを連続して再生する方法を教えてください。
  • PlaySound関数を使用して音楽ファイルを再生することはできますが、連続再生する際に問題が発生しています。
  • 再生中の曲と次の曲の再生タイミングが重なってしまうため、1曲が完全に再生される前に次の曲が再生されてしまいます。どのようにすれば解決できるでしょうか?
回答を見る
  • ベストアンサー

wavの連続再生ってどうやるの?

WindowsでC++のプログラミングをやっています。 wavで3つの音楽ファイルを連続再生させたいのですがどうすればよいのでしょうか?? 1曲を1回再生なら PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL ); で、できたのですが、3曲連続で再生させようとしても PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL ); PlaySound("c:\\02.wav",NULL,SND_FILENAME | SND_ASYNC | NULL ); PlaySound("c:\\03.wav",NULL,SND_FILENAME | SND_ASYNC | NULL ); とすると03.wavだけが再生されてしまいます。 実際全部再生されているのでしょうけど前のが全部再生されないうちに次のが再生されてしまっているのだと思います。 01.wavが1曲全部再生してから02.wavを再生させるようにするにはどうすればよいのでしょうか。 どなたかよろしくお願いします><

  • dra2jp
  • お礼率27% (168/613)

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_SYNC| NULL ); PlaySound("c:\\02.wav",NULL,SND_FILENAME | SND_SYNC| NULL ); PlaySound("c:\\03.wav",NULL,SND_FILENAME | SND_SYNC| NULL ); ただしこの場合03.wavが鳴り止むまで 制御は返ってきません。 その間、他の事をしたいなら別スレッドをたててください。

dra2jp
質問者

補足

再生しながら処理を進めることはできないでしょうか。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

>> 再生しながら処理を進めることはできないでしょうか。 > その間、他の事をしたいなら別スレッドをたててください。 「CreateThread」で調べてください。 ここも参考になるでしょう。 http://www.kumei.ne.jp/c_lang/sdk/sdk_87.htm

関連するQ&A

  • 再生音声の音量を変更する関数を教えてください.

    みなさんこんにちは. 今,VisualStudio.Net2005を使って簡易な音声再生ソフトを作ろうと考えております. PlaySound( L"soundfilename.wav", NULL, (int)(SND_ASYNC | SND_FILENAME)); の関数で引数の音声ファイルを再生することまではできましたが,再生中の音声のボリュームを変更する方法が分かりません. どなたか,再生中の音声のボリュームを変更する方法や関数を知っているかたがいらっしゃたら教えていただきたく存じ上げます. 何卒よろしくお願いいたします.

  • PlaySoundでSND_SYNC(同期)させると途中で音楽が止まります、、

    現在、特定のフォルダにある音楽(.wav)ファイルを検索して、パスを受け取り、それを順々に再生する、簡単な音楽再生プレイヤーを作成しようと思っています。 そこで問題となっているのが、同期を取るSND_SYNCなのですが、通常なら音楽が終了するまで待機するはずなのですが、 http://social.msdn.microsoft.com/forums/ja-JP/vsgeneralja/thread/4795014f-c428-43f1-a6b8-2267f26cde81 こちらにもあるとおり、途中で止まり、次の曲が再生されます。 そしてその曲も途中で止まり・・が続きます。 ASYNCにすると最後まで再生されるのですが、一番最後の曲のみ再生になります。 一応、応急処置として、ASYNCを宣言し、_getch();にて一時待たせていますが、 どうにかならないものでしょうか、、。もしかしたら音楽ファイルのサイズの問題かもしれませんが・・。 とりあえず検索は正常動作しているので、playsoundを行う関数は、 void prays(char *fname) {    printf("%sを再生します。\n",fname);    char T[100];    sprintf(T,"wavfile\\%s",fname);    PlaySound(T, NULL, SND_FILENAME| SND_ASYNC |SND_NOSTOP );//    _getch();    return ; } 環境 OS:winXP コンパイラ=BCC55(PSDK) 言語=C(メイン)、C++、WIN32API 回答お願いします。。

  • 複数のWAVファイルの連続再生

    音楽CDをHDDにWAVファイルとして落としました。 このWAVファイルをダブルクリックすると、Windows Media Playerで再生されます。 複数のWAVファイルを連続再生するにはどうすればいいのでしょうか? 何か他のソフトが必要なのでしょうか? OSはWin98SEで、音楽関係の別ソフトはインストールしていません。

  • wavファイルを音楽CDで連続再生する設定について

    HDDに保存したmp3の音楽ファイルをwavファイルに変換して音楽CDに書き込みをしたのですが、これをCDプレーヤーで再生すると連続再生せずにトラック毎に1曲ずつしか再生しませんので、連続再生したいので、方法を教えていただけるとうれしいです。よろしくお願いいたします。

  • メモリに読み込んだ音源のPlaySoundによる再生

    HANDLE fh,fh2; DWORD dummy,dummy2; case WM_CREATE: fh=CreateFile(TEXT("F:\\shot.wav"),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); /* ファイルオープン */ fh2=CreateFile(TEXT("F:\\ENDING.WAV"),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); /* ファイルオープン */ /* バッファ確保 */ lpSound = GlobalAlloc(GPTR,GetFileSize(fh,NULL)); lpSound2 = GlobalAlloc(GPTR,GetFileSize(fh2,NULL)); ReadFile(fh ,lpSound ,GetFileSize(fh ,NULL),&dummy ,NULL); /* 読み込み */ ReadFile(fh2,lpSound2,GetFileSize(fh2,NULL),&dummy2,NULL); /* 読み込み */ CloseHandle(fh); CloseHandle(fh2); として音源をメモリに読み込み、その後イベント発生時にPlaySound関数で音源をならしているのですが、 PlaySound(lpSound,NULL,SND_ASYNC|SND_MEMORY); 一番最初のイベント発生時に音源読み込みに時間が掛かり即座に鳴りません。次のイベント発生時は同時に鳴るのですが.... 一番最初から同時に鳴らすにはどのようにしたら良いでしょうか? 根本的にPlaySound関数では良くないのでしょうか? 御指導の程よろしくお願いします。

  • wave音源の再生

    現在Microsoft visual c++でプログラミングをしています。 wavファイルの再生をしたいのですが、 PlaySoundという関数を使って一応、再生はできたのですが この関数だと同時に1つの音しか出ない様なのです。 プログラム中で1曲BGMの様に常に流しておいて、その所々で効果音 が鳴る様にしたいのですが。。。 ご教授お願いします。

  • excelで音声再生時に並行して別の操作をしたい

    下記のようなプログラムで音声再生をしていますが、再生が全部終了するまで別の操作ができません。再生と並行してスクロールなど別の操作もできるようにするにはどのように書き換えればよいでしょうか? Declare Function PlaySound Lib "Winmm.dll" Alias "PlaySoundA" _ (ByVal pszSound As String, _ ByVal hmod As Long, _ ByVal fdwSound As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Const SND_ASYNC = &H1& '再生後すぐに制御を戻す Public Const SND_SYNC = &H0& '再生が完了するまで制御を戻さない Sub C列再生() EN = Range("A65536").End(xlUp).Row For I = 2 To EN INF = ThisWorkbook.Path & "\ONSEI-n\" & Range("C" & I).Value & ".WAV" PlaySound INF, 0, SND_SYNC '再生が完了するまで制御を戻さない Sleep 1000 '1000mS待ち Next I End Sub Sub A列再生() EN = Range("A65536").End(xlUp).Row For I = 2 To EN INF = ThisWorkbook.Path & "\ONSEI\" & Range("A" & I).Value & ".WAV" PlaySound INF, 0, SND_SYNC '再生が完了するまで制御を戻さない Sleep 1000 '1000mS待ち Next I End Sub

  • C# wavファイルの再生について

    C#に関しての質問なのでこちらでいいのかわからないのですが、タイトル通りwavファイルの再生についてです。 環境は .NET2003 です。 現在、学校の卒業制作としてC#でゲームの開発を行っているのですが、音楽ファイルの再生の仕方で困っています。 検索してみたところ、playsoundを使用したループ再生には非同期とループを指定すればいい、とありましたが うまく動きませんでした。 そこでThreadを使用しsleepを使うことで擬似的にループ再生をさせているのですが、それだと都合の悪いことが多く別の方法を探しています。 お力になっていただける方がいれば、宜しくお願いします。 ↓は現在のソースから抜き出したものです。 [DllImport("winmm.dll")] private static extern bool PlaySound(string pszSound, int hmod, uint fdwSound); static void Main(){    Thread t1 = new Thread(new ThreadStart(play)); t1.Start(); Thread.Sleep(1000000000); } public static void play(){ PlaySound("daichi.wav", 0, 0x00001 | 0x00008 ); }

  • windows API  「mciSendString」 の連続再生について

    VISUAL BASIC 6.0 で音楽再生ソフトを作ろうとしました。 windows API の「mciSendString」を使って、 例1のようにすると b.wav の音楽しか再生されません。 そこで、例2のようにすると、a.wav と b.wav が再生されましたが、 曲の途中では、"pause" と "resume" の命令が効きません。 連続再生ができて、曲の途中でも "pause" や "resume" の命令が効く方法を知りたいのですが、ご指導をお願いします。 <例1> Call mciSendString("open c:\a.wav ", "", 0, 0) Call mciSendString("play c:\a.wav ", "", 0, 0) Call mciSendString("close c:\a.wav ", "", 0, 0) Call mciSendString("open c:\b.wav ", "", 0, 0) Call mciSendString("play c:\b.wav ", "", 0, 0) Call mciSendString("close c:\b.wav ", "", 0, 0) <例2> Call mciSendString("open c:\a.wav ", "", 0, 0) Call mciSendString("play c:\a.wav wait ", "", 0, 0) Call mciSendString("close c:\a.wav ", "", 0, 0) Call mciSendString("open c:\b.wav ", "", 0, 0) Call mciSendString("play c:\b.wav wait ", "", 0, 0) Call mciSendString("close c:\b.wav ", "", 0, 0)

  • C?DOS? プログラミングでwav,midiを鳴らしたいのですが

    初投稿させていただきます。 現在大学にてC言語をプログラミング中で、明日発表が控えているのですが、wavやmidiを再生する方法がわかりません。 WINDOWSでは #include <mmsystem.h> //何処かイベントなどで sndPlaySound("ファイル名", SND_SYNC); という方法で鳴らせるらしいのですが、鳴りません。 同室にいる詳しい学生に見てもらったところ、コンパイラがウィンドウズ上で立ち上がっているけれども、実際はDOSで動作しているからこのやり方ではできなくてわからない、とのことでした。 この意味も私にはよくわからないのですが。 この環境で、「プログラミング上で、入力があったときに音声ファイルを鳴らす方法・関数?」をどなたかご教授下さい。 環境 ■OS WINDOWS98 ■コンパイラ TC  ターボシーと教官が言っていた。ショートカットはMSDOSのロゴ。 ■上のやり方でコンパイルしたときのエラー  Unable to open include file 'MMSYSTEM.H' Undefined symbol 'SND_ASYNC' in function print_data

専門家に質問してみよう