'## '## A simple sound generator '## '## By Premysl Janouch a.k.a. [W]arriant, August 2006 '## warriant@gmail.com '## '## '## internal PlayWav can't play files from memory Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (lpszName As long, hModule As Long, dwFlags As Long) As Long declare sub play dim soundstream as qmemorystream application.title = "Test" create form as qform clientheight = 85'45 clientwidth = 120 center borderstyle = 3 caption = "Sound" create label as qlabel top = 5 left = 5 width = 100 height = 15 caption = "Volume:" end create create trackbar as qtrackbar top = 20 left = 5 width = 110 height = 22 tickstyle = 0 max = 100 position = 90 end create create playbutton as qcoolbtn caption = "Play" top = 55 left = 5 height = 25 width = 110 onclick = play end create end create form.showmodal sub play playbutton.caption = "Wait..." doevents '## stop sound and delete it playsound(0, 0, 0) soundstream.close soundstream.writestr("RIFF", 4) '## indicates wave file header chunk soundstream.writenum(640032, 4) '## total length of package to follow, 4 bytes soundstream.writestr("WAVE", 4) soundstream.writestr("fmt ", 4) '## begin format chunk soundstream.writenum(16, 4) '## length of format chunk soundstream.writenum(1, 2) '## WAVE_FORMAT_PCM soundstream.writenum(2, 2) '## channels 1-mono 2-stereo soundstream.writenum(44100, 4) '## sample rate in Hz soundstream.writenum(176400, 4) '## bytes per second (samplerate * channels * bytespersample) soundstream.writenum(2, 2) '## bytes per sample soundstream.writenum(16, 2) '## bits per sample soundstream.writestr("data", 4) '## begin data chunk soundstream.writenum(640000, 4) '## length of data to follow '## generate a sound '## 160000 samples * 2 bytes * 2 channels = 640000 bytes for t = 1 to 160000 '## I know, it isn't very nice, but it's simple '## use "+" instead of "xor" for clean mixing of frequencies soundstream.writenum((cos(t / 51) xor sin(t / 150)) * (t / 160000) * (163.83 * trackbar.position), 2) '## left channel soundstream.writenum((sin(t / 51) xor cos(t / 150)) * ((160000 - t) / 160000) * (163.83 * trackbar.position), 2) '## right channel next '## play from memory playsound(soundstream.pointer, 0, 5) playbutton.caption = "Play" end sub