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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0731
風の谷のウマシカwaveファイルは実行ファイルに埋め込めますか5解決


風の谷のウマシカ

リンク

2006/7/31(Mon) 18:07:58|NO.1668

皆様、いつもご指導有難うございます。マニュアルを見ながら少しずつ制作を進めていたスクリプトが
やっとできました。HSP3.0aで作っています。しかし、実行ファイル*.exeに*.wavファイルをPackすると音が鳴らない様です。
exeファイルの外に出しておけば鳴る事は確認済みなので、スクリプトに間違いは無いと思います。



;;;;;;;;;;;;;;;;短くするとこんな感じの極シンプルな使い方です;;;;;;;;;;;;
input a
input b
button "計算",*Culk : stop

*Culk
if b=0 { mci "play error.wav" : mes"0では除算できないよ" : stop }

mes a/b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


外へ出すとちゃんと音は出るので、実害はないのですが、
5KB位の小さなwaveデータなので、別のファイルにするとディスクスペースが
ちょっぴり、もったいない所が、美しくないと言うか・・。ほとんど趣味の問題ですが・・。

どうも気になるんですが、と言うのは、関連サイトを調べていると
http://www9.ocn.ne.jp/~shinweb/HSP/HSP-kihon.html
では、wavファイルをパックする様な事が操作の例として何気に書かれています。
この例では(Ver2.5用)と書かれていますが、Ver3.0の変更点に「waveデータがパックできなくなった」なんて事は書かれていませんね。
関連サイトの情報も、たまには間違う事があるでしょうが、上級者の人が間違える様な所かな?

Ver3.0のマニュアルには「画像ファイルや、テキストファイルなどHSPから読み込まれるファイルすべてに適用
することができます。PACKFILEに含めることのできないファイル、MIDIや動画ファイルなどは対象にはなりません。」
とありますが、wave形式に関しては、どうなんでしょう。

因みに暗号化はしてもしなくても、結果は同じです。パックするファイルの選択にはスクリプトエデイタの
「ツール(T)」「PACK FILE編集(E)」を使いました。



この記事に返信する


tks

リンク

2006/7/31(Mon) 18:17:15|NO.1669

mci命令ではパックファイル内のwavを再生できません。
mmplay命令を使えばよろしいかと。



風の谷のウマシカ

リンク

2006/7/31(Mon) 19:17:56|NO.1671

有難うございました。

なるほど、埋め込めるか埋め込めないかは、データ形式によってのみ決まるのではなく、
命令とデータの組合せによって、変わるんですね。

「埋め込み可能なファイルの拡張子一覧表」みたいなものが、有りそうなものだけど、
どーして見つからないんだろう。なんてブツブツ言いながら探し回っていました。

これは「mmplayの場合は先にmmloadしてあるのが前提だから使える」という理解を
していたら良いでのでしょうか? マニュアルには明示的な情報は無いですね。

そう言えば、notepad系の命令は先に必ずnoteloadの命令が来ますね。
一度パックすると書き直しの際に不便だから、ゲームのイベントに関わるセリフの様に
意図的に隠しておきたい場合以外、普通はわざわざパックはしないでしょうけど。

そう言えば*.asも最初にincludeしてから使いますね。だからパックできるのか。

DLLは「パックできる」と、明示してあるものと、何も書いてないものとありますが、
どうなんでしょうね。

もう少し、教えていただきたいのですが、パック出来るか出来ないか? を区別するには、
一つ一つ実験する以外に無いのでしょうか? 「〜load *.*」や「#include *.as」の様に、
「該当する外部ファイルを先にロードする系だったら良い」の様な原則が決まっているのでしょうか?

マニュアルでは、一部の例外を除くと「HSPから読み込まれるファイルすべてに適用することができます。」
という表現になっていますが、結構ハッタリ???

慣れるまでは全部試行錯誤・・・? うそ・・



Kpan

リンク

2006/7/31(Mon) 21:07:19|NO.1674

>パック出来るか出来ないか? を区別するには、
拡張子関係なく、すべてのファイルを実行ファイル内に埋め込むことが
できます。その埋め込んだファイルをHSPの命令から直利用できるのか
どうかがポイントなわけで。
http://www.geocities.co.jp/Playtown-Yoyo/6130/hsp/hsp_2.htm#4

>DLLは「パックできる」と、明示してあるものと、何も書いてないものとありますが、
パックできると書いてある拡張プラグインは存在しないと思うのです
が、パック自体はできます。しかし、プラグイン(DLL、HPI)は外部
ファイルとして存在していないと利用できない仕組みになっているので、
パックする必要性がありませんです。



Drip

リンク

2006/7/31(Mon) 21:23:15|NO.1675

Dripです。

 風の谷のウマシカさん、こんにちは。PackFileに含められるケースと含められないケースに
ついてですが、これはデータの参照元によってパックできるか否かが変わってきます。
基本的に、PackFileに含められるデータに制限はありません。MIDIファイルでもSWFファイルでも
DLLファイルでも、如何なるデータもパックし、プログラムから呼び出すことが可能です。

 しかし、そのデータを参照する際に、ファイルパスが必要になったらどうでしょうか。
パックされてしまったファイルにはファイルパスがありません。ファイルパスが必要な読み出しは、
ここですべてエラーになります。mmplayによるMIDI再生は、mmloadによって全てのMIDIデータが
メモリ展開されるわけではなく、MIDIファイルを参照するための情報だけが読み込まれ、
それをMCIに渡して再生しています。MCIで読み込むデータはファイルパスが必要になるため、
パックしたファイルを再生することはできません。
 しかし、DirextXのようにメモリに全てMIDIの情報を展開してしまい、再生するようなケースでは
パックしたファイルから呼び出し再生することが可能な場合があります。
 「場合があります」と書いたのは、DirectXを利用可能にするプラグインがファイルを参照する際に、
PackFileの中身まで参照してくれるかどうかによって決まるためです。
PackFileの中身を参照しないプラグインでは当然読み込めません。


 ファイルへのアプローチの仕方でも読み込めるかどうかは変化します。例えばHSPのプログラム
実行時に存在していなければならないデータは、プログラム実行時に参照可能になっている必要があります。
プログラム実行時に必要なデータが得られなければ、当然エラーします。


 パックできるかできないか、こういった状況判断も、プログラムに慣れていくうちに
「この場合はできるな。」「これは無理だろう。」と、大体検討がつくようになります。
その考えが正しいかどうかはテスト実行によって証明されます。


> 慣れるまでは全部試行錯誤・・・? うそ・・

 これはプログラムは勿論、人間の生活環境等全てに言えることですが、結局は全てが試行錯誤です。
無知な人間が既存の情報のみから正確なメソッドを一発で導き出すことのできるケースは
全くと言っていいほどありません。
(現に学校などでプログラミング専門教師が付き添いで指導してくれたとしても、
 生徒が書いたプログラムが一発で動作するケースは殆どありません。)
しかし悲観することはありません。これこそがプログラミングの面白さだからです。



風の谷のウマシカ

リンク

2006/8/1(Tue) 06:46:08|NO.1683

とてもわかりやすい説明を、有難うございました。納得度120%です。
要するにパックできるかどうかが問題なのではなく、
参照して読み出せるかどうか? が問題なわけですね。


Kpanさんへ

>パックできると書いてある拡張プラグインは存在しないと思うのですが

これは私の読み間違いでした。当該のサイトページをよくみると、紹介されていたのは
DLLではなく、モジュールでした。すいません。勘違いだった様です。
「DLLはパックできない」ではなく「DLLはパックしてはならない」と理解しておけば
二度と混乱しないで済みそうです。有難うございました。


Dripさん

>結局は全てが試行錯誤です。

それもそうですね。でもこれだけ教えて戴けたら、全ての可能性に関わる試行を
「機械的に繰り返す試行錯誤」ではなく、「仮説〜検証のための試行錯誤」のプロセスが
楽しめそうなのて、勇気100倍です。有難うございました。



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