freeaudio.bmx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. Strict
  2. Module Pub.FreeAudio
  3. ModuleInfo "Version: 1.23"
  4. ModuleInfo "Author: Simon Armstrong"
  5. ModuleInfo "License: zlib/libpng"
  6. ModuleInfo "Copyright: Blitz Research Ltd"
  7. ModuleInfo "Modserver: BRL"
  8. ModuleInfo "History: 1.23"
  9. ModuleInfo "History: Use ALSA instead of OSS on Linux."
  10. ModuleInfo "History: Added PulseAudio driver as default Linux sound driver."
  11. ModuleInfo "History: ALSA and Pulse audio drivers now link at runtime."
  12. ModuleInfo "History: 1.22 Release"
  13. ModuleInfo "History: Fixed leak with sound recycling"
  14. ModuleInfo "History: 1.21 Release"
  15. ModuleInfo "History: Fixed reference counting for brl.freeaudioaudio"
  16. ModuleInfo "History: 1.20 Release"
  17. ModuleInfo "History: Removed duplication of sample memory"
  18. ModuleInfo "History: 1.19 Release"
  19. ModuleInfo "History: Added DirectSound mode"
  20. ModuleInfo "History: 1.18 Release"
  21. ModuleInfo "History: added fa_ChannelPosition for live sample generation"
  22. ModuleInfo "History: 1.17 Release"
  23. ModuleInfo "History: added check for windows playback position overflow"
  24. ModuleInfo "History: 1.15 Release"
  25. ModuleInfo "History: added low latency windows98 fix"
  26. ModuleInfo "History: 1.14 Release"
  27. ModuleInfo "History: fixed 1.13 recycling of stopped channels fix"
  28. ModuleInfo "History: 1.13 Release"
  29. ModuleInfo "History: fixed recycling of stopped channels"
  30. ModuleInfo "History: 1.12 Release"
  31. ModuleInfo "History: Uses linear interpolation for improved fidelity at low rates"
  32. ModuleInfo "History: 1.11 Release"
  33. ModuleInfo "History: Fixed freepool sounds Not resetting parameters - thanks To Fetze"
  34. ModuleInfo "History: 1.10 Release"
  35. ModuleInfo "History: Added ALSA support for Linux courtesy Craig Kiesau"
  36. ModuleInfo "History: 1.09 Release"
  37. ModuleInfo "History: Improved channel playback timing"
  38. ModuleInfo "History: 1.08 Release"
  39. ModuleInfo "History: Fixed memory leak in fa_FreeSound()"
  40. ModuleInfo "History: 1.07 Release"
  41. ModuleInfo "History: Removed output transitions for queued/paused sounds"
  42. ModuleInfo "History: 1.06 Release"
  43. ModuleInfo "History: Windows device error now silently fails"
  44. ModuleInfo "History: 1.05 Release"
  45. ModuleInfo "History: Linux version now opens audio device on second thread"
  46. ModuleInfo "History: 1.04 Release"
  47. ModuleInfo "History: Removed Linux debug output"
  48. Import "freeaudio.cpp"
  49. Import "freeaudioglue.cpp"
  50. ?Win32
  51. Import "dsounddevice.cpp"
  52. Import "mmdevice.cpp"
  53. Extern "C"
  54. Function OpenMultiMediaDevice:Byte Ptr()
  55. Function OpenDirectSoundDevice:Byte Ptr()
  56. End Extern
  57. ?osx
  58. Import "-framework AudioUnit"
  59. Import "-framework AudioToolbox"
  60. Import "coreaudiodevice.cpp"
  61. Extern
  62. Function OpenCoreAudioDevice:Byte Ptr()
  63. End Extern
  64. ?Linuxx86
  65. Import "-ldl"
  66. Import "alsadevice.cpp"
  67. Import "pulseaudiodevice.cpp"
  68. Extern "C"
  69. Function OpenALSADevice:Byte Ptr()
  70. Function OpenPulseAudioDevice:Byte Ptr()
  71. End Extern
  72. ?Linuxx64
  73. Import "-ldl"
  74. Import "alsadevice.cpp"
  75. Import "pulseaudiodevice.cpp"
  76. Extern "C"
  77. Function OpenALSADevice:Byte Ptr()
  78. Function OpenPulseAudioDevice:Byte Ptr()
  79. End Extern
  80. ?raspberrypi
  81. Import "-ldl"
  82. Import "alsadevice.cpp"
  83. Import "pulseaudiodevice.cpp"
  84. Extern "C"
  85. Function OpenALSADevice:Byte Ptr()
  86. Function OpenPulseAudioDevice:Byte Ptr()
  87. End Extern
  88. ?
  89. Extern
  90. Const FA_CHANNELSTATUS_FREE=0
  91. Const FA_CHANNELSTATUS_STOPPED=1
  92. Const FA_CHANNELSTATUS_SINGLESHOT=2
  93. Const FA_CHANNELSTATUS_LOOPING=4
  94. Const FA_CHANNELSTATUS_STREAMING=8
  95. Const FA_CHANNELSTATUS_PAUSED=16
  96. Function fa_Reset( audiodevice:Byte Ptr )
  97. Function fa_Close()
  98. Function fa_CreateSound:Byte Ptr( length,bits,channels,hertz,samples:Byte Ptr=Null,looping=False )
  99. Function fa_WriteSound( sound:Byte Ptr,samples:Byte Ptr,length ) 'length really neceesary?
  100. Function fa_FreeSound( sound:Byte Ptr )
  101. Function fa_AllocChannel()
  102. Function fa_FreeChannel( channel )
  103. Function fa_PlaySound( sound:Byte Ptr,paused_flag,channel )
  104. Function fa_StopChannel( channel )
  105. Function fa_ChannelStatus( channel )
  106. Function fa_ChannelPosition( channel )
  107. Function fa_SetChannelPaused( channel,paused )
  108. Function fa_SetChannelVolume( channel,volume:Float )
  109. Function fa_SetChannelRate( channel,pitch:Float )
  110. Function fa_SetChannelPan( channel,pan:Float )
  111. Function fa_SetChannelDepth( channel,depth:Float )
  112. End Extern
  113. Function fa_Init( deviceid )
  114. Local device:Byte Ptr
  115. ?Win32
  116. Select deviceid
  117. Case 0
  118. device=OpenMultiMediaDevice()
  119. Case 1
  120. device=OpenDirectSoundDevice()
  121. EndSelect
  122. ?Linuxx86
  123. Select deviceid
  124. Case 0
  125. device=OpenPulseAudioDevice()
  126. Case 1
  127. device=OpenALSADevice()
  128. EndSelect
  129. ?Linuxx64
  130. Select deviceid
  131. Case 0
  132. device=OpenPulseAudioDevice()
  133. Case 1
  134. device=OpenALSADevice()
  135. EndSelect
  136. ?raspberrypi
  137. Select deviceid
  138. Case 0
  139. device=OpenPulseAudioDevice()
  140. Case 1
  141. device=OpenALSADevice()
  142. EndSelect
  143. ?osx
  144. device=OpenCoreAudioDevice()
  145. ?
  146. Local res=-1
  147. If device res=fa_Reset(device)
  148. Return res
  149. End Function