HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0409
beep音階モジュール?32解決


リンク

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でゲームを作ってみたときに
同じ方法で効果音作ってました。



GENKI

リンク

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



fofo

リンク

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」ですよ。



GENKI

リンク

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はお遊びネタなんで。



fofo

リンク

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行になるんだった・・・
確かにこの場合は{}を勧めるべきでした・・・



GENKI

リンク

2015/8/8(Sat) 11:46:00|NO.70556

> いまどきのPCではBeep関数でもサウンドカードから音が出るので問題ないと思ってたんですが

そんなバカな…とか思いながら調べてみたらその通りのようです。
Vistaなんでまったく気づきませんでした。失礼しました。
Beepにあんな経緯があったんですね。Microsoftも古い仕様への対応は苦労しているようで。


> ・・・ま、BEEPはお遊びネタなんで。

どうせ遊ぶなら徹底しようかと…。



Mituki

リンク

2015/8/24(Mon) 21:08:42|NO.71042

ほー。MS-DOSでもあったのか。



空気

リンク

2015/8/24(Mon) 23:22:34|NO.71044

fofoさんの言うとおり、
Windows7以降ではサウンドカードから音が出るんですね。
しかし、それがサイン波とは個人的にはなんか残念ですね。
折角なら、Microsoft社には、
矩形波でビープ音を再現して欲しかったです。
サイン波で再現した方が簡単という事もないでしょうから。



Mituki

リンク

2015/8/25(Tue) 18:17:35|NO.71061

Windows7なのでサウンドカードを使用していますね。
すごく進化してます(笑)



Mituking[元mituki]

リンク

2015/9/17(Thu) 17:50:13|NO.71763

ちょっと、見たいので、、ごめんなさい。



Mituking[元mituki]

リンク

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
途中までしかかけなかった・・・



Mituki

リンク

2016/1/7(Thu) 00:51:39|NO.74030

age(ごめん)



kokl

リンク

2016/1/7(Thu) 16:55:15|NO.74038

Mitukiさんは何が言いたいんですか?



Mituki

リンク

2016/1/19(Tue) 21:25:53|NO.74195

スレッドを上げることをageといいます



jsa120

リンク

2016/6/29(Wed) 21:11:26|NO.76029

これは便利!
上げようと思い書き込みます



GENKI

リンク

2016/7/17(Sun) 22:40:04|NO.76234

Beep音が矩形波では亡くなってしまったことを知ってもう1年か…早いなー。
矩形波の音(昔のビープ音風)を出すモジュールを作成したのでageますね。
このスレがなければ作らなかったと思います。

mod_beepモジュール
http://mclab.uunyan.com/dl/dl44.htm



Mitumitu2017_Vita in 初心者

リンク

2017/1/17(Tue) 08:43:34|NO.77964

ほんとにお世話になってるのでちょっとageますね、
なんか、ごめんなさい。



KA

リンク

2017/1/17(Tue) 20:32:46|NO.77967

ビープ音の実際の味わいは、スピーカーじゃ出ないと言うか
出せないんだよな。乾いた独特の高音は金属板(正弦波じゃ
鳴らない)でないと味わえないでしょう。

9800ノートから奏でられるメロディーを思い出して、ち
ょっと懐かしく思います。



Mitumitu-Vita

リンク

2017/3/19(Sun) 11:41:53|NO.78593

迷惑だとおもいますが、ageます。



匿名希望

リンク

2017/3/20(Mon) 08:50:21|NO.78611

迷惑だと思うならレスつけなければいいんじゃないですかね
実際頻繁に上がってきてまたかって感じなんですが



ONION software Copyright 1997-2023(c) All rights reserved.