Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sdl2
- import sdl2/audio
- import math
- const BufferSizeInSamples = 2048
- const BytesPerSample = 2 # 16 bit PCM
- const BufferSizeInBytes = BufferSizeInSamples * BytesPerSample
- const SampleRate = 44100 # Hz
- const Frequence = 1000 # Hz
- const Volume = 0.1 # 0..1
- const x = (Frequence * 2000 / SampleRate)
- var counter = 0
- proc AudioCallback(userdata: pointer; stream: ptr uint8; len: cint) {.cdecl.} =
- var buffer: array[BufferSizeInSamples, int16]
- for i in 0..BufferSizeInSamples - 1:
- buffer[i] = int16(sin(float((counter + i) mod int(x)) / x * 2 * PI) * 32767)
- MixAudio(stream, cast[ptr uint8](addr(buffer[0])), BufferSizeInBytes, cint(SDL_MIX_MAXVOLUME * 0.1))
- counter = counter + BufferSizeInSamples
- proc main() =
- if Init(INIT_AUDIO) != SdlSuccess:
- echo("Init() failed")
- return
- var AudioSpec: TAudioSpec
- AudioSpec.freq = 44100
- AudioSpec.format = AUDIO_S16 # 16 bit PCM
- AudioSpec.channels = 1
- AudioSpec.samples = BufferSizeInBytes
- AudioSpec.padding = 0
- AudioSpec.callback = AudioCallback
- AudioSpec.userdata = nil
- if OpenAudio(addr(AudioSpec), nil) < 0:
- echo("OpenAudio() failed")
- return
- PauseAudio(0)
- # run program for 2 seconds
- var t = 2000
- while t > 0:
- Delay(100)
- t = t - 100
- main()
Advertisement
Add Comment
Please, Sign In to add comment