HSP3命令入門講座 <memfile命令>

Last Update : 2008/01/xx

memfile命令 (メモリストリーム機能)

 メモリ上の変数データをHSPの命令で直接読み込ますことができる命令です。HSPのヘルプではメモリストリーム機能という名前で紹介されてます。命令名の由来は、「memory file」から。(→ 参照、HSP開発wiki

 memfile 変数バッファ, バッファのオフセット値, 変数バッファのサイズ

 第1パラメータにはメモリストリームの対象となる変数、第2パラメータは先頭から何バイト目をメモリストリームの対象とするか(デフォルトは先頭0バイト目から)、そして第3パラメータはメモリストリームの対象となるデータのサイズ(デフォルトはファイルの最後まで)、となります。

 memfile命令によるメモリ上データを扱える命令は、基本的に下のHSP命令に限定されます(HSP2は未確認)。HSPのmci命令、HSP拡張プラグイン(DLLファイル・HPIファイル)の命令などには一切利用できません。

メモリストリーム機能を利用できる命令 (HSP3)
picload命令 画像ファイル [BMP、GIF、JPEG、ICO形式]
mmload命令 音楽ファイル [WAVE形式のみ]
noteload命令
bload命令
テキストファイル、バイナリファイルなど

 実際に利用するには、それぞれの命令の第1パラメータのファイル指定で、「mem:」という文字列と「.」付き拡張子を指定します(画像ファイルは拡張子なくてもOK?)。普通はこの部分にハードディスク上のファイル名(ファイルパス)を指定するわけですが、メモリストリーム機能によりメモリ上に存在するデータを指定できるわけです。

	picload "mem:"
	mmmload "mem:.wav"

↑TOP↑

サンプルスクリプト (超テキトーな画像パックファイル)

 HSP3本体には、memfile命令のサンプルファイル(sample\basic\memfile.hsp)が用意されてます。これは画像ファイルを読み込むのにpicload命令でOKなところを、あえてメモリストリームで読み込んでます。少なくとも、このサンプルの処理では実用性がありません。

 memfile命令の説明には、『独自形式のアーカイブや暗号形式を用意してその内容を読み出して画像として展開する場合など、特殊な場面でのみ使われることを想定したもの』と書かれてあります。ってなワケで、一例として、HSP初級者さんには少々難しい内容かと思いますが、テキトーなファイルフォーマットを勝手に作ってみることにします。

 お題は「超テキトーな画像パックファイル」。まずはテキトーなファイルヘッダー。

0x00-0x03 0x04-0x07 0x08-0x0B 0x0C-0x0F 0x10-0x13 ... ...
2バイト 2バイト
"MF" 画像数 画像1オフセット 画像1サイズ 画像Xオフセット 画像Xサイズ 画像1データ 画像Xデータ

 画像ファイルを選択して、このフォーマットのファイルを作成するHSP3用ソースコードはこちら(hmf.hsp)。そして、下は出力させたフォーマットを読み込んで、メモリストリームで1つ1つ画像を表示させるサンプルスクリプトです。

;	「超テキトーな画像パックファイル」 読み込みサンプル
;	by Kpan

;	ハードディスク上にあるファイルでも、HSPのPACKFILE内のファイルでもOK
	filepath = "hmf_sample.bin"

	exist filepath
	if strsize = -1 : mes "見つからないんだが・・・" : stop

;	ファイル読み込み
	notesel filebuf
	noteload filepath

;	ヘッダーチェック(先頭2バイト"MF"かどうか)
	if wpeek(filebuf, 0) != $464D : mes "違うフォーマット!" : stop

;	含まれている画像数分繰り返す
	repeat wpeek(filebuf, 2)
;		ヘッダーからオフセット値とサイズ値を取り出してメモリストリーム
		memfile filebuf, lpeek(filebuf, cnt * 8 + 4), lpeek(filebuf, cnt * 8 + 8)

;		メモリ上の画像を表示
		screen cnt + 1
		picload "mem:"
	loop

	gsel
	mes "done!"

◎ memfile命令+mmload命令の例
 HSP3から規則音声合成ライブラリを扱うサンプルソース(自作ソフト「laquestalk」)では、メモリ上で生成されたWAVE形式の音声データをmemfile命令でメモリストリーム後、そのままmmload命令で発声させてます。WAVEファイルとして一度ハードディスク上に書き出してないのがポイント。

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.