HSPでようやくノコギリ波の音を出すことができました…
致命的なミスが見つかったため、とりあえず修正して正弦波を出してみました
HSPでようやくノコギリ波の音を出すことができました…
// 色々準備
#include "winmm.as"
#define CALLBACK_FUNCTION 0x30000
#define CALLBACK_NULL 0
#define CALLBACK_WINDOW 0x10000
#define WHDR_BEGINLOOP 4
#define WHDR_ENDLOOP 8// 波形データ作成
waveDataSize=11025*2*3
syuuhasuu=262
sdim waveData,waveDataSize
repeat waveDataSize/2
if (cnt\(11025/syuuhasuu))=0 : data=0 : else : data+
wpoke waveData,cnt,data
loop// 再生準備
sdim WAVEFORMATEX,18
wpoke WAVEFORMATEX,0,1
wpoke WAVEFORMATEX,2,1
lpoke WAVEFORMATEX,4,11025
lpoke WAVEFORMATEX,8,11025*2
wpoke WAVEFORMATEX,12,2
wpoke WAVEFORMATEX,14,16sdim WAVEHDR,32
lpoke WAVEHDR,0,varptr(wavedata)
lpoke WAVEHDR,4,wavedatasize
lpoke WAVEHDR,16,WHDR_BEGINLOOP | WHDR_ENDLOOP
lpoke WAVEHDR,20,1waveOutOpen varptr(phwo),-1,varptr(WAVEFORMATEX),0,0,CALLBACK_NULL
waveOutPrepareHeader phwo,varptr(WAVEHDR),32
waveOutWrite phwo,varptr(WAVEHDR),32
wait 500
waveOutReset phwo
waveOutUnprepareHeader phwo,varptr(WAVEHDR),32
waveOutClose phwo
- 補足 -
// 色々準備
#include "winmm.as"
#define CALLBACK_FUNCTION 0x30000
#define CALLBACK_NULL 0
#define CALLBACK_WINDOW 0x10000
#define WHDR_BEGINLOOP 4
#define WHDR_ENDLOOP 8onexit *exit
// 波形データ作成
// -32768~32767
waveDataSize=22100*2*8
syuuhasuu=262,294,330,349,392,440,494,523
sdim waveData,waveDataSize
repeat waveDataSize/2
if (cnt\(22100/syuuhasuu(oto)))=0 : data=-100 : else : data+
wpoke waveData,cnt,data
if (cnt\22100)=22099 : oto+
loop// 再生準備
sdim WAVEFORMATEX,18
wpoke WAVEFORMATEX,0,1
wpoke WAVEFORMATEX,2,1
lpoke WAVEFORMATEX,4,11025
lpoke WAVEFORMATEX,8,22100
wpoke WAVEFORMATEX,12,2
wpoke WAVEFORMATEX,14,16sdim WAVEHDR,32
lpoke WAVEHDR,0,varptr(wavedata)
lpoke WAVEHDR,4,wavedatasize
lpoke WAVEHDR,16,WHDR_BEGINLOOP | WHDR_ENDLOOP
lpoke WAVEHDR,20,1waveOutOpen varptr(phwo),-1,varptr(WAVEFORMATEX),0,0,CALLBACK_NULL
waveOutPrepareHeader phwo,varptr(WAVEHDR),32
waveOutWrite phwo,varptr(WAVEHDR),32
stop
*exit
waveOutReset phwo
waveOutUnprepareHeader phwo,varptr(WAVEHDR),32
waveOutClose phwo
end
他にも改良したところあるので使うならこっちで。すいません。
おおっ、すごいです!
ノゴキリ波っぽい音ですね^^ 正しいと思います。
ファミコン風のゲームを作るときなどに活用できるかも……
波形データさえ作れればファミコンのような音やFM音源のようなのとか出せると思います。たぶん。
でも、私はその前に正弦波とか基本のがまだ作れていないので…頑張ろうと思います…。
たぶんノコギリは出せているものの、これだと音程変えると音量まで変化してしまう (一定の期間どんどん音量 (?) を上げて、ある時下げる、とやっているため) ので、ようやく音に出せるようになったので今度は波形データの作成を頑張ろうと思います。
おめでとうございます!
波とかよくわかりませんが、なんかすごいですね。
再生したところ、「おお、これがノコギリ波か。」みたいなww
これから頑張ってください。
はい。
…と、頑張ろうと思った矢先にすんごいひどいミスを見つけてしまいました… orz
波形データを作成するところで2バイトづつ書き込んでいるのに1バイトづつの所に書き込んでいるという…。なので半分の時間しか音が出ない…。
今度直します。すいません。
あ、お礼を書き忘れていた!すいません。
サイトとかの紹介、ありがとうございました。