(自分の勉強を兼ねて)実験がてら
screen 0,250,800
wds = 1024*1024*10
whs = 44
sr = 48000
sdim wavedata,wds+1
sdim waveheader,whs+1
lpoke waveheader,0,0x46464952 ;"RIFF"
lpoke waveheader,4,wds+whs-8 ;データサイズ+ヘッダーサイズ-8
lpoke waveheader,8,0x45564157 ;"WAVE"
lpoke waveheader,12,0x20746D66 ;"fmt "
lpoke waveheader,16,16 ;fmt チャンクのバイト数
wpoke waveheader,20,1 ;フォーマットID (01)
wpoke waveheader,22,2 ;モノラルは1,ステレオは2
lpoke waveheader,24,sr ;サンプリングレート
lpoke waveheader,28,sr*4 ;データ速度(サンプリングレート*4)
wpoke waveheader,32,4 ;ブロックサイズ (Byte/sample*チャンネル数)
wpoke waveheader,34,16 ;サンプルあたりのビット数
lpoke waveheader,36,$61746164 ;"data"
lpoke waveheader,40,wds ;波形データ
rad = 0.0
rad2 = 0.0
repeat wds/4
rad += 1000.0/48000.0*2
rad2 += 1000.0/48000.0*2
a = int(sin(rad )*32768)
b = int(sin(rad2)*32768)
wpoke wavedata,cnt*4,a
wpoke wavedata,cnt*4+2,b
loop
bsave "テスト.wav",waveheader,wds+whs,0
bsave "テスト.wav",wavedata,wds+whs,whs
;exec "テスト.wav" ,16 ;再生できる
;/*
repeat wds/4
as = wpeek(wavedata,cnt*4)
//処理
if as > 32768{
d = as - 65536
} else {
d = as
}
//
title strf("%05d,%05d",as,d)
redraw 0
color 255,255,255
boxf
color
pos 10,380
mes "wpeekで読み込んだデータ"
pos 130,410
mes "処理したデータ"
line 0,400,250,400
pos 100,as/250+400
mes "●"
pos 130,d/250+400
mes "●"
redraw 1
await 16
loop
;*/
stop
//もし実数にするなら
ddim data,wds/4
repeat wds/4
as = wpeek(wavedata,cnt*4)
if as > 32768{
d = as - 65536
} else {
d = as
}
data(cnt) = 0.000030517578125*d;double(d)/32768でも同じ
loop
stop