HSP Dishで音を鳴らす、mmplayの使い方


 今回は音の鳴らし方をやります。

 HSPの場合は dmmなのですが、Dishだと mmになります。

 HSP → dmmload、dmmplay、dmmstop、dmmvol
 Dish → mmload、mmplay、mmstop、mmvol

 後はvol(ボリューム)の値が HSPだと -10000~0、dishだと -1000~0くらいの違いで、後は一緒です。

 mmloadでファイルを読み込み、mmplayで鳴らし、mmstopで止めて、mmvolで音量を設定します。

#include "hsp3dish.as"

	mmload "test.wav",1	; 読み込む
	mmplay 1			; 鳴らす
	mmstop 1			; 止める
	mmvol 1,0			; ボリューム

 数字は音のファイル No.です。

 使用するフォーマットは、BGMは.mp3、SE(効果音)は.wavです。
 それで統一したほうが良いようです。

 mp3(BGM)は単音だと思ったほうが良いでしょう。
 wav(SE)は多重再生できます。

 webGL版の場合は、音楽ファイルも画像と同じデータフォルダに入れます。

 以上です。

 

 え?何?短い?

 という訳で、今回は自分の使ってるボリューム設定の方法を紹介します。

 まず変数として、BGMのボリューム値(0~10)と、SEのボリューム値(0~10)を設定します。

 変数名は適当に、mu_vo、se_voくらいで良いでしょう。

 次に、各音楽ファイルのボリューム値を0~100で設定します。
 これはなぜかと言うと、音のバランスを細かに取るため、調整用です。
 この変数を vo(n、音楽ファイルNo.)とでもしておきます。

 後はボリュームをオプション等で変化させた時に、mu_vo × vo(n)の掛け算の値を mmvolで設定してやるだけです。

 掛け算なので、マスターボリューム(mu_vo、se_vo)が0の時はボリュームは0になります。

#include "hsp3dish.as"

gosub *syoki : end


#deffunc vo_set	; ボリュームセット

	repeat 2 ; BGMのボリュームをファイルごとにセット
	 mmvol cnt,-1000+mu_vo*vo(cnt)
	loop
	
	repeat 2 ; SEのボリュームをファイルごとにセット
	 mmvol cnt+20,-1000+se_vo*vo(cnt+20)
	loop

	return


*syoki ; 初期設定

	mu_vo=10	; BGMのマスターボリューム(0~10)
	se_vo=8		; SEのマスターボリューム(0~10)

	dim vo,100	; 音楽のファイルNo.に対応した各ボリューム値

	mmload "bgm1.mp3",0 : vo(0)=100	; 読み込む
	mmload "bgm2.mp3",1 : vo(1)=95	; vo=(0~100)

	mmload "se1.wav",20 : vo(20)=80
	mmload "se2.wav",21 : vo(21)=90

	vo_set ; 始めに一回設定しておく


*main ; メイン

	mu_vo=7	; BGMのボリュームを再設定
	se_vo=3	; SEのボリュームを再設定

	vo_set	; ボリュームをセット

 #deffuncというのは、あらかじめ命令文としてセットしておけるものです。
 しかし基本的には、ラベル GOSUBと違いありません。

 SEのファイルNo.が 20~なのは、その前に BGMファイルが20個以内ある、という想定です。

 オプション画面ででも mu_voと se_voを 0~10で変化させて、その都度 vol_setで変化させれば良いです。

 さあ、これでオプションでのボリューム設定はバッチリですね。
 
 
 
 後はオマケでコーディックでのつまずき(音が鳴らない)苦闘編をやります。

 タイトルのテーマ曲として、これを見つけました。

 王国への凱旋 by 天休ひさし
 
 いやあ、良い曲ですね、ぜひタイトル画面で使いたい。

 置いてあるブラウザ上や、ウインドウズのメディアプレイヤーでは再生できます。
 しかしHSPではうんともすんとも言わない。

 ファイル名が違う訳でも無いし、どうしても理由が分からない。

 なら一度.wavにしてもう一度.mp3にし直したらどうだろうと思って、試しに午後のこ~だでデコードしてみたら「不明なエラー」となってデコードできない。

 うむ、今まで例が無かったのでよくは分からんが、これはもしかしてコーディックとやらが違うのではないかと。

 コーディックというのは、そのファイルフォーマット(例えばmp3とかjpgとかmp4とか)を作成する時の変換プログラムの事で、一種類ではなくて複数あるらしくて、それが違うと同じファイルフォーマットでもうまく再生できなかったりするらしい。

 ビデオファイル(wmvとかmp4とか)では、ものによって再生されたりされなかったりはよくある。

 う~ん、じゃあここは定番のAudacityでもう一度mp3ファイルとして出力しなおしてみたらどうだろうか。

 やってみたら lame_enc.dllを用意しろ、と言う事でmp3ファイルは書き出しできない、ぐぬぬ。

 まあググれば lame_enc.dllの用意ぐらいは簡単にできると思うので、やったらいいと思うけど、自分はめんどくさいのでAudacityで一度wavファイルに書き出してから、午後のこ~だでmp3ファイルにし直す、という方法を使った。

 何?どっちがめんどくさいか分からない?

 とにかく一応、この方法で鳴らせるようにはなった。
 
 
 ちなみにAudacityは音圧の調整とか、リバーブとか、フェードアウトとか、ちょっと加工するのには丁度良い。
 
 
 
 まあ、今回はオマケのオマケで lame_enc.dllのセッティングもついでにやってみましょうか。
 
 
 まずAudacityを立ち上げて、編集→設定
audacity 設定

 LAME MP3ライブラリを見つけたらダウンロードを押すと
img00607

 ダウンロードページが開くので、ダウンロードを選択して
LAM EMP3ダンロードページ

自分はzipファイルを選びました
img00613

 とりあえずファイルをaudacityと同じファイルに移して、と
img00618

 audacityで今度は lame_enc.dllの場所を指定します
img00608

 ファイルを選んで
img00616

 OKを押して、と
img00615

 閉じて
img00617
 
 
それじゃあ書き出してみましょうか
書き出し

 mp3を選択して保存
img00619

 無事HSPでも再生されるようになりました。
 
 
 ちなみに lame_enc.dllを移動したフォルダの絵を見てもらうと分かると思いますが、libmp3lame-win-3.99.3と lame3.99.5と2つあります。

 はじめに別ルートで lame3.99.5ををダンロードして、フォルダ内の lame_enc.dllを指定しましたが「このバージョンはAudacityとコンパーチブルではありません」と出てダメでした。

 どうもバージョンの違いではなくて、この lame3.99.5のほうは、フォルダ内にあるlame.exeを実行する形式のようです。
 あるいはファイルにwinとか書いてないので、ウインドウズ版では無いのかもしれません。

 インストール(かどうかは分からんけど)とか色々めんどくさいので、その辺は割愛します。
 
 
 以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です