*disclaimer
793851
[HSP]
(一部、HSP2.61の表記法のスクリプトが残っていることがあるかも)
HSP
- HSP
- 英語教育研究のためのプログラミング:HSPの基礎テキスト
- HSPで教材開発
- HSPで言語心理学的実験
- HSPの導入
- コメントアウト
- 画面「消去」の3つの命令
- 画像の一部分のコピー(画像を「部品」として使う)
- 文字列と数値の連結
- 文字の改行
- 音声を録音する
- 動画の再生
- 実行ファイル作成時にファイル名を特定しておく
- 実行ファイル作成時に独自のアイコンを設定する
- 実行ファイル作成時に複数のファイルをまとめてコンパイルする
- 文字を順番に表示する
- データを保存する
- オブジェクト
- ボタンの大きさを変える objsize 横, 縦
- 配列 (配列変数)
- テキストを読み込む
- 画像を読み込む
- dialog を使ってテキストファイルを読み込む
- dialog を使って音声ファイルを読み込み再生する
- dialog を使って動画ファイルを読み込み再生する
- getkey と stick の違い
- キーボードやマウスボタンのコード (stick)
- キーボードやマウスボタンのコード (getkey)
- 動きを一時停止する
- 画面の色を変える
- 色を設定する
- フォントを指定する
- 位置を指定する
- 実際に実験する際に注意すること
- 主なコマンド
- 二種類の画像のボタンを使うには
- チェックボックスでアンケート
- システム変数
- モジュール(開発中)
- CuteHSP
- 開発環境
- スマホでHSP
- 参考サイト
英語教育研究のためのプログラミング:HSPの基礎テキスト
HSPで教材開発
HSPで言語心理学的実験
HSPの導入
ダウンロードとインストール
https://hsp.tv/idman/download.html
HSPスクリプトエディタの設定
- 「ツール」>「オプション」
- 「エディタ」>「表示」
- 「非文字の可視化」で、「TAB」「半角スペース」「全角スペース」「改行」にチェックを入れる
- 「エディタ」>「表示」
コメントアウト
; で、その行のそれ以降コメントアウト
/* この上下で挟まれた部分は、複数行にわたってコメントアウト */
画面「消去」の3つの命令
- boxf
- 画面(のある範囲)を「色」で塗りつぶすことで「消去」する
- cls
- 画面上のすべてを初期化してしまう
- screen
- ウィンドウの初期化
画像の一部分のコピー(画像を「部品」として使う)
- gmode によってコピーするモードを選ぶ
- gcopy によって、どのウィンドウIDの画像のどの部分をコピーするか指定
gmode 0 gcopy ウィンドウID, コピー元座標x, y, x軸で何ドット分か、y軸で何ドット分か
文字列と数値の連結
- 数値の文字列変換: str()
str(suuji)+"もじもじ" => 文字列
- 文字列+数値型変数
"もじもじ"+suuji => 文字列
「文字列型」に「数値型」を足し算した場合には、「数値」を文字列にして連結される。 「数値型」に「文字列型」を足し算した場合には、「文字列」を数値にして加算される。 つまり、計算式で最初の項になっている型に自動的に合わせてくれるということです。
http://www.onionsoft.net/hsp/v34/doclib/hsp3str.htm
文字の改行
文字列中に \n を入れることで、そこで改行される。
mes "ながいぶんしょうなので、\nかいぎょうしたいとおもうのですが\nどうしたらよいでしょうか"
適当に改行したうえで、前後の引用符をさらに { } で囲む。
mes {"ながいぶんしょうなので、 かいぎょうしたいとおもうのですが どうしたらよいでしょうか"}
音声を録音する
録音の設定
- setを分けて書くと、うまく動きません。音質が悪くなります。
*record mci "open new alias sam type waveaudio" mci "set sam channels 2 samplespersec 44100 bitspersample 16" ;mci "set sam channels 2" ;mci "set sam samplespersec 44100" ;mci "set sam bitspersample 16" mci "record sam" return
- 以下のようにすると、音声が悪くなります。
mci "set sam channels 2" mci "set sam samplespersec 44100" mci "set sam bitspersample 16" mci "open new alias sam type waveaudio"
録音の開始・停止・終了
mci "record sam" ; 録音の開始 mci "stop sam" ; 録音停止 mci "save sam \"sample.wav\"" ; 音声ファイル保存 mci "close sam" ; 録音終了(デバイスを閉じる)
重要な訂正(2020-06-14)
上記のスクリプトの2行目「samplepersec」ではなく「samplespersec」です。
間違えていました。すみません。
一行に
- mci命令はWindows 7 以降、一行にまとめて書かないといけなくなったようです。
http://hsp.tv/play/pforum.php?mode=pastwch&num=39979
サンプルプログラム
動画の再生
マルチメディア制御
http://lhsp.s206.xrea.com/manual/i_mmedia.html
mci命令
https://blog.goo.ne.jp/predater/e/7b8985aa3cea94896fd61bebd5c32098
http://lhsp.s206.xrea.com/command/mci.html
https://docs.microsoft.com/ja-jp/windows/win32/multimedia/mci
実行ファイル作成時にファイル名を特定しておく
#packopt name "postoffice01"
実行ファイル作成時に独自のアイコンを設定する
#packopt icon "ファイル名.ico"
ico 形式の画像ファイルを作成して、同じフォルダーに入れておく
実行ファイル作成時に複数のファイルをまとめてコンパイルする
#pack "ファイル名"
- packできるのは
- 画像ファイル *.jpg
- テキストファイル *.txt
- 音声ファイル *.wav
- ただし、大きさは2MB以下
- ファイル名は15文字以下にすること
文字を順番に表示する
text ミリ秒 mes "文字列"
text で設定したミリ秒ずつwaitがかかってmesで指定した文字列が順に表示されていく。
HSP3では、#include "hsp3util.as" して、mes ではなく emes を使うことになったので注意。
データを保存する
notesel 変数名 ; データを保存する特別な変数を設定
noteadd "データ" ; データを追加
notesave "ファイル名" ; データを「ファイル名」で保存する
オブジェクト
ボタンの大きさを変える objsize 横, 縦
- デフォルトは 64 x 24
objsize 200, 20 button "ちょっと長い名前", *nextstep
配列 (配列変数)
複数の変数を順に並べて番号を付けたもの。
番号で変数を指定できるので、順番に処理するのに便利。
変数と同様に、配列に名前をつける。(kamoku)
名前のうしろに括弧で番号をつける。
番号は 0 から始まる。
kamoku(0)
値は変数と同様に = で代入する。(「配列変数kamokuの要素0に39を代入する」という)
kamoku(0) = 39 kamoku(1) = 29 kamoku(2) = 32
配列の数を調べる length(配列名)
kamokusuu = length(kamoku)
HSP2.61でのこと
配列の後ろに、番号を付ける。(kamoku.0) 15個以上使うときは、最初にdimで使う数を設定する。 dim kamoku,20 文字を扱うときは、sdim で設定する。 sdim 配列名,文字数,要素数 ひとつの科目名の文字数は20文字以下で、科目は10科目あるとすると、 sdim kamoku,20,10
テキストを読み込む
notesel 変数名 noteload "ファイル名" mes 変数名
変数名は何でも良い。bun とか、、、
一行が長い場合、自動的に改行はしてくれないので注意。
読み込むファイル形式と文字コードに注意
- Excelのcsvファイルは文字コードに注意
- UTF-8(BOMあり)だと、ファイルの先頭にBOMという特殊な文字が入り込んでしまう。
- エディターで、テキストファイルとして編集して、文字コードを確認して、拡張子を .txtにして読み込んだ方が安心。
- SJISにしておくのが安全。
画像を読み込む
picload "ファイル名"
ウインドウサイズは、読みこんだ画像の大きさになる。
事前にウインドウを表示して、その中に画像を位置づけるには、
pos 100, 200 picload "ファイル名", 1
dialog を使ってテキストファイルを読み込む
dialog "拡張子", 16, "補足説明"
- dialogのオプション 16 で、ファイル選択のウィンドウが開く
- 読み込んだファイル名は refstr というシステム関数に保存される。
- ファイル名は絶対パスでドライブ名・ディレクトリー名付き
notesel nakami ;読み込んだ中身を入れておく dialog "csv", 16, "CSVファイルを選んでね" ;拡張子 csvのファイルを開く ;ファイル名は refstr に入る noteload refstr ;開いたファイルの中身を読み込む pos 100, 100 mes refstr ;ファイル名の表示 mes nakami ;ファイルの中身の表示 mes notemax ;ファイルの行数の表示 stop
dialog を使って音声ファイルを読み込み再生する
;2021-06-25 sugiura@nagoya-u.jp dialog "mp3", 16, "Choose mp3" ;拡張子 mp3のファイルを開く ;ファイル名は refstr に入る pos 100, 100 mes refstr ;ファイル名の表示 mmload refstr, 1 ;ファイルをバッファ1に読み込む button gosub "Play", *play ;ボタンを押したら、再生へ button "Quit", *owari stop *owari end *play mmplay 1 ;再生実行 return
dialog を使って動画ファイルを読み込み再生する
;2021-06-25 sugiura@nagoya-u.jp dialog "avi", 16, "Choose avi" ;拡張子 aviのファイルを開く ;ファイル名は refstr に入る pos 100, 100 mes refstr ;ファイル名の表示 mmload refstr, 1 ;ファイルをバッファ1に読み込む button gosub "Play", *play ;ボタンを押したら、再生へ button "Quit", *owari stop *owari end *play mmplay 1 ;再生実行 return
getkey と stick の違い
getkeyは連続してキーの値を受け付ける。
stickはキーを押したときに一度だけ値を受け取る。
repeat ; getkey a, 32 ; 特定のキーを先に想定 ; if a&1 : break ; a には、そのキーが押されたという意味の「1」が入っている。 stick a, 0 ; 何が押されるかはわからない if a&16 : break ; a には押されたキーのコードが入っている。 loop mes "Hit" stop
キーボードやマウスボタンのコード (stick)
「ヘルプ」の「HSP命令リファレンスを開く」でstickの項目を見る。
1 : カーソルキー左(←) 2 : カーソルキー上(↑) 4 : カーソルキー右(→) 8 : カーソルキー下(↓) 16 : スペースキー 32 : Enterキー 64 : Ctrlキー 128 : ESCキー 256 : マウスの左ボタン 512 : マウスの右ボタン 1024 : TABキー
キーボードやマウスボタンのコード (getkey)
「ヘルプ」の「HSP命令リファレンスを開く」でgetkeyの項目を見る。
1 : マウスの左ボタン 2 : マウスの右ボタン 3 : キャンセル([CTRL]+[BREAK]) 4 : 3ボタンマウスのまん中のボタン 8 : [BACKSPACE](PC98の[BS]) 9 : [TAB] 13 : [ENTER] 16 : [SHIFT] 17 : [CTRL] 18 : [ALT](PC98の[GRPH]) 20 : [CAPSLOCK] 27 : [ESC] 32 : スペースキー 33 : [PAGEUP](PC98の[ROLLDOWN]) 34 : [PAGEDOWN](PC98の[ROLLUP]) 35 : [END](PC98の[HELP]) 36 : [HOME](PC98の[HOMECLR]) 37 : カーソルキー[←] 38 : カーソルキー[↑] 39 : カーソルキー[→] 40 : カーソルキー[↓] 48〜57 : [0]〜[9](メインキーボード) 65〜90 : [A]〜[Z]
動きを一時停止する
wait 300 ; 300 x 10ミリ秒 = 3秒 待つ
画面の色を変える
=画面と同じ大きさの四角を、色で塗りつぶす
color 0,255,255 : boxf 0,0,640,480
colorコマンドで色を指定し、直後に、boxfコマンドで範囲を指定する。
boxf: 四角い範囲を指定して色で塗りつぶす。
四角い範囲=ウィンドウの大きさ にすると画面全体の色が変わる。
boxf は、範囲を指定しなければ、ウインドウ全体を塗りつぶす。だから、結論としては、画面の色を変えるには、
color 0,255,0 : boxf
とするだけでよい。
色を設定する
RGB値で指定する
color 0,200,0 color Red, Green, Blue
- 0(暗い) - 255(明るい)で値を決める。
0, 0, 0; black 255, 0, 0; red 0, 255, 0; green 0, 0, 255; blue 0, 255, 255; light blue 255, 0, 255; purple 255, 255, 0; yellow 255, 255, 255; white 255, 165, 0; orange 255, 200, 200; pink
- colorだけで数字を指定しないと、黒になる
文字列の一部だけ色を変える
- colorで文字の色を指定し
- mes命令のオプション 1 で改行しないようにする
mes "ここは黒",1 :color 255, 0, 0: mes "ここは赤", 1: color: mes "後ろを黒に"
フォントを指定する
font "MS ゴシック", 32, 1
font "フォント名", サイズ, スタイル
スタイルの設定
1 太字 2 イタリック 4 下線 8 打ち消し線 16 アンチエイリアス
スタイルを組み合わせたい場合は、数字を足す。
位置を指定する
pos 左上横, 左上縦
ウィンドウの広さはデフォルトでは 640 x 480
実際に実験する際に注意すること
プログラムの実行中にHSPのプログラム以外のものが動いたりして、測定に影響を与えるといけないので、以下の点に注意すること。
1)スクリーンセーバーを切っておく
2)電源の設定で、節電にしないこと。(処理能力最優先にする)
3)ネットワークの接続をすべて無効にしておく。
4)ウイルスチェックのプログラムを止めておく。
5)WindowsUpdateなどの自動更新を止めておく。
6)画面の色を必要最低限にする。
7)デスクトップの背景に何もないようにする。
主なコマンド
str
変数を文字列型に変更。
オプションで、ゼロを含めた桁数にできる。
str 数値を含む変数, オプション
suuji= 7 str suuji, 2
これによりsuujiには「07」という文字列が入る。
strlen
文字列の長さを調べる。
strlen 結果の変数名, 調べたい文字列
全角は2文字分。
strmid
- 部分的に文字列を取り出す。
何文字目から何文字取り出すか、と指定する。
strmid 結果を保存する変数, 取り出し元の変数, 何文字目から, 何文字分を
text='When I was a child, I lived in Tokyo.' strmid kekka, text, 7, 3
kekkaには、「was」が入る。
文字の位置は0から始まる。7と指定すると8文字目から。
- 特定の文字列以降を取り出すには
text='When I was a child, I lived in Tokyo.' instr koko, text, "," : getstr kekka, text, koko+2
カンマ以降をとりだし、kekkaには「I lived in Tokyo.」が入る。
前半でinstrでカンマの位置を調べて、後半でgetstrでカンマの位置に直後のスペース一文字分を足して「2」を足した位置から行末までをkekkaに保存する。
instr
検索文字列が何文字目にあるかを調べる。
instr 結果を保存する変数, 検索対象の変数, "検索文字列", 何文字目から検索するか
第4項目の「何文字目から検索するか」を指定しなければ行頭から。
結果は、数字で保存される。1文字目が「0」となる。
文字列がなければ「-1」が結果となる。
text='When I was a child, I lived in Tokyo.' instr kekka, text, "was"
kekkaは「7」となる。
getstr
文字列を取り出す。
getstr 結果を保存する変数, 取り出し元の変数, 何バイト目から, どこまで
第4項目の「どこまで」を指定しなければ行末まで。
「どこまで」は区切りとする文字で指定する。例:','
kekka text='When I was a child, I lived in Tokyo.' getstr kekka, 0, text, ','
text中の0文字目からカンマまでを取り出して、kekkaに入れる。
kekkaには「When I was a child」が入る。
gettime 時間の情報を得る
変数 = gettime (パラメタ)
パラメタで、時間のどの情報を得るかを設定
0 年 1 月 2 曜日 3 日 4 時 5 分 6 秒 7 ミリ秒
現在、何時 何分 何秒か?
ji = gettime(4) fun = gettime(5) byo = gettime(6) mes "今は"+ji+"時"+fun+"分"+byo+"秒です"
objimage 画像をボタンにする
objimage-sugiura.hsp(581)
; ; 画像をボタンにする ; buffer 1 ; 画像を事前に読み込んでおく場所の番号 picload "flower1.jpg" ; 画像を読み込んで、bufferに入れておく screen 0,640,480 ; ウインドウの初期化 0番、ウインドウの大きさの指定 ; bufferを使って画像を読み込んだときは、明示的にウィンドウを指定する pos 300, 200 ; ボタンの位置 objsize 180,180 ; ボタンにする画像のサイズ(大きな画像を読み込んでおいて、その一部を ; ボタンとして使用することもできる。) objimage 1 ; ボタン画像の指定をする。最初の番号が buffer番号 ;objimage 1, 0,0, 0,1, 0,2 ; ボタン画像の指定をする。 ; 最初の番号が buffer番号 ; 次の数字の組み合わせが、表示する画像の中の左上の位置 ; その次の数字の組み合わせが、ボタンを押したときの位置 ; 最後の数字の組み合わせが、ボタンの上にマウスが来たときの位置 button gosub "", *say ; ボタン命令で、上で設定した画像がボタンとして使われる。 stop *say mes "Hello!" return
flower1.jpg(3852)
絵を押すと音が鳴る
objimage-sound.hsp(169)
objimage-sound.exe(185)
; 透明ボタンと音声再生 objimage-sound.hsp ; copyleft 2022-07-14 sugiura@nagoya-u.jp ; 画像をボタンにする #pack "left.mp3" #pack "right.mp3" #pack "flower1.jpg" bcopy "left.mp3", "left.mp3" bcopy "right.mp3", "right.mp3" ; 音声ファイル読み込み mmload "left.mp3", 1 mmload "right.mp3", 2 ; buffer 1 ; 画像を事前に読み込んでおく場所の番号 picload "flower1.jpg" ; 画像を読み込んで、bufferに入れておく screen 0,640,480 ; ウインドウの初期化 0番、ウインドウの大きさの指定 ; bufferを使って画像を読み込んだときは、明示的にウィンドウを指定する pos 100, 200 ; ボタンの位置 objsize 90,180 ; ボタンにする画像のサイズ(大きな画像を読み込んでおいて、その一部を ; ボタンとして使用することもできる。) ;objimage 1 ; ボタン画像の指定をする。最初の番号が buffer番号 objimage 1, 0,0, 0,1, 0,2 ; ボタン画像の指定をする。 ; 最初の番号が buffer番号 ; 次の数字の組み合わせが、表示する画像の中の左上の位置 ; その次の数字の組み合わせが、ボタンを押したときの位置 ; 最後の数字の組み合わせが、ボタンの上にマウスが来たときの位置 button gosub "", *left ; ボタン命令で、上で設定した画像がボタンとして使われる。 pos 300, 200 objsize 90, 180 objimage 1, 90,0, 90,1, 90,2 button gosub "", *right stop *left mmplay 1 return *right mmplay 2 return
rnd() ランダムな数字
二種類の画像のボタンを使うには
- 事前に二種類の画像を合わせた一枚の画像を用意する。
- 二種類の画像を左右に並べたとして、
- 左側と右側の画像をそれぞれ左上隅の座標で指定することによって、
- 二つの画像のボタンを配置したように表示できる。
チェックボックスでアンケート
- チェックするだけ
ankeito.hsp(526)
- 自由記載欄とチェックボックス、結果をテキストファイルに保存。
ankeito-2.hsp(563)
システム変数
cnt
- デフォルトでは、0から始まる。
- あらかじめ指定しておけば、そこから始まる。
モジュール(開発中)
- 被験者の入力IDを保存ファイル名にする方法
- 問題がランダムに出るようにする方法
- 選択問題(ラジオボタン)
- 自由記載ボックス
CuteHSP
開発環境
VSCode
https://qiita.com/umuy/items/8e8e6f1e4ccc0387be2c
スマホでHSP
HSPDish
https://sites.google.com/site/simakuroneko/home/hsp3dish_course/env_const/page_1
https://sugiura-ken.org/wiki/