audio.bmx 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. ' Copyright (c) 2024 Bruce A Henderson
  2. '
  3. ' This software is provided 'as-is', without any express or implied
  4. ' warranty. In no event will the authors be held liable for any damages
  5. ' arising from the use of this software.
  6. '
  7. ' Permission is granted to anyone to use this software for any purpose,
  8. ' including commercial applications, and to alter it and redistribute it
  9. ' freely, subject to the following restrictions:
  10. '
  11. ' 1. The origin of this software must not be misrepresented; you must not
  12. ' claim that you wrote the original software. If you use this software
  13. ' in a product, an acknowledgment in the product documentation would be
  14. ' appreciated but is not required.
  15. '
  16. ' 2. Altered source versions must be plainly marked as such, and must not be
  17. ' misrepresented as being the original software.
  18. '
  19. ' 3. This notice may not be removed or altered from any source
  20. ' distribution.
  21. '
  22. SuperStrict
  23. Rem
  24. bbdoc: Raylib Audio - Simple and easy-to-use audio library
  25. End Rem
  26. Module Ray.Audio
  27. ModuleInfo "Version: 1.00"
  28. ModuleInfo "License: zlib"
  29. ModuleInfo "Copyright: Wrapper - 2024 Bruce A Henderson"
  30. ModuleInfo "Copyright: raylib - 2013-2024 Ramon Santamaria"
  31. ModuleInfo "History: 1.00"
  32. ModuleInfo "History: Initial Release."
  33. ModuleInfo "CC_OPTS: -std=c99"
  34. ModuleInfo "CC_OPTS: -DSTATIC"
  35. ModuleInfo "CC_OPTS: -DSUPPORT_CAMERA_SYSTEM"
  36. ModuleInfo "CC_OPTS: -DSUPPORT_FILEFORMAT_OGG -DSUPPORT_FILEFORMAT_XM -DSUPPORT_FILEFORMAT_MOD -DSUPPORT_FILEFORMAT_FLAC -DSUPPORT_FILEFORMAT_MP3"
  37. ?win32
  38. ModuleInfo "CC_OPTS: -DPLATFORM_DESKTOP"
  39. ModuleInfo "CC_OPTS: -D_GLFW_WIN32"
  40. ?osx
  41. ModuleInfo "CC_OPTS: -DPLATFORM_DESKTOP"
  42. ModuleInfo "CC_OPTS: -D_GLFW_COCOA"
  43. ?linux And Not raspberrypi
  44. ModuleInfo "CC_OPTS: -DPLATFORM_DESKTOP"
  45. ModuleInfo "CC_OPTS: -D_POSIX_C_SOURCE=199309L"
  46. ModuleInfo "CC_OPTS: -D_GLFW_X11"
  47. ?raspberrypi
  48. ModuleInfo "CC_OPTS: -DPLATFORM_RPI"
  49. ModuleInfo "CC_OPTS: -D_GLFW_X11"
  50. ?
  51. Import "common.bmx"
  52. Rem
  53. bbdoc: Initializes audio device and context.
  54. End Rem
  55. Function InitAudioDevice()
  56. bmx_raylib_InitAudioDevice()
  57. End Function
  58. Rem
  59. bbdoc: Closes the audio device and context.
  60. End Rem
  61. Function CloseAudioDevice()
  62. bmx_raylib_CloseAudioDevice()
  63. End Function
  64. Rem
  65. bbdoc: Checks if audio device has been initialized successfully.
  66. End Rem
  67. Function IsAudioDeviceReady:Int()
  68. Return bmx_raylib_IsAudioDeviceReady()
  69. End Function
  70. Rem
  71. bbdoc: Sets master volume (listener).
  72. End Rem
  73. Function SetMasterVolume(volume:Float)
  74. bmx_raylib_SetMasterVolume(volume)
  75. End Function
  76. Rem
  77. bbdoc: Gets master volume (listener).
  78. End Rem
  79. Function GetMasterVolume:Float()
  80. Return bmx_raylib_GetMasterVolume()
  81. End Function
  82. ' Wave/Sound loading/unloading functions
  83. Rem
  84. bbdoc: Loads wave data from file.
  85. End Rem
  86. Function LoadWave:RWave(filename:String)
  87. Local f:Byte Ptr = filename.ToUTF8String()
  88. Local wave:RWave = bmx_raylib_LoadWave(f)
  89. MemFree(f)
  90. Return wave
  91. End Function
  92. Function LoadWaveFromMemory:RWave(fileType:String, data:Byte Ptr, dataSize:Int)
  93. Local f:Byte Ptr = fileType.ToUTF8String()
  94. Local wave:RWave = bmx_raylib_LoadWaveFromMemory(f, data, dataSize)
  95. MemFree(f)
  96. Return wave
  97. End Function
  98. Function IsWaveValid:Int(wave:RWave)
  99. Return bmx_raylib_IsWaveValid(wave)
  100. End Function
  101. Rem
  102. bbdoc: Loads sound from file.
  103. End Rem
  104. Function LoadSound:RSound(filename:String)
  105. Local f:Byte Ptr = filename.ToUTF8String()
  106. Local sound:RSound = bmx_raylib_LoadSound(f)
  107. MemFree(f)
  108. Return sound
  109. End Function
  110. Rem
  111. bbdoc: Loads sound from wave data.
  112. End Rem
  113. Function LoadSoundFromWave:RSound(wave:RWave)
  114. Return bmx_raylib_LoadSoundFromWave(wave)
  115. End Function
  116. Function LoadSoundAlias:RSound(source:RSound)
  117. Return bmx_raylib_LoadSoundAlias(source)
  118. End Function
  119. Function IsSoundValid:Int(sound:RSound)
  120. Return bmx_raylib_IsSoundValid(sound)
  121. End Function
  122. Rem
  123. bbdoc: Updates sound buffer with new data.
  124. End Rem
  125. Function UpdateSound(sound:RSound, data:Byte Ptr, samplesCount:Int)
  126. bmx_raylib_UpdateSound(sound, data, samplesCount)
  127. End Function
  128. Rem
  129. bbdoc: Unloads wave data.
  130. End Rem
  131. Function UnloadWave(wave:RWave)
  132. bmx_raylib_UnloadWave(wave)
  133. End Function
  134. Rem
  135. bbdoc: Unloads sound.
  136. End Rem
  137. Function UnloadSound(sound:RSound)
  138. bmx_raylib_UnloadSound(sound)
  139. End Function
  140. Function UnloadSoundAlias(sound:RSound)
  141. bmx_raylib_UnloadSoundAlias(sound)
  142. End Function
  143. Rem
  144. bbdoc: Exports wave data to file.
  145. End Rem
  146. Function ExportWave(wave:RWave, filename:String)
  147. Local f:Byte Ptr = filename.ToUTF8String()
  148. bmx_raylib_ExportWave(wave, f)
  149. MemFree(f)
  150. End Function
  151. Rem
  152. bbdoc: Exports wave sample data to code (.h).
  153. End Rem
  154. Function ExportWaveAsCode(wave:RWave, filename:String)
  155. Local f:Byte Ptr = filename.ToUTF8String()
  156. bmx_raylib_ExportWaveAsCode(wave, f)
  157. MemFree(f)
  158. End Function
  159. ' Wave/Sound management functions
  160. Rem
  161. bbdoc: Plays a sound.
  162. End Rem
  163. Function PlaySound(sound:RSound)
  164. bmx_raylib_PlaySound(sound)
  165. End Function
  166. Rem
  167. bbdoc: Stops playing a sound.
  168. End Rem
  169. Function StopSound(sound:RSound)
  170. bmx_raylib_StopSound(sound)
  171. End Function
  172. Rem
  173. bbdoc: Pauses a sound.
  174. End Rem
  175. Function PauseSound(sound:RSound)
  176. bmx_raylib_PauseSound(sound)
  177. End Function
  178. Rem
  179. bbdoc: Resumes a paused sound.
  180. End Rem
  181. Function ResumeSound(sound:RSound)
  182. bmx_raylib_ResumeSound(sound)
  183. End Function
  184. Rem
  185. bbdoc: Checks if a sound is currently playing.
  186. End Rem
  187. Function IsSoundPlaying:Int(sound:RSound)
  188. bmx_raylib_IsSoundPlaying(sound)
  189. End Function
  190. Rem
  191. bbdoc: Sets volume for a sound (1.0 is max level).
  192. End Rem
  193. Function SetSoundVolume(sound:RSound, volume:Float)
  194. bmx_raylib_SetSoundVolume(sound, volume)
  195. End Function
  196. Rem
  197. bbdoc: Sets pitch for a sound (1.0 is base level).
  198. End Rem
  199. Function SetSoundPitch(sound:RSound, pitch:Float)
  200. bmx_raylib_SetSoundPitch(sound, pitch)
  201. End Function
  202. Function SetSoundPan(sound:RSound, pan:Float)
  203. bmx_raylib_SetSoundPan(sound, pan)
  204. End Function
  205. Rem
  206. bbdoc: Copies a wave to a new wave.
  207. End Rem
  208. Function WaveCopy:RWave(wave:RWave)
  209. Return bmx_raylib_WaveCopy(wave)
  210. End Function
  211. Rem
  212. bbdoc: Crops a wave to defined samples range.
  213. End Rem
  214. Function WaveCrop(wave:RWave Var, initSample:Int, finalSample:Int)
  215. bmx_raylib_WaveCrop(wave, initSample, finalSample)
  216. End Function
  217. Rem
  218. bbdoc: Converts wave data to desired format.
  219. End Rem
  220. Function WaveFormat(wave:RWave Var, sampleRate:Int, sampleSize:Int, channels:Int)
  221. bmx_raylib_WaveFormat(wave, sampleRate, sampleSize, channels)
  222. End Function
  223. Rem
  224. bbdoc: Gets samples data from wave as a floats array.
  225. End Rem
  226. Function LoadWaveSamples:Float Ptr(wave:RWave)
  227. Return bmx_raylib_LoadWaveSamples(wave)
  228. End Function
  229. Function UnloadWaveSamples(data:Float Ptr)
  230. bmx_raylib_UnloadWaveSamples(data)
  231. End Function
  232. ' Music management functions
  233. Rem
  234. bbdoc: Loads music stream from file.
  235. End Rem
  236. Function LoadMusicStream:RMusic(filename:String)
  237. Local f:Byte Ptr = filename.ToUTF8String()
  238. Local music:RMusic = bmx_raylib_LoadMusicStream(f)
  239. MemFree(f)
  240. Return music
  241. End Function
  242. Function LoadMusicStreamFromMemory:RMusic(fileType:String, data:Byte Ptr, dataSize:Int)
  243. Local f:Byte Ptr = fileType.ToUTF8String()
  244. Local music:RMusic = bmx_raylib_LoadMusicStreamFromMemory(f, data, dataSize)
  245. MemFree(f)
  246. Return music
  247. End Function
  248. Function IsMusicValid:Int(music:RMusic)
  249. Return bmx_raylib_IsMusicValid(music)
  250. End Function
  251. Rem
  252. bbdoc: Unloads music stream.
  253. End Rem
  254. Function UnloadMusicStream(music:RMusic)
  255. bmx_raylib_UnloadMusicStream(music)
  256. End Function
  257. Rem
  258. bbdoc: Starts music playing.
  259. End Rem
  260. Function PlayMusicStream(music:RMusic)
  261. bmx_raylib_PlayMusicStream(music)
  262. End Function
  263. Function IsMusicStreamPlaying:Int(music:RMusic)
  264. Return bmx_raylib_IsMusicStreamPlaying(music)
  265. End Function
  266. Rem
  267. bbdoc: Updates buffers for music streaming.
  268. End Rem
  269. Function UpdateMusicStream(music:RMusic)
  270. bmx_raylib_UpdateMusicStream(music)
  271. End Function
  272. Rem
  273. bbdoc: Stops music playing.
  274. End Rem
  275. Function StopMusicStream(music:RMusic)
  276. bmx_raylib_StopMusicStream(music)
  277. End Function
  278. Rem
  279. bbdoc: Pauses music playing.
  280. End Rem
  281. Function PauseMusicStream(music:RMusic)
  282. bmx_raylib_PauseMusicStream(music)
  283. End Function
  284. Rem
  285. bbdoc: Resumes playing paused music.
  286. End Rem
  287. Function ResumeMusicStream(music:RMusic)
  288. bmx_raylib_ResumeMusicStream(music)
  289. End Function
  290. Function SeekMusicStream(music:RMusic, position:Float)
  291. bmx_raylib_SeekMusicStream(music, position)
  292. End Function
  293. Rem
  294. bbdoc: Sets volume for music (1.0 is max level).
  295. End Rem
  296. Function SetMusicVolume(music:RMusic, volume:Float)
  297. bmx_raylib_SetMusicVolume(music, volume)
  298. End Function
  299. Rem
  300. bbdoc: Sets pitch for a music (1.0 is base level).
  301. End Rem
  302. Function SetMusicPitch(music:RMusic, pitch:Float)
  303. bmx_raylib_SetMusicPitch(music, pitch)
  304. End Function
  305. Function SetMusicPan(music:RMusic, pan:Float)
  306. bmx_raylib_SetMusicPan(music, pan)
  307. End Function
  308. Rem
  309. bbdoc: Gets music time length (in seconds).
  310. End Rem
  311. Function GetMusicTimeLength:Float(music:RMusic)
  312. Return bmx_raylib_GetMusicTimeLength(music)
  313. End Function
  314. Rem
  315. bbdoc: Gets current music time played (in seconds).
  316. End Rem
  317. Function GetMusicTimePlayed:Float(music:RMusic)
  318. Return bmx_raylib_GetMusicTimePlayed(music)
  319. End Function
  320. ' AudioStream management functions
  321. Rem
  322. bbdoc: Inits audio stream (to stream raw audio pcm data).
  323. End Rem
  324. Function LoadAudioStream:RAudioStream(sampleRate:UInt, sampleSize:UInt, channels:UInt)
  325. Return bmx_raylib_LoadAudioStream(sampleRate, sampleSize, channels)
  326. End Function
  327. Rem
  328. bbdoc: Checks if an audio stream is valid (buffers initialized).
  329. End Rem
  330. Function IsAudioStreamValid:Int(stream:RAudioStream)
  331. Return bmx_raylib_IsAudioStreamValid(stream)
  332. End Function
  333. Rem
  334. bbdoc: Unloads audio stream and free memory.
  335. End Rem
  336. Function UnloadAudioStream(stream:RAudioStream)
  337. bmx_raylib_UnloadAudioStream(stream)
  338. End Function
  339. Rem
  340. bbdoc: Updates audio stream buffers with data.
  341. End Rem
  342. Function UpdateAudioStream(stream:RAudioStream, data:Byte Ptr, samplesCount:Int)
  343. bmx_raylib_UpdateAudioStream(stream, data, samplesCount)
  344. End Function
  345. Rem
  346. bbdoc: Checks if any audio stream buffers requires refill.
  347. End Rem
  348. Function IsAudioStreamProcessed:Int(stream:RAudioStream)
  349. Return bmx_raylib_IsAudioStreamProcessed(stream)
  350. End Function
  351. Rem
  352. bbdoc: Plays audio stream.
  353. End Rem
  354. Function PlayAudioStream(stream:RAudioStream)
  355. bmx_raylib_PlayAudioStream(stream)
  356. End Function
  357. Rem
  358. bbdoc: Pauses audio stream.
  359. End Rem
  360. Function PauseAudioStream(stream:RAudioStream)
  361. bmx_raylib_PauseAudioStream(stream)
  362. End Function
  363. Rem
  364. bbdoc: Resumes audio stream.
  365. End Rem
  366. Function ResumeAudioStream(stream:RAudioStream)
  367. bmx_raylib_ResumeAudioStream(stream)
  368. End Function
  369. Rem
  370. bbdoc: Checks if audio stream is playing.
  371. End Rem
  372. Function IsAudioStreamPlaying:Int(stream:RAudioStream)
  373. Return bmx_raylib_IsAudioStreamPlaying(stream)
  374. End Function
  375. Rem
  376. bbdoc: Stops audio stream.
  377. End Rem
  378. Function StopAudioStream(stream:RAudioStream)
  379. bmx_raylib_StopAudioStream(stream)
  380. End Function
  381. Rem
  382. bbdoc: Sets volume for audio stream (1.0 is max level).
  383. End Rem
  384. Function SetAudioStreamVolume(stream:RAudioStream, volume:Float)
  385. bmx_raylib_SetAudioStreamVolume(stream, volume)
  386. End Function
  387. Rem
  388. bbdoc: Sets pitch for audio stream (1.0 is base level).
  389. End Rem
  390. Function SetAudioStreamPitch(stream:RAudioStream, pitch:Float)
  391. bmx_raylib_SetAudioStreamPitch(stream, pitch)
  392. End Function
  393. Rem
  394. bbdoc: Sets pan for audio stream (0.5 is centered).
  395. End Rem
  396. Function SetAudioStreamPan(stream:RAudioStream, pan:Float)
  397. bmx_raylib_SetAudioStreamPan(stream, pan)
  398. End Function
  399. Rem
  400. bbdoc: Sets the default buffer size for new audio streams.
  401. End Rem
  402. Function SetAudioStreamBufferSizeDefault(size:Int)
  403. bmx_raylib_SetAudioStreamBufferSizeDefault(size)
  404. End Function
  405. Rem
  406. bbdoc: Sets audio thread callback to request new data.
  407. End Rem
  408. Function SetAudioStreamCallback(stream:RAudioStream, processor(data:Byte Ptr, frames:UInt))
  409. bmx_raylib_SetAudioStreamCallback(stream, processor)
  410. End Function
  411. Rem
  412. bbdoc: Attaches audio stream processor to stream, receives the samples as 'float'.
  413. End Rem
  414. Function AttachAudioStreamProcessor(stream:RAudioStream, processor(data:Byte Ptr, frames:UInt))
  415. bmx_raylib_AttachAudioStreamProcessor(stream, processor)
  416. End Function
  417. Rem
  418. bbdoc: Detaches audio stream processor from stream.
  419. End Rem
  420. Function DetachAudioStreamProcessor(stream:RAudioStream, processor(data:Byte Ptr, frames:UInt))
  421. bmx_raylib_DetachAudioStreamProcessor(stream, processor)
  422. End Function
  423. Rem
  424. bbdoc: Attaches audio stream processor to the entire audio pipeline, receives the samples as 'float'.
  425. End Rem
  426. Function AttachAudioMixedProcessor(processor(data:Byte Ptr, frames:UInt))
  427. bmx_raylib_AttachAudioMixedProcessor(processor)
  428. End Function
  429. Rem
  430. bbdoc: Detaches audio stream processor from the entire audio pipeline.
  431. End Rem
  432. Function DetachAudioMixedProcessor(processor(data:Byte Ptr, frames:UInt))
  433. bmx_raylib_DetachAudioMixedProcessor(processor)
  434. End Function