HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0113
exeファイルにパックするwavファイルについて。10未解決


リンク

2007/1/13(Sat) 07:46:18|NO.4763

exeファイルに、画像も音も皆パックしてしまいたいのですが、
いざexeを作ってみると音が鳴りません。
HSPのツールから、PACKFILE編集を選び、
暗号化にチェックを入れて、対象のファイルは全て追加し、
プログラムにも#packをし、実行ファイル自動作成をしました。
(#epackでも試しましたが、不可でした。)

音は皆wavファイルで、ファイル名は8文字以下、拡張子も3文字に統一してあります。
音の種類は3種類で、バックミュージック用と、効果音と、ボイスです。
いずれもパックの仕方は上記の通りで変わらないはずなのですが、
その内、効果音だけはパック出来ています。(容量が少ないからでしょうか?)

やはり、パック出来る容量は定められているのでしょうか?
もし定められている場合、どうにかして容量の大きいwavファイルでも、
exeファイルに含める事は出来ないでしょうか?

よろしくお願い致します。



この記事に返信する


As

リンク

2007/1/13(Sat) 11:08:03|NO.4764

#packなどの自動作成命令はCtrl+F9で自動作成した場合のみ有効になります。
また,exeファイルの作成を選んだ場合はPACKFILE編集の設定になります。
自動作成の方法をとるのであれば、#packなどの命令だけでPACKFILEの編集はしなくてもかまいません。
(ついでにstart.axを作らなくても自動で作ってくれます)

Wavファイルにも様々な種類があるので、他のWavファイルが再生できるか試してみてください。
もしそれで再生できた場合はサンプリング数やビット数が違っていたり特殊なエンコード形式が
使われているかもしれません。



Drip

リンク

2007/1/13(Sat) 15:14:19|NO.4766

Dripです。

 雅さん、こんにちは。
WavファイルをEXEファイルにして再生したときに再生されない主な原因として、
長いファイル名以外に次のようなケースが考えられます。

・再生命令が外部プラグインのも
 (プラグインがpackfileに対応していない場合再生されません。
  DirectSoundを使用する場合等は注意してください。)
・mciからの再生
 (packfileからは無条件で再生できません。一旦データをハードディスク等に逃がし、
  データにファイルパスを与えてやる必要があります。)
・とてもファイルサイズの大きい音声データの再生
 (mmplay命令で、13MBのサイズの音楽を再生するとき、Windows2000ではいけましたが、
  Windows98では再生できませんでした。しかしmci命令では再生ができました。
  巨大な音声ファイルはメモリにデータを展開する際、失敗することがあるようです。)

一度確認してみてください。



リンク

2007/1/13(Sat) 16:11:35|NO.4769

>>As様
ご教授ありがとうございます。
成る程、どちらかでいいのですね。
知らずに大量に#pack命令を膨大に記述しておりました…とほほ。

wavファイルを調べてみましたら、3種類ともビット数以外はばらばらでした。
まとめてみると、下記の通りなのですが、
再生出来た効果音のプロパティだけが、処理可能という事なのでしょうか…?

         | 効果音 | ボイス  | バックミュージック
------------------------------------------------------------
ビットレート     | 128kbps | 705kbps | 1411kbps
オーディオサンプルサイズ | 16ビット | 16ビット | 16ビット
チャンネル | 1(モノラル) | 1(モノラル) | 2(ステレオ)
オーディオサンプルレート | 8KHz | 44KHz | 44KHz
オーディオ形式 | PCM | PCM | PCM


>>Drip様
ご教授ありがとうございます。
バックミュージックはmmplay、効果音とボイスはmciで再生させております。
なんと…!mciでは再生出来ないとは!

>一旦データをハードディスク等に逃がし、
> データにファイルパスを与えてやる必要があります。

この部分のやり方を、もう少し教えていただけないでしょうか。
ちなみに、出来上がったexeを配布する目的で作成しております。
ダウンロードされた先でも通用する様に作れますでしょうか?



トホホッティー

リンク

2007/1/13(Sat) 16:55:30|NO.4770

トホホッティーです。

配布するexeにwaveファイルを付属するのはどうですか?
音楽ファイルが別になりますが、かまわないならその方がいいと思います。

別の方法もあると思いますが、この方法で乗り切ってはどうでしょうか?



Drip

リンク

2007/1/13(Sat) 19:32:38|NO.4775

Dripです。

 mciでの音声ファイルの再生は、WindowsのMCI(Multimedia Control Interface)に
処理を渡して処理しています。ですから実行ファイル等に埋め込まれたデータは、ファイルパスを
持たないため、MCIはどこからデータを読み出せばいいのかわからず、再生できません。
bcopy命令でpackfile内のデータをどこかにコピーし、そのコピー先のファイルパスを
MCIに渡して再生するようにしてみてください。

 コピーしたファイルはユーザーにとって、いわばゴミファイルですので、プログラム終了時や
再生終了時に削除するようにしてください。
 このやり方が判り難い、また難しい場合は、mciで利用するファイルはpackfileに含めず、
外部ファイルとして置いておけば、プログラムは一切改変することなく問題が解決します。
ファイルが散らばるのが嫌な場合は、フォルダをひとつ作成し、その中にまとめて音声ファイルを
保存するようにすると見た目が綺麗です。

> 出来上がったexeを配布する目的で作成しております。
> ダウンロードされた先でも通用する様に作れますでしょうか?
 exeファイルを単体で配布する場合、packfileを利用するしかありませんね。
この場合はやはりbcopyでカレントディレクトリやtempフォルダにデータをコピーし、
そこから再生するやり方を取らざるを得ません。
 exeファイルをlzh等のアーカイブにする場合は、
外部ファイルとして置いておくのが手っ取り早いです。

備考:
 私のサポートページによく「正しくゲームが動きません!」というご質問が来るのですが、
原因はlzhファイルの解凍ソフトがファイル構成を破棄して解凍していたために発生する
不具合ということがわかりました。
ファイル構成が重要なソフトの場合、lzhファイルで配布するより、
自己解凍形式にして配布した方が良さそうです。余談でした。



Irisawa

リンク

2007/1/13(Sat) 23:40:18|NO.4778

wavファイルは確かパッキングできなかったと思います。
外部ファイルとしてスクリプト側で指定しているパスに置いてください。



As

リンク

2007/1/16(Tue) 01:31:33|NO.4835

mciでの再生の場合、exeにパックされてる
ファイルをいちいち読み込もうとなんてしませんからむりですね^^;

でも、せっかくmmplayを使っているのなら ボイスもそっちでやってもいいんじゃないでしょうか?



リンク

2007/1/16(Tue) 14:54:59|NO.4843

皆様、色々なご回答ありがとうございます。

exeの外につけて配布するやり方では、wavデータが外に漏れてしまいますので、
何とかexeの中に入れ込んでしまいたいのです。
また、プログラム中ではmmplayとmicの両方を使っております。
これは全てmmplayだと、いくつか鳴らしているwavの1つだけを止める、
という事が出来ない様に思われる為です。ただ単純な、mmstop、しかありませんよね。。

なのでどうにかDrip様がおっしゃる様なプログラムが出来ないかと頭を絞ってみましたが…


#epack "sample.wav" a=dir_exe name="c_x.wav" chdir a dcopy name,a mci "sample.wav" delete "sample.wav"

(上記のプログラムを実行しても内部エラー12にて動きません…)
プログラムの組み方、考え方がそもそも違うのでしょうか?
とんでもない勘違い?
全くの暗礁に乗り上げておりますので、どなたでも、どんな小さなアドバイスでも
本当に嬉しいです。

exeファイルの中から、使用するwavデータだけを抜き出す方法をお分かりになる方、
どうかご教示お願い致します。m(_ _)m



As

リンク

2007/1/16(Tue) 19:31:49|NO.4850

邪道な方法ですが、

mmload命令で すでに登録してあるバッファIDに無音ファイルを読み込ませ、
再度mmplayで再生すれば 停止するのではないでしょうか?



Drip

リンク

2007/1/19(Fri) 01:13:25|NO.4887

Dripです。

 投稿されたスクリプトにはいくつか問題点があります。
まずdcopyという命令はありません。ここでエラーが発生するはずです。
次にmciコマンドが間違っています。mciは単純にファイル名を指定しただけで
再生されるものではありません。
最後に、mciに要求したデータをdeleteで消してしまっています。
mciでは再生が終了するまでデータを残しておかないと再生できない場合がほとんどです。

 ところで、本当に投稿されたスクリプトをご使用ですか?
実際に使用しているプログラム、もしくはそれと同じ動作をするプログラムを
お見せいただかないと、正しいアドバイスはできないと思います。

 更にもう一点アドバイスですが、mciとmmplayを併用することで2つの音声を合成して
再生できるものと思っていらっしゃいませんでしょうか。
 最近のマシンならば2つ以上のデバイスを同時に開いてあたかも音声を合成して
再生しているようにすることができますが、少し古いマシンでは同時に2つ以上のwav周りの
デバイスを開けず、片方でエラーする場合があります。
mciとmmplayの使い分けは、音声を合成する術では無い事を覚えておいてくださいね。
余談でした。



ONION software Copyright 1997-2018(c) All rights reserved.