|
|
2015/4/9(Thu) 15:26:16|NO.68473
Kernel32.dllの「beep」で使う周波数と音階をあわせてみた
モジュールです!
//英語版
#const C 262 //ド
#const D 294 //レ
#const E 330 //ミ
#const F 349 //ファ
#const G 292 //ソ
#const A 440 //ラ
#const B 494 //シ
#const C_ 523 //高いド
//日本語版
#const ド 262
#const レ 294
#const ミ 330
#const ファ 349
#const ソ 292
#const ラ 440
#const シ 494
#const ド_ 523
使用例
#include "kernel32.as"
//定数定義
#const C 262 //ド
#const D 294 //レ
#const E 330 //ミ
#const F 349 //ファ
#const G 292 //ソ
#const A 440 //ラ
#const B 494 //シ
#const C_ 523 //高いド
//定数定義終了
beep C,800 //ドがなる
/*ほかの音階も
この方法でできます。*/
簡単に説明させていただきます。
beep p1,p2
p1 鳴らす音の周波数(定数、変数も可)
p2 鳴らす長さ(単位はミリ秒 = await と同じ)
音がならない場合はPCが対応していないかもしれません。
長文申し訳ございません。
|
|
2015/4/9(Thu) 15:30:31|NO.68475
訂正です。
G と ソ は、292ではなく、392です。 申し訳ございません
|
|
2015/4/9(Thu) 19:12:06|NO.68476
ちゃんと矩形波で出るんですねぇ・・
むかし、音源が搭載されてないPC-9821でゲームを作ってみたときに
同じ方法で効果音作ってました。
|
|
2015/4/9(Thu) 21:16:16|NO.68478
こうですか?
#include "kernel32.as"
//定数定義
#const C 262 //ド
#const D 294 //レ
#const E 330 //ミ
#const F 349 //ファ
#const G 392 //ソ
#const A 440 //ラ
#const B 494 //シ
#const C_ 523 //高いド
// シャープ 半音上げ
#const CS 277 //ド
#const DS 311 //レ
#const FS 370 //ファ
#const GS 415 //ソ
#const AS 466 //ラ
#const CS_ 554 //高いド
//定数定義終了
v = 210
t = int(60000/ v)
beep A, t/2 //ラ
beep B, t/2 //シ
beep CS_,t*2 //高いド
beep B, t/2 //シ
beep A, t/2 //ラ
await t*4
beep A, t/2 //ラ
beep B, t/2 //シ
beep CS_,t/2 //高いド
beep B, t/2 //シ
beep A, t/2 //ラ
beep B, t+t/2 //シ
|
|
2015/4/9(Thu) 21:24:35|NO.68479
20年ほど前にMS-DOSで動く「N88-BASIC日本語版」があり、
ビープ音で演奏できる命令がありましたね。
HSPはN88-BASICを元にしてるのにビープ音を鳴らす命令がないですね。
MCIのmmplay命令があるから用意しなかったのかね。
とにかく懐かしいです。
|
|
2015/4/9(Thu) 22:09:58|NO.68480
簡易mml
#include "kernel32.as"
a(0)=440 //ラ
a(1)=0 //未使用
a(2)=262 //ド
a(3)=294 //レ
a(4)=330 //ミ
a(5)=349 //ファ
a(6)=392 //ソ
i=0
mml="ccggaagrffeeddcrggffeedrggffeedrccggaagrffeeddcr$"
mes "きらきら星 ※メロディは著作権切れだよ♪"
repeat
c=peek(mml,i): if c=$24 { goto *exit }
if c=$72 { await 500 } else { beep a(c-$61),500 }
i++: await 0
loop
*exit
mes "演奏おわり"
stop
|
|
2015/4/10(Fri) 11:05:08|NO.68488
ビープ音??なんのことかと思い
窓月さんのコードを実行したらパソコンの音で演奏が始まって感動しました!!
こんな事も出来るんですね。凄い
|
|
2015/4/11(Sat) 13:47:43|NO.68499
多数の返信ありがとうございました。
>窓月ららさん
僕もビープで音楽を作ろうと思ったのですが、そこまで短くなるとは
思っていませんでした。
ビープ演奏ありがとうございました。
>GENKIさん
そのとおりです。
シャープ音まで付け足していただいてありがとうございます。
>科学太郎さん
HSPはN88-BASICを元にしてるのですか。
少しN88-BASICについても調べてみたいと思います。
>ノダッシーさん
僕がこのビープ音を知ったのはつい最近で、
標準機能以外のことをやってみたいとWIN32APIを検索したときに出会いました。
ビープ音ってすごいですよね。
|
|
2015/8/4(Tue) 21:46:19|NO.70472
おお!これはなかなか面白い。
なにか面白いソフト作れそうですね。
|
|
2015/8/5(Wed) 01:27:26|NO.70483
和音は無理なようです。
#include "kernel32.as"
#enum WHITE = 0
#enum BLACK
a_KEY = 160, 65, 90, 83, 88, 67, 70, 86, 71, 66, 78, 74, 77, 75, 188, 76, 190, 191, 186, 226, 221, 81, 87, 51, 69, 52, 82, 53, 84, 89, 55, 85, 56, 73, 79, 48, 80, 189, 192, 222, 219,13, 9, 49
screen 0, 576, 120
*main
redraw 2
color $FF, $FF, $FF : boxf
color: boxf -8, -1, 7, ginfo_winY / 2: color $80, $80, $80:boxf -7, 1, 6, ginfo_winY / 2 - 1
if ginfo_act = 0{
foreach a_KEY
getkey v_onkey, a_KEY(cnt)
if v_onkey { v_onkey = cnt :break} else : v_onkey = -1
loop
if 42 <= v_onkey : v_onkey -= 23
}
a_LINE = 0, 1
foreach a_KEY
v_key_pos = cnt \ 12
if v_key_pos = 1 | v_key_pos = 3 | v_key_pos = 6 | v_key_pos = 8 | v_key_pos = 11 : v_temp++ : else : v_temp = 0
if v_temp {
if v_key_pos = 6 : a_LINE(BLACK)++
color
boxf 24 * a_LINE(BLACK) - 8, -1, 24 * a_LINE(BLACK) + 7, ginfo_winY / 2
if cnt = v_onkey : color $FF : else : color $80, $80, $80
boxf 24 * a_LINE(BLACK) - 7, 1, 24 * a_LINE(BLACK) + 6, ginfo_winY / 2 - 1
if v_key_pos = 8 : a_LINE(BLACK)++
a_LINE(BLACK)++
} else {
color
if v_key_pos = 5 or v_key_pos = 10 : line 24 * a_LINE(WHITE) , -1, 24 * a_LINE(WHITE), ginfo_winY + 1 : else : line 24 * a_LINE(WHITE), ginfo_winY / 2, 24 * a_LINE(WHITE), ginfo_winY + 1
if cnt = v_onkey : color $FF : else : color $FF, $FF, $FF
boxf 24 * a_LINE(WHITE) + 1 , ginfo_winY / 2 + 1, 24 * a_LINE(WHITE) + 23, ginfo_winY - 1
a_LINE(WHITE)++
}
loop
redraw 1
if 0 <= v_onkey : beep int(powf(2,(-2.0+v_onkey)/12)*220),110
await 100
goto *main
stop
| |
|
2015/8/5(Wed) 03:25:44|NO.70490
耳年齢テストなんかも作れますな。
音量は控えめに
#include "kernel32.as"
mes "耳年齢テスト"
objsize 120,25
button "8000Hz(全年齢)",*play
button "12000Hz(50才以下)",*play
button "15000Hz(40才以下)",*play
button "16000Hz(30才以下)",*play
button "18000Hz(20才以下)",*play
hz=8000,12000,15000,16000,18000
stop
*play
title ""+hz.stat
Beep hz.stat,2000
title ""
stop
|
|
2015/8/5(Wed) 12:03:56|NO.70501
その聴力テストですが、再生する機材でも左右されます
まずスピーカーやヘッドフォンが超高域を再生できるか
更にはサウンドデバイスがローパスフィルタをかけてないのが大前提
仮に高音の方が聴こえないからといってボリューム上げないように、危険です
16000まで聴こえてるなら正常
|
|
2015/8/5(Wed) 12:06:29|NO.70502
よく考えたら、ビープでローパスフィルタなんてかかってないかな
|
|
2015/8/5(Wed) 18:27:22|NO.70509
Mitukiさんのプログラムについて。
repeat 1539
1539回という中途半端な数字の意味はあるのでしょうか?
そしてループ内にmesで何度も描画する意味も1行毎に分ける意味もないような・・・
改行のやり方なら「\n」ですよ。
|
|
2015/8/6(Thu) 00:06:21|NO.70515
Beep関数の第一引数は、37(0x25)から 32767(0x7FFF)までの値が指定できます。
なので5000Hz刻みだと 5kHz〜30kHzまでの6つしか指定できません。これ以外を指定している音が出ているかはわかりません。
ちなみに1539も繰り返すと何回もオーバーフロー繰り返してまともな値だったりそうでなかったりを繰り返します。
また37Hzを指定してもブザーの性能が37Hzに対応していないと37Hzの音は出ません。
一般的なマザーボード用のブザーが対応している周波数範囲を調べようと思ったんですが、見つけることが出来ませんでした…。
というかそもそもBeep音の波形ってサイン波じゃなくて矩形波とかだったような…音聞いてもそんな音ですし。(あとは詳しい方にまかせた)
またサイン波以外だと指定した以外の周波数も入ってきます。
そういうわけで残念ながらBeep音での耳年齢の評価は無理ですよ。
耳年齢の評価をするならスピーカーを使って、サイン波を再生する必要があります。
しかしまたスピーカーにも再生可能な周波数範囲がありまして…。
> 改行のやり方なら「\n」ですよ。
これだと1行にまとめないといけないのでスクリプトがみにくくなりますよ。
かといって
s = "あいうえお\n"
s+= "かきくけこ"
mes s
と変数に代入しても1行増えるし余計な変数を使わないといけない…。
なのでmes繰り返したほうがスッキリお手軽です。このぐらいなら処理速度も影響ないですし。
しかしこう書いたほうがもっと書く量が一番減らせて楽なんですけどね。
mes {"
あいうえお
かきくけこ"}
最近この書き方見かけないな…。
|
|
2015/8/6(Thu) 00:44:52|NO.70517
GENKIさん>
BEEPの波形は矩形波であってます。
矩形波は倍音成分が多いので、おっしゃるとおり
聴覚検査で使うなら、サイン波(正弦波)ですね。
・・・ま、BEEPはお遊びネタなんで。
|
|
2015/8/6(Thu) 02:03:26|NO.70518
いまどきのPCではBeep関数でもサウンドカードから音が出るので問題ないと思ってたんですが
どうやらwin7以降の話でVistaでは普通にビープ音が鳴るようです。
その場合は皆さんのおっしゃる通りちゃんとした音が鳴らないと思います。
|
|
2015/8/6(Thu) 10:19:51|NO.70520
>>GENKIさん
言われてみれば\nって1行になるんだった・・・
確かにこの場合は{}を勧めるべきでした・・・
|
|
2015/8/8(Sat) 11:46:00|NO.70556
> いまどきのPCではBeep関数でもサウンドカードから音が出るので問題ないと思ってたんですが
そんなバカな…とか思いながら調べてみたらその通りのようです。
Vistaなんでまったく気づきませんでした。失礼しました。
Beepにあんな経緯があったんですね。Microsoftも古い仕様への対応は苦労しているようで。
> ・・・ま、BEEPはお遊びネタなんで。
どうせ遊ぶなら徹底しようかと…。
|
|
2015/8/24(Mon) 21:08:42|NO.71042
ほー。MS-DOSでもあったのか。
|
|
2015/8/24(Mon) 23:22:34|NO.71044
fofoさんの言うとおり、
Windows7以降ではサウンドカードから音が出るんですね。
しかし、それがサイン波とは個人的にはなんか残念ですね。
折角なら、Microsoft社には、
矩形波でビープ音を再現して欲しかったです。
サイン波で再現した方が簡単という事もないでしょうから。
|
|
2015/8/25(Tue) 18:17:35|NO.71061
Windows7なのでサウンドカードを使用していますね。
すごく進化してます(笑)
|
|
2015/9/17(Thu) 17:50:13|NO.71763
ちょっと、見たいので、、ごめんなさい。
|
|
2015/9/17(Thu) 18:20:48|NO.71765
うふぇえ、疲れた・・・
#include "kernel32.as"
*next1
beep 380,200
wait 50
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 380,200
beep 350,200
beep 300,200
beep 350,200
*next2
beep 380,200
wait 50
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 380,200
beep 450,200
beep 450,200
beep 495,200
beep 375,200
wait 50
*next3
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 380,200
wait 50
beep 350,200
beep 400,200
beep 450,200
beep 450,200
beep 500,200
*next4
beep 400,200
wait 25
beep 400,200
beep 350,200
beep 320,200
wait 25
beep 320,200
beep 370,200
beep 450,200
beep 510,200
beep 570,200
beep 510,200
beep 450,200
beep 370,200
beep 320,200
beep 280,200
beep 320,3000
*mf1
beep 320,200
wait 20
beep 320,200
beep 380,200
beep 240,1000
wait 50
beep 210,200
beep 230,200
beep 210,200
beep 230,200
beep 280,200
*mf2
beep 320,200
beep 320,200
wait 30
beep 320,200
beep 370,200
beep 240,500
wait 20
beep 220,200
beep 290,200
beep 290,200
beep 260,200
beep 220,200
beep 245,200
wait 50
*mf3
途中までしかかけなかった・・・
| |
|
2016/1/7(Thu) 00:51:39|NO.74030
age(ごめん)
|
|
2016/1/7(Thu) 16:55:15|NO.74038
Mitukiさんは何が言いたいんですか?
|
|
2016/1/19(Tue) 21:25:53|NO.74195
スレッドを上げることをageといいます
|
|
2016/6/29(Wed) 21:11:26|NO.76029
これは便利!
上げようと思い書き込みます
|
|
2016/7/17(Sun) 22:40:04|NO.76234
Beep音が矩形波では亡くなってしまったことを知ってもう1年か…早いなー。
矩形波の音(昔のビープ音風)を出すモジュールを作成したのでageますね。
このスレがなければ作らなかったと思います。
mod_beepモジュール
http://mclab.uunyan.com/dl/dl44.htm
|
|
2017/1/17(Tue) 08:43:34|NO.77964
ほんとにお世話になってるのでちょっとageますね、
なんか、ごめんなさい。
|
|
2017/1/17(Tue) 20:32:46|NO.77967
ビープ音の実際の味わいは、スピーカーじゃ出ないと言うか
出せないんだよな。乾いた独特の高音は金属板(正弦波じゃ
鳴らない)でないと味わえないでしょう。
9800ノートから奏でられるメロディーを思い出して、ち
ょっと懐かしく思います。
|
|
2017/3/19(Sun) 11:41:53|NO.78593
迷惑だとおもいますが、ageます。
|
|
2017/3/20(Mon) 08:50:21|NO.78611
迷惑だと思うならレスつけなければいいんじゃないですかね
実際頻繁に上がってきてまたかって感じなんですが
|
|