HSP3プログラミング入門講座
powered by Let's HSP!
HSPからサウンド(音楽ファイル)の再生
ONION softwareさんが製作する無料のプログラミングツール『HSP』(Hot Soup Processor)で、サウンド(音楽BGM、効果音など)を再生する一般的な手段は大きく3つあります。
- mmload命令、mmplay命令、mmstop命令
(HSP2の場合はsndload命令、snd命令、sndoff命令になりますが、ここでは取り上げません。) - mci命令
- HSP拡張プラグイン・汎用ライブラリ (DirectX)
[1] mm〜系命令 (標準命令)
HSPの標準命令で、一番手軽で単純なものです。純粋に音楽ファイルを読み込んで(mmload命令)、
再生(mmplay命令)し、停止(mmstop命令)する、の3段階の処理のみ実現できます。これ以外の機能はありません。
対応フォーマットは、WAVEファイル(*.wav)、MP3ファイル(*.mp3)、MIDIファイル(*.mid)、
WMAファイル(*.wma)です。内部では「Media Control Interface」(MCI)に放り投げてます。同形式の
同時再生は基本的にできません。
// [HSP3] mmload、mmplay、mmstopのサンプル ; ボタン button "PLAY", *sound_play button "STOP", *sound_stop stop *sound_play ; ファイル読み込みダイアログ dialog "wav;*.mp3;*.mid;*.wma", 16, "音楽ファイル" if stat = 0 : stop mes "ファイルパス: "+refstr ; 音楽ファイルの読み込み mmload refstr, 0 ; 音楽ファイルの再生 mmplay 0 stop *sound_stop ; 音楽ファイルの再生停止 mmstop 0 stop
HSPのPACKFILE機能を利用して、実行ファイル内に埋め込んだ音楽 ファイルを直で利用できますが、これは唯一WAVEファイルだけです。これ以外のMP3ファイルやMIDI ファイルなどは、ハードディスク上にファイルとして存在するものしか読み込めないので注意してください。
なお、再生する音楽ファイルというのがあらかじめ特定されてる場合は、スクリプトの最初でファイルを あらかじめ読み込ん(mmload命令)でおき、実際に再生したい時点ではmmplay命令のみ行うような処理 にしましょう。まったく同じ音楽ファイルを何回にも渡ってmmload命令するのは、ものすごいムダです。
[2] mci命令 (標準命令)
Windowsの「Media Control Interface」(MCI)を利用した音楽ファイルの再生です。
これはmm〜系命令と違って、音楽ファイルの再生&停止以外にも様々な処理(再生位置、音量など)をある程度実現できるように
なってます。「MCI」に対してコマンド文字列を送信して制御します。同形式の同時再生は基本的にできません。
コマンドの公式ドキュメントは、MicrosoftのMSDNのページ(英語)に一覧が掲載されてます。
対応フォーマットは、WAVEファイル(*.wav)、MP3ファイル(*.mp3)、MIDIファイル(*.mid)、
WMAファイル(*.wma)です。
ただ、HSPのPACKFILE機能を利用して実行ファイル内に埋め込んだ
音楽ファイル(全形式)はいっさい利用できず、ハードディスク上にファイルとして存在するものしか
読み込めないので注意してください。
[3] HSP拡張プラグイン・汎用ライブラリ
音楽再生をサポートするHSP拡張プラグイン(*.dll、*.hpi)や汎用ライブラリ(*.dll)です。
HSPから利用できるものがいろいろとリリースされてます。
対応フォーマットは、WAVEファイル(*.wav)、MP3ファイル(*.mp3)、MIDIファイル(*.mid)、
WMAファイル(*.wma)、Ogg Vorbisファイル(*.ogg)といったところです。
それぞれの拡張プラグインや汎用ライブラリの機能・性能次第ですが、基本的にDirectXを
利用するものが多いので、もっともパフォーマンス良く高度な音楽再生処理が実現できると言えます。(途切れのないループ再生、同時の多重再生など)
HSPのPACKFIEL機能を利用して、実行ファイル内に埋め込んだメモリ上の
音楽ファイルを直で利用できるものも中にはあります。(HSP拡張プラグインそのものは実行ファイルに埋め込む
ことはできません!)
⇒ HSPプログラミングTIPS
サウンド関連拡張プラグイン
⇒ HSPTV! 拡張プラグイン紹介 (サウンド・マルチメディア他)
HSPサウンド メモ
・ 一般的に、短いサウンド(効果音系)はWAVEファイルを利用し、長いサウンド(音楽BGM系)は MP3ファイル、MIDIファイル、WMAファイル、Ogg Vorbisファイルを利用したストリーミング再生です。
・ 実際のところ、mm〜系命令やmci命令というのは、ゲームプログラミングでの利用を想定した処理では
ありません。どちらも内部的にはWindows 95の前のWindows 3.x時代に作られた旧世代のシロモノを利用しており、
Microsoftはこの分野専門にDirectXを用意してます。
その中で音楽を担当するコンポーネントが「DirectX Audio」(旧DirectSound・DirectMusic)です。
市販されてるPCゲームも必要環境として必ずといっていいほどDirecXの表記があるはずです。
HSP(HSP3)の標準命令だけでDirectXコンポーネントを呼ぶというのは、かなーりメンドイこと(hiroさんの事例、ちょくとさんのHSP2事例)になるので、
DirectXの知識がなくてもOKなHSP拡張プラグインや汎用ライブラリを利用するのがもっとも手軽な手段です。
・ 上でも触れてるように、mm〜命令(WAVEファイルを除く)とmci命令は、PACKFIEL機能で埋め 込まれてるファイルを直で呼び出すことができません。ただ、PACKFILE機能はありとあらゆるファイルを実行 ファイルに埋め込めるわけで、たとえばbcopy命令を使って実行ファイルにパックされたMP3ファイルを一度 ハードディスク上に吐き出し、これを再生して、プログラムの終了段階(onexit命令)で削除する手法も いちおうあります。
・ mm〜命令で読み込んだ音楽ファイル(WAVEファイルを除く)や動画ファイルは、mci命令からでもいちおう 制御できます。エイリアス名は「myid」です。(メリットは・・・なし?
// mmload+mciのタッグ? onexit *exit dialog "mid;*.mp3;*.wma;*.wmv;*.avi;*.mpg", 16 if stat = 0 : stop mmload refstr mmplay ; 一度再生命令を呼ばないとだめ mci "stop myid" ; 停止 mci "status myid length" mes "長さ: "+stat stop *exit mci "close myid" end
キーワード de HSP
- 無料プログラミング
- HSPダウンロード
- 実行ファイル作成
- HSP動作環境
- 演算子
- 文字列操作
- 命令・関数一覧
- アイコン変更
- PACKFILE
- PACKFILE編集
- #packopt
- #deffunc
- HSPエラー
- HSPエラー番号
- HSPエラー7
- HSPエラー12
- HSPエラー13
- HSPエラー33
- HSPエラー38
- HSPエラー41
- ホームページ作成
- バージョン
- フォント
- オブジェクト
- ボタン
- 入力ボックス
- オブジェクト非表示
- Win32 API
- メニュー
- HSPLet
- サウンド再生
- 画像
- PNGファイル
- HSP質問掲示板
- デバッグ
- ドラッグ&ドロップ
- ブラウザ作成
- HSP書籍本