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)
No.4ベストアンサー
- 回答日時:
> 具体的にイベント取得関数とはどのようなものでしょうか。
MCI へ Notify オプション付きのコマンドを渡して、コールバックされた終了
メッセージを受け取る...ということです。それしかないと思いますよ。
#2 の参考 URL にこのことが書いてあります。MCI を使った例でコールバック
のサンプルプロシージャも同サイトに記事がありますし...
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/98 …
とりあえず、読んでみましょうよ。
ただ、#3 の方もコメントされてますが、VB ではサブクラス化という特殊な
技法が必要です。うっかりデバッグモードでプログラムを停止したりすると
OS ごとフリーズしますので、難易度は非常に高いです。
丁寧な回答有り難うございます。
Notify オプション付きのコマンドを用いて、Doneイベントで対処したらうまくいきました。
又、timerコントロール内で演奏残時間が0になったら、次の曲へ移るSubプロシージャを呼ぶ出すプログラムを当初作っていてうまく動作しませんでしたが、再度チェックしたら、間違い箇所が見つかり、このプログラムもうまく動くようになりました。
色々お騒がせをし申し訳ありませんでした。
No.3
- 回答日時:
すでにANo.2の方がとても参考になるURLを示されているので、意味なくなったんですが(笑)
基本的に、mciは GDIコントロールとして存在するので、VBからは限界があるのです。
おそらく、曲が終わったら次の曲へ。。としたいのだと思いますが、
これがCDのようにトラックになっている場合ならVBだけでできるんですが、
質問されているような、自作のwave形式のファイルの羅列のような場合は、
getYield/setYieldでイベント取得関数を作って、曲の終了を受け取って
次の曲へ移動するような仕組みが必要です。
でも、VBでは受け取る関数(コールバック)を作るのは、そうとう難易度高いと思います。
ANo.2さんの示されたURLからたどれば、可能な方法にたどりつけるようですので、がんばってみられてもよいかとおもいます。
1)[Timer]コントロールを用いて、 [mcisendstring]の”status”コマンドで、曲終了時の「STOPPED」という戻り値が来たら(又は残演奏時間が0になった時)次の曲に行くようにプログラムを既に組んでいました。2曲目が長い曲であれば、次の曲がPlayできるのですが、2曲目が1曲目より演奏時間が短いと、次の曲がplayできずに、ストップされたままでした。なぜかよくわからず、今回の質問に至りました。曲の演奏時間の長短でPlayできない理由がよくわかりません。
2)「getYield/setYieldでイベント取得関数を作って、曲の終了を受け取って次の曲へ移動するような仕組みが必要です。」とありますが、具体的にイベント取得関数とはどのようなものでしょうか。 [mcisendstring]の”status”コマンドでよろしいのでしょうか。
No.2
- 回答日時:
この記事も参考になりますよ。
・[VB Magazine ライブラリ]
マルチメディア自由自在! 高レベルMCIを使う
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/98 …
参考URL:http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/98 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(パソコン・周辺機器) Windows10パソコンで再生している音をWAVファイルとして録音、保存する方法は? 4 2023/06/15 18:34
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- スピーカー・コンポ・ステレオ 高音質でCDに書き込みしたいです。 11 2022/04/05 14:45
- その他(AV機器・カメラ) FireTVstickで音楽ファイルが表示されません 1 2023/04/27 20:17
- YouTube YOU Tube の録画と録音 6 2023/05/06 14:09
- スピーカー・コンポ・ステレオ You Tube音楽mp4から、音源だけ(大容量)WAV 変換しても本質mp3より高音質になるのか? 6 2022/11/29 17:39
- ジャズ この曲を教えてください。映画の中で流れていました。 オリジナルサウンドトラックはない昔の映画です、 1 2023/06/30 12:50
- その他(AV機器・カメラ) AmazonミューシックHDのハイレゾ曲をflac拡張子で、SDカードに保存したいのですが? 1 2022/09/16 13:23
- その他(音楽・ダンス・舞台芸能) CDが200枚ほどあります。そろそろデジタル化して処分しようと思ってるのですが、 2 2023/08/17 08:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトでリネーム
-
windows API 「mciSendString...
-
CDDBとはMP3からでも情報は取れ...
-
wmaファイルのタグ情報をコピー...
-
音楽CDをusbメモリーに録音する...
-
らくらくスマートフォンに音楽...
-
USBから
-
iPhoneのGoogleドライブで、音...
-
PSvitaがパソコンに接続できま...
-
AT3からmp3へ変換する方法
-
ダウンロードした曲をCDに焼...
-
パソコンでファイルのコピーを...
-
パソコンから突然音楽のような...
-
初心者がボカロ曲を作れるよう...
-
MP3の順番は何で決まるので...
-
軽油、特A重油の経年劣化について
-
CDの最後の1曲だけが取り込め...
-
音楽CD→CD-Rにコピーを繰り返し...
-
会社のPCで私用
-
音楽情報ファイルであるcdaファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトでリネーム
-
windows API 「mciSendString...
-
Media Playerの音楽情報の変更...
-
XPの初期設定の時のBGMはどこに...
-
foobar2000でWAVだけが変。
-
ID3タグについて(バージョンは...
-
wmaファイルのタグ情報をコピー...
-
Quintessential Media Player 1...
-
録音した音源の編集について
-
CDDBとはMP3からでも情報は取れ...
-
WAV(1536)について
-
Foobarでリッピングファイルが...
-
サウンドエンジンでwavが読み込...
-
SuperTagEditor(改)の使い方
-
SACDに収録されているDSDデータ...
-
mp3Tagというフリーソフト
-
wavついて
-
音楽CDをusbメモリーに録音する...
-
国税庁「確定申告作成コーナー...
-
らくらくスマートフォンに音楽...
おすすめ情報