Guest User

Untitled

a guest
Oct 10th, 2014
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. import sdl2
  2. import sdl2/audio
  3. import math
  4.  
  5. const BufferSizeInSamples = 2048
  6. const BytesPerSample = 2 # 16 bit PCM
  7. const BufferSizeInBytes = BufferSizeInSamples * BytesPerSample
  8. const SampleRate = 44100 # Hz
  9. const Frequence = 1000 # Hz
  10. const Volume = 0.1 # 0..1
  11. const x = (Frequence * 2000 / SampleRate)
  12.  
  13. var counter = 0
  14.  
  15. proc AudioCallback(userdata: pointer; stream: ptr uint8; len: cint) {.cdecl.} =
  16. var buffer: array[BufferSizeInSamples, int16]
  17. for i in 0..BufferSizeInSamples - 1:
  18. buffer[i] = int16(sin(float((counter + i) mod int(x)) / x * 2 * PI) * 32767)
  19. MixAudio(stream, cast[ptr uint8](addr(buffer[0])), BufferSizeInBytes, cint(SDL_MIX_MAXVOLUME * 0.1))
  20. counter = counter + BufferSizeInSamples
  21.  
  22. proc main() =
  23. if Init(INIT_AUDIO) != SdlSuccess:
  24. echo("Init() failed")
  25. return
  26. var AudioSpec: TAudioSpec
  27. AudioSpec.freq = 44100
  28. AudioSpec.format = AUDIO_S16 # 16 bit PCM
  29. AudioSpec.channels = 1
  30. AudioSpec.samples = BufferSizeInBytes
  31. AudioSpec.padding = 0
  32. AudioSpec.callback = AudioCallback
  33. AudioSpec.userdata = nil
  34. if OpenAudio(addr(AudioSpec), nil) < 0:
  35. echo("OpenAudio() failed")
  36. return
  37. PauseAudio(0)
  38. # run program for 2 seconds
  39. var t = 2000
  40. while t > 0:
  41. Delay(100)
  42. t = t - 100
  43.  
  44. main()
Advertisement
Add Comment
Please, Sign In to add comment