トップ 履歴 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

TextForHSP04

*disclaimer
603183

[HSP]

04. 画像と音声の取り扱い、それとメッセージボックス


ほかの人のを見てみましょう。


 0.4 「10問クイズ」の改良


例) 10monQuizColor2.hsp(182)

  • 正解のフィードバックつき
  • 11問に

;10monQuizColor2
;copyleft 2007-05-10 sugiura@nagoya-u.jp
;2017-06-09 フィードバックkaitou追加
;2018-06-15 スペースと色づけ 70行目以降
;2020-06-12 問題数が10問以外も対応 小数点のある計算

; 1) データを記録し、ファイルとして保存する。
; 2) 問題番号を出す。
; 3) 条件に応じてメッセージを出す。
; 4) 色を変えることで、場面の変化を伝える。


toi(0) = "アメリカの首都はニューヨークである"
seitou(0) = 0
kaitou(0) = "Washington D.C.です"
toi(1) = "カリフォルニアの州都はロサンジェルスである"
seitou(1) = 0
kaitou(1) = "サクラメントです"
toi(2) = "ネバダ州のリノはロサンジェルスよりも西にある"
seitou(2) = 1
kaitou(2) = "意外とロサンジェルスは東にあります"
toi(3) = "アメリカの公用語は英語である"
seitou(3) = 0
kaitou(3) = "法律で公用語は決まっていません"
toi(4) = "バーモント州はカレーで有名である"
seitou(4) = 0
kaitou(4) = "りんごと蜂蜜は取れますがカレーは作っていません"
toi(5) = "アメリカには国民健康保険がない"
seitou(5) = 1
kaitou(5) = "そういう国の制度がないのです"
toi(6) = "アメリカには戸籍がない"
seitou(6) = 1
kaitou(6) = "戸籍はありません"
toi(7) = "アメリカで生まれた子は無条件でアメリカの国籍を得る"
seitou(7) = 1
kaitou(7) = "不法滞在の子も得られます(出生地主義)"
toi(8) = "アメリカの政府はアメリカの紙幣を発行していない"
seitou(8) = 1
kaitou(8) = "連邦準備制度理事会というところが印刷しています"
toi(9) = "グアムはハワイ州に属する"
seitou(9) = 0
kaitou(9) = "独立した「準州」です"
toi(10) = "Star Trekに出ていたMr. Katoは実は中国系である"
seitou(10) = 0
kaitou(10) = "日系です"

;------------------記録する準備---------------------------

notesel kiroku					; 記録する「ノート」の領域を設ける

kiroku = ""						; ノートを空っぽにしておく(「文字」である点に注意:0ではない)

;-----------------プログラムの本流------------------------
mondaisuu = length(toi)

*main

for i, 0, mondaisuu, 1

	gosub *settei

	mon = i + 1					; 問題番号を表示するために1を足す。

	mes "第"+mon+"問"			; 問題番号を提示
	mes ""
	mes toi(i)					; 問題文を提示

	if seitou(i) == 1 {
		gosub *yes
	} else {
		gosub *no
	}
	;---------------------------------追加------------
	mes ""						; 一行空けて
	color 255,0,0				; 赤色で
	mes kaitou(i)				; 解答をフィードバック
	;-------------------------------------------------
	wait 300
next

;---------------終了する際に-----------------------------
*owari
	cls
	color 255, 10, 10: boxf		; 場面の変化を背景の色で伝える。

	color 0,0,0
	font "M S 明朝", 24, 1
	pos 70, 100
	mes ""

;----
	zenbu = length(toi) ; 問題数は全部で、、、

	wariai = double(wariai) ; 割合を実数(小数も)で
	maru = double(maru)
	zenbu = double(zenbu)

	wariai = (maru/zenbu) * 100 ; 小数点以下も含めて計算

	wariai = int(wariai) ; 整数(小数点以下切捨て)に戻す
;----
	
	;wariai = maru * 10
	mes "正答率は"+wariai+"%でした"
	mes ""
	if wariai >= 80 : mes "よくできました" ; 正答率に応じてメッセージを出す
	if wariai <= 50 : mes "もっとがんばりましょう"

	wait 300


	noteadd "正答率は"+wariai+"%でした" ; 「ノート」の最後に正答率も記録
	notesave "log.txt"				; 「ノート」を保存するファイル名を設定し保存する。

end

;--------------------------sub-------------------------

*settei
	cls
	;------------------------------------------------------
	red = rnd(256) 						; 赤色をランダムに
	;------------------------------------------------------
	color red, 200, 200: boxf			; 背景色に
	
	color 0,0,0
	font "M S 明朝", 24, 1
	pos 70, 100
	mes ""
	mes "正しい場合は、マウスの左ボタン。"
	mes "間違いの場合、マウスの右ボタン。"
	mes "-------------------------------"
	mes ""
return

*yes
	repeat
		stick key
		if key==256 : noteadd "左○" : maru = maru + 1 : color 10, 10, 255: mes "Good!" : break ; 「ノート」にデータを記録
		if key==512 : noteadd "右×" : batu = batu + 1 : color 255, 10, 10: mes "No!" : wait 100 : break
	await 1
	loop
return

*no
	repeat
		stick key
		if key==256 : noteadd "左×" : batu = batu + 1 : color 255, 10, 10: mes "No!" : wait 100 : break
		if key==512 : noteadd "右○" : maru = maru + 1 : color 10, 10, 255: mes "Good!" : break
	await 1
	loop
return

  04.1 画像の取扱


  • 画像ファイルはスクリプトと同じフォルダーに)
picload "ファイル名", オプション

  • オプション
    • 1 で、開いているウインドウ内に画像を表示(普通こちら)

picload "flower.jpg", 1

  • 0 で、画像を表示し、開いているウインドウを画像の大きさに合わせる。
    • つまり、ウインドウが画像そのものの大きさになる。
picload "flower.jpg", 0


  04.2 音声の取扱


準備として音声をプログラム内に読み込んでおく

mmload "ファイル名", バッファ番号
  • 「バッファ」というのは一時的な保存場所のこと
  • 番号を指定して、音声を鳴らす
mmplay バッファ番号


  04.3 メッセージボックス


複数行のメッセージを表示したり、メッセージの記入欄として使う箱。
ここでは最初にメッセージの記入欄として使う。

まず、文字を扱う、ということを宣言しておく

	変数名 = ""
	mesbox 変数名, 幅, 高さ, オプション, 文字数

オプションは

  • 1 で、書き換え可能=記入欄として使える
  • 0 で、書き換え不可=複数行のメッセージを表示する

文字数は 0としておく。

  • 0文字という意味ではなく、「制限なし」という意味
    • 書かないで省略すると、64文字が上限となる


  04.4 ボタンの大きさの変更


  ボタンの表示をする前に、

objsize 幅, 高さ
  • デフォルトは、 64 x 24  

  04.5 「村尾さんの例」


  • murao.hsp(141) (murao.zipに音声も画像も入っている)
; 2006村尾版の改良 by sugiura

; 必要な画像
; 17b.jpg
; murao2.jpg

; 必要な音声
; okonomiyaki.wav
; murao.wav

notesel kiroku ; 記録用ノートの準備

;-------------------------表紙のタイトル------------
pos 200, 150 ;
font "MSゴシック", 32, 1
mes "Photo Album"

font "MS明朝", 20
mes "−食べ物と飲み物編−"

pos 250, 300
button "はじめ", *tabemono ;
stop


;-------------------------------一つ目-----------
*tabemono

cls

pos 200, 10 ;
picload "17b.jpg" , 1 ; 画像ファイルを読み込む
; p2 を 1 にすることで、ウインドウ内に配置
; p2 を 0 にするとウインドウの大きさが
;     画像の大きさになってしまう。

objsize 140,30 ; ボタンの大きさを設定

pos 200, 250
button gosub "写真の説明を聞く", *okonomiyaki ; サブルーチンで音を鳴らす

pos 50, 300 ; 入力欄を用意する
tabe = "写真の感想を書いてください" ;変数に表示メッセージを代入する
mesbox tabe, 500, 64, 1 ; メッセージボックスを設置(書き換え可能)

; メッセージ, 右位置, 下位置, オプション
; オプションは 1で書き換え可能
;        0で書き換え不可能

objsize 60,24
pos 250, 400
button "つぎへ", *nomimono
stop

;--------------------------------二つ目--------------------------
*nomimono

noteadd "<お好み焼きの感想>" ; どこでノートに記録をとるかがポイント
noteadd tabe ; メッセージボックスの内容をノートに記録

cls

pos 250, 10
picload "murao2.jpg" , 1
objsize 140,30
pos 250, 250
button gosub "写真の説明を聞く", *murao


pos 50, 300
nomi = "写真の感想を書いてください"
mesbox nomi, 500, 64, 1


objsize 60,24
pos 250, 400: button "おわり", *owari
stop


*owari
noteadd "<村尾の感想>"
noteadd nomi

notesave "murao.txt"
end


;--------------------------sub-----------
*okonomiyaki
mmload "okonomiyaki.wav", 0 ; 音声ファイルの読み込み, バッファ番号
mmplay 0 ; 音声の再生(バッファ番号で指定)
return

*murao
mmload "murao.wav", 1
mmplay 1
return

  04.6 「村尾さんの例」の修正(授業中の演習)


1. 指示文をメッセージボックスの中ではなく、
 その上に出し、メッセージボックスは空欄になるように修正してみる。

2. mmload を最初にやっておくように。


修正例


何も書かなかったら「警告」をだす。

dialog "メッセージ", オプション
  • オプションとして数字を指定
    • 0 標準+ OK
    • 1 警告+ OK
    • 2 標準+ はい・いいえ
    • 3 警告+ はい・いいえ

  04.7 著作権について: 著作権のポイント

  1. 表現の創造性を尊重する。
    1. (言葉そのものではない。)
    2. (アイデアではない。)
  2. 盗んではいけない。
    1. (勝手にひとが書いた表現をコピペしてはいけない。)
    2. (許してもらえばよい。= 契約書)
  3. ウソをついてはいけない。
    1. (人の書いたモノを自分が書いたと偽ってはいけない。)
  4. 「引用」はよい。
    1. (出典を示す)
  5. 学校教育での利用は例外的
    1. (日本での話)
    2. (「学校の授業」でないとだめ)

★どうすればよいか。

  1. 自分で作る
  2. 許可を得る
  3. 「引用」

  04.8 音声ファイルと画像ファイルの作成・編集について


音声


スタート > プログラム > アクセサリ > エンターテイメント > サウンドレコーダー(パソコンによる)

★ファイルの形式に注意:mp3 か wav

  • 音声の編集には SoundEngine

       http://soundengine.jp/software/soundengine/

  • スマホやICレコーダーで録音するのも便利

  • インターネットからダウンロード
  • 音声ファイルのサンプル

合成音声

  • 音読さん

https://ondoku3.com/ja/

画像


  • Windows: スタート > プログラム > アクセサリ > ペイント
  • HSPスクリプトエディタ: ツール > ペイントツールを開く

★ファイルの形式に注意:jpg や BMP

  • デジカメやスマホで撮る。
  • 画像の大きさに注意

画像生成

Bing Image Creator
https://www.bing.com/images/create

Mary is eating a piece of cake.
  • Image Creator に関する規約
    • Microsoft アカウントが必要であり、Microsoft Rewards のユーザーとしてサインインしている必要があります。
    • 個人の合法的な非商業的目的のために作成物を使用できます。
    • Microsoft は、...所有権を主張しません。
  • 注意点:Bingの検索履歴、Image Creatorのプロフィール、Image Creatorの履歴が記録される。

  04.9 その他の「部品」について

input

一行の文を入力したり、表示したりする。(全部指定しなくてもよい。変数だけは必要)

	input 変数, 横幅, 高さ, 文字数
	reibun = "Tom doesn't like cakes very much."
	input reibun
  • mesboxは複数行なのに対し input は一行だけ
  • 文字入力欄として使う場合、objsel命令で指定すれば、キャレットが表示される

チェックボックス

chkbox "項目名", 変数
  • 複数並べて使う。
  • チェックが入ったら、変数に 1 が入る。

リストボックス

listbox 変数, 縦方向サイズ,"項目を\nで区切って並べる"


コンボボックス

combox 変数, 縦方向サイズ, "項目"

  04.10 音声ファイルや画像ファイルをまとめて、一つの実行ファイルにするには

スクリプトの先頭に

#pack "ファイル名"

と書いて、実行ファイル自動作成をすればよい。
(昔はもう少し手間がかかっていた、、、)

★ただし、含めることのできる音声ファイルは.wavのみ。(mp3はだめ)

mp3ファイルの埋め込み方

  • パックしておいて、それを実行時にファイルに書き出して、それを読み
#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
  • 実例:絵を押すと音が鳴る

https://sugiura-ken.org/wiki/wiki.cgi/exp?page=HSP#p57

  • Reference

http://hsp.tv/play/pforum.php?mode=pastwch&num=25657

  今日の課題:

画像と音声を使った語学教材を作ってみてください。



=> TextForHSP05