*Kor_Lee_Hee_Rak
-Haribote Wikiに初めて加入した韓国人
-他の韓国人たちの理解を助けるため, 同じ内容を Wiki-utfにもあげる予定です.
-生年月日:1996.12.13(Triangle Ld。氏の年齢がね。偶然ですけどね。もしかしたら迷惑な場合は、この括弧は削除させていただきます。コメントをお願いいたします。)
*HROS WOC System
HROS WOC Systemは HRProgram(私が導く刺身紗羅高でもしましょうか? 信じようが信じまいが)で作った運営体制です. RapuOSを基盤としてテーマも変えながらうちのことで作っています.
**起動音作り
起動音と言う(のは) Windowsが始まる時出る效果音を言います. 私が製作した osguzo.net46.net には初ページに Windows XP 起動音を入れたんです. 今度はこれを直接製作しようとします.
-準備物
--本: mmlplay.hrb 研究に必要です
--電卓: 複雑だから電卓に任せましょう
--書かない紙一枚: うーん別に周波数をメモするためだからです
--音楽ノート: ここに起動音を作曲しましょう
-作曲
--皆さんが願い次第に思いきり作曲してください. できるだけ簡潔ながらも美しくした方が良いです. とても長ければ人々が煩わしがるんですよ.
--これを MML 文法で整理して書かない紙にメモしておきます.
--MMLから出るうーんを縦で整理しておきます.
-ウムビョル周波数計算
--本の mmlplay.hrbを作る部分に見れば音の長さと周波数を計算する部分があります.
--出力音公式(Basic): tonetable(i Mod 12) / (2 ^ (17 - int(i / 12))+('+'があれば +1, '-'があれば -1, その外には 0)~
i=o * 12 + notetable[(アルファベット 音名) - asc('A')] + ('+'があれば +1, '-'があれば -1, その外には 0)~
o=オクターブ
---tonetable=array(1071618315, 1135340056, 1202850889, 1274376125, 1350154473, 1430438836, 1515497155, 1605613306, 1701088041, 1802240000, 1909406767, 2022946002)
---notetable=array(+9,+11,0,+2,+4,+5,+7) '順に A, B, C, D, E, F, G
--音長公式:[{(192/(音長)+('.'がいれば+(384/(音長), その外には 0))*125}/テムポ]*(音符の鋭い位)/8
-プログラムで整理
--これは下の関数を応用して作れば良いです.
#include "apilib.h"
void putsound(int timer, int length, int hertz1, int hertz2, int hertz3)
//この部分の hertzの数はみなさんが決めた和音の構成音の最大数位決めてください.
// 例えば, 3個の和音がいる時これら和音の構成音がそれぞれ (F, A, D), (C, E, G, O5C), (F, A)なら一番多
//い構成音がある (C, E, G, O5C)の構成音の受忍 4個を作れば良いです.
{
int i;
i=api_settimer(timer, length);
for(;i==128;i=api_getkey(1)){
api_beep(hertz1);//これは必ず出力します.
//他の和音の構成音が共通的に hertz#義 #異常あったら if(hertz#)
//構文を抜きます.
if(hertz2!=0) api_beep(hertz2);
if(hertz3!=0) api_beep(hertz3);
}
return 0;
}
//main 関数は上の関数を並べたのがなります.
(これする次に続きます.)
**ウィンドウ移動タスク
mmlplay.hrbで音楽を聞いています.~
窓を移しました.~
音楽が腰砕けになります.
こんな良くない事を解決する最高の方法は新しいタスクを作るのです.
私がただいま私はこれを修正して窓を移しながら音楽を聞くことができるようにしました.
***winmove.c
新たにこのファイルを作って MakeFileに登録させてください.~
登録しようとすれば Make Fileを開いて...(確かに分かるはずだが...)~~
そして winmove.cを下記のように編集します.
#include "bootpack.h"
#include <stdio.h>
struct WDATA wdatstr;
void winmove_task()
{
struct TASK *task = task_now()
for(;;)
{
io_cli()
if (fifo32_status(&task->fifo) != 0)
{
fifo32_get(&task->fifo)
io_sti()
sheet_slide(wdatstr.wsht, wdatstr.wnew_wx, wdatstr.wnew_wy)
}
else
{
task_sleep(task)
io_sti()
}
}
}
void winmove_move(struct SHEET *rsht, int rnew_wx, int rnew_wy, struct TASK *mytask)
{
wdatstr.wsht = rsht;
wdatstr.wnew_wx = rnew_wx;
wdatstr.wnew_wy = rnew_wy;
fifo32_put(&mytask->fifo, 1)
}
***bootpack.h
上の winmove.cに登録した関数と旧朝体を登録します.
struct WDATA {
struct SHEET *wsht;
int wnew_wx, wnew_wy;
};
void winmove_task()
void winmove_move(struct SHEET *rsht, int rnew_wx, int rnew_wy, struct TASK *mytask)
***bootpack.c
タスクをすぐ始動させるようにします(RapuOSに当たるように使いました. 修正法はみんなご存知でしょう?).
struct TASK *winmove = task_alloc()
int *winmove_fifo = (int *) memman_alloc_4k(memman, 128 * 4)
winmove->tss.esp = memman_alloc_4k(memman, 64 * 1024) + 64 * 1024;
winmove->tss.eip = (int) &winmove_task;
winmove->tss.es = 1 * 8;
winmove->tss.cs = 2 * 8;
winmove->tss.ss = 1 * 8;
winmove->tss.ds = 1 * 8;
winmove->tss.fs = 1 * 8;
winmove->tss.gs = 1 * 8;
winmove->time = 0;
strcpy(winmove->name, "WinMover.sce")
task_run(winmove, 3, 2) /* level=1, priority=2 */
fifo32_init(&winmove->fifo, 128, winmove_fifo, winmove)
最後に窓を移す部分を修正します. どうもはご存知でしょう?
if (fifo32_status(&fifo) == 0) {
/* FIFO? */
if (new_mx >= 0) {
io_sti()
sheet_slide(sht_mouse, new_mx, new_my)
new_mx = -1;
} else if (new_wx != 0x7fffffff) {
io_sti()
winmove_move(sht, new_wx, new_wy, winmove)
new_wx = 0x7fffffff;
} else {
task_sleep(task_a)
io_sti()
}
そしてテストします.~
mmlplay.htb daigo.mml(趣向に任せます)を実行させて~
窓をあちらこちらに掻き乱して見てください.~
*韓国語になる!!
http://hrprogram.comxa.com/hws_work0.jpg
この言葉は "私は李喜楽だ!!!"という意味です.~
ここには直接製作した韓国語フォントと出力ルチンが必要です. 韓国語フォントは内臓型だから今は修正することができません. バージョンが上がればフォントデータとともにフォント製作期もあげます.
*Comment
コメントのテストをしたが、それにもかかわらず、この現象は、昔のままですね。コメントを書く人々のためにosguzo.net46.netを利用してコメントを入れるようにしなければね。