============================================================================ [[ HSP DirectSound Extension ]] ver.2.20 Programmed by MIA 1999-2002. ============================================================================ ■■■■最初に  このプログラムは、Hot Soup Processor ver2.4g 以降で、DirectSoundを  使用できるようにする、HSPプラグインです。  v2.20β からの変更点   ・ds_enumdev ds_setdev 命令の追加  v2.10α からの変更点   ・DirectSound バッファ作成機能の追加   ・DirectSound バッファのデータ書き込み機能の追加   ・ds_vol, ds_pan の bug fix  v2.00 からの変更点   ・DPMの読み込み不全の改善   ・シーケンス再生機能の追加   ・メモリからバッファに読み込む機能の追加 ■■■■DSExを使用することによる利点  このライブラリを使用すると、   ・巨大なファイルの再生   ・複数サウンドの重ね合わせ再生   ・切れ目の無いループ   ・再生速度の滑らかな変更   ・パンの調節   ・音量の調節   ・WAVEシーケンスのバックグラウンド再生  を行うことができるようになります。  また、MCIを利用して再生するのに比べ、再生音質も向上します。 ■■■■つかいかた  このプラグインは、DirectX がインストールされていないと  使用することが出来ません。  まず、dsoundex.hpi をHSPのフォルダにコピーして、  dsoundex.as を、現在作業しているフォルダ、またはHSPのフォルダの中にある  "common" フォルダに入れてください。  そしてプログラムの先頭に、 #include "dsoundex.as"  とすると、 ds_getdev p1,p2 ds_setdev p1 ds_init p1,p2 ds_load p1,p2 ds_load2 p1,p2,p3,p4 ds_memload p1,p2 ds_create p1,p2,p3,p4 ds_write p1,p2,p3,p4 ds_dup p1,p2 ds_play p1[,p2] ds_loop p1[,p2] ds_stop p1 ds_getf p1 ds_setf p1,p2 ds_getp p1 ds_setp p1,p2 ds_stat p1 ds_vol p1,p2 ds_pan p1,p2 ds_rel p1,p2 ds_bye ds_free timer seq_read p1 seq_play seq_stat seq_isplay seq_stop  という命令が使用できるようになります。 ■■■■各関数の使用法 ●ds_getdev p1,p2  DirectSoundの出力先デバイスを取得します。  p1 には変数を指定してください。ds_setdev の引数に渡す整数値が返ります。  p2 出指定されたデバイスが見つからなかった場合は、-1 が返ります。  p2 は取得するデバイスの番号です。0 以上の数値を指定してください。  取得に成功すると、refstr にデバイス名、p1 で指定した変数に  デバイスを表す整数値が代入されます。  ds_setdev の引数には、この数値を使用してください。 ●ds_setdev p1  DirectSoundの出力先デバイスを設定します。  p1 には ds_getdev で取得した数値を指定してください。  ※この命令は、ds_init の前に実行する必要があります。 ●ds_init [p1[,p2]]  DirectSoundを利用するための初期化を行います。  これより後の命令を使用するために、プログラムの最初で実行してください。  ※標準DirectXプラグイン "HSPDX.DLL" と同時に使用する場合は、   es_screen で画面を作成後、ds_init を実行してください。   そうしないと、画面が出なくなります。  p1 には、合成して出力される音声データの周波数を設定してください。  省略すると、設定できる最大値(44100[Hz])になります。  この値を小さくすると音質が低下し、システムへの負荷が若干減ります。  p2 には、再生チャンネルを設定します。  1がモノラル、2がステレオです。省略すると2(ステレオ)になります。  また、p1 に -1 を指定すると、Ver1.23 以前のスレッド優先順位で  初期化を行います。(動作が軽くなります)  初期化に成功した場合、stat=0 となります。 ●ds_load p1,p2  DirectSoundのバッファに、p1 で指定されたファイルを読み込みます。  それぞれのバッファには p2 で指定されたIDがつけられ、  音声を操作するときには、このIDを指定します。  (バッファIDには、0〜1023までの 1024個が使用できます)  読み込みに成功した場合は、読み込んだファイルのサイズを stat に返します。  失敗すると、statが0になります。  例) ds_load "SHOT.WAV",0 ;0番のバッファに "SHOT.WAV" をロード  ★★★ ADPCMやMP3(MPEG-Audio)も読み込むことができますが、 ★★★  ★★★ デコード後のファイルサイズ分のメモリを消費します。 ★★★  ★★★ 大きなデータを読み込むのは控えましょう。      ★★★ ●ds_load2 p1,p2,p3,p4  p2 番のバッファに、p1 で指定されたファイルの  p3 バイト目から p4 バイトを読み込みます。  読み込むデータは WAVEファイルの書式に従っていなければなりません。 ●ds_memload p1,p2  p2 番のバッファに、p1 で指定されたメモリ上にある  WAVEフォーマットのデータを読み込みます。  例) bload "filename.wav", buf, size : ds_memload buf, 0 ●ds_create p1,p2,p3,p4  p1 番のバッファに、p2 で指定されたサイズのデータを持つ  バッファを割り当てます。p3 はデータの周波数[Hz]、  p4 にはチャネル数とビット数を以下の表から指定します。 p4=0 : 8bit mono p4=1 : 8bit stereo p4=2 : 16bit mono p4=3 : 16bit stereo ●ds_write p1,p2,p3,p4  p2 番のバッファの p4 バイト目から、p3 バイトのデータを  p1 で指定された変数から書き込みます。  ファイルから読んだ音声データや、生成した波形データの  DirectSound による再生ができます。  バッファに指定されているフォーマットに従ったデータを  書き込まないと、音が崩れます。  例) ds_write rawwave, 0, size, offset ●ds_dup p1,p2  p1 のバッファに、p2 のバッファを複製します。  音声データ部分が共有されますので、同じ音声に余計なメモリを  使うことがありません。  2つのバッファは、それぞれ独立してパンや音量の調節ができます。 ●ds_play p1[,p2]  p1 で指定されたバッファを、一度だけ再生します。  p2 を指定すると、その位置から再生されます。  重ね合わせは自動的に行われますが、同じバッファ番号の音声は  同時に2つ以上再生することは出来ません。  同じ音声を複数使いたい場合は、ds_dup 命令で別のIDに複製してから  使用してください。 ●ds_loop p1[,p2]  p1 で指定されたバッファを、切れ目の無い無限ループで再生します。  p2 を指定すると、その位置から再生されます。  再生を止めるには、ds_stop 命令を使用してください。 ●ds_stop p1  p1 で指定されたバッファの再生を止めます。 ●ds_getf p1  p1 で指定されたバッファの再生周波数を取得します。  値は、システム変数 stat に返ります。 ●ds_setf p1,p2  p1 で指定されたバッファの再生周波数を設定します。  p2 には、設定する周波数を整数で指定してください。  例) ds_setf 0,60000 ;0番のバッファの再生周波数を 60000Hz にする ●ds_getp p1  p1 で指定されたバッファの再生位置を取得します。  値は、システム変数 stat に返ります。  ※再生中のバッファに対して実行する命令です。 ●ds_setp p1,p2  p1 で指定されたバッファの再生位置を設定します。  p2 には、設定する位置を正の整数で指定してください。  ※再生中のバッファに対して実行する命令です。  例) ds_setp 0,60000 ;0番のバッファの再生位置を 60000(sample) にする ●ds_stat p1  p1 で指定されたバッファが再生されているかどうか調べます。  システム変数 stat に、値が代入されます。  stat & 1 : 再生中フラグ stat & 2 : ループフラグ  です。 ●ds_vol p1,p2  p1 で指定されたバッファの音量を設定します。  p2 には、設定する音量を 0〜100 で指定してください。  例) ds_vol 0,50 ;0番のバッファの音量を50にする ●ds_pan p1,p2  p1 で指定されたバッファのパンを設定します。  p2 には、設定する位置を指定してください。(右が +10000、左が -10000まで)  例) ds_pan 0,-5000 ;0番のバッファを、左:5000 にする ●ds_bye  クリーンアップ関数ですが、  発音している音をすべて止めたいときにも利用できます。 ●ds_rel [p1,p2]  p1からp2までのバッファを解放します。  省略すると、すべてのバッファが対象になります。  発音されている音は停止し、音声用のメモリが解放されます。  ds_load 内部でもある程度のメモリ管理を行うようにしたので  特に必要が無い限り、この命令は使わなくても大丈夫です。 ★timer  ウィンドウズが起動してから何m秒経過したかを返す命令です。  gettime命令より高精度のタイマとして利用できます。  ※この命令は、ds_init を実行しなくても利用できます。 ■■■■その他  プログラムに関する感想・質問・要望・バグレポは、メール [ mia@diry.net ]  または、MIA's HomePage [ http://www.diry.net/mia/ ] 内の掲示板までどうぞ。 ■■■■著作権等  このプログラムの著作権は MIA が主張し保持します。  プラグインファイル名の変更は、禁止します。  このプラグインを使っているソフトに、「DirectSoundExtensionを使ってるよ〜ん」  なんて事を書く義務は発生しません。  が、できれば書いてくれたほうが、MIAは嬉しがります。 ■■■■アプリケーションでの利用について  好きに使ってください。  営利利用についても制限は行いません。  でも、もし大儲けしたら、ちょっとわけてね(笑 ■■■■謝辞  >CHOKKO さん   HSPDX.DLLとの共存方法を提供してくださいました。   私はHSPDX.DLLを使わないひとなので、わからなかったんですよ。(^^;   ds_rel 命令、杜撰なメモリ管理の指摘も頂きました。   どうもありがとうございます。 ■■■■変更履歴 2.20 デバイス列挙、出力先の変更に対応 2.20β 直書き込み、バッファ作成機能追加、vol/pan の bugfix 2.10α シーケンス再生対応、メモリ上のファイルに対応 2.00 圧縮音声を読めるようにする。 1.25 ds_free を追加、操作レベルの指定を出来るようにする。 1.24 ds_dup を追加、操作レベルを NORMAL→PRIORITY に上げたので 出力周波数が変更できるようになった。 1.23 ds_rel を追加。メモリ管理の公正化。 空きメモリを食い尽くすコトがなくなった。 1.21 ds_vol が動作しないバグを修正。 コンパイルオプションの変更で、ファイルサイズが6分の1に。 1.20.1 packfile内のファイルしか読めないという致命的なバグを修正。 1.20 STICKYFOCUS を、GLOBALFOCUS に変更。それにより ActiveMovie他、 一部のDirectSound使用アプリとの共存ができるようになった。 ds_getp ds_setp 命令を追加。 ds_play ds_loop 命令に、再生位置指定オプションを追加。 ds_open が、値を返すようにする。 1.10 timer 命令、ds_stat 命令を追加。 ds_play ds_loop 実行時に音が出ないことがあるのを修正。 ウィンドウがアクティブでない時も、音が出るようにする。 アプリケーション終了時に、音を消すようにする。 1.00 とりあえず完成。 ------------------------------------------------  MIA's HomePage - [ http://diry.net/mia/ ]