load_vorbis.monkey2 999 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. Namespace std.audio
  2. #rem monkeydoc @hidden
  3. #end
  4. Class StbAudioData Extends AudioData
  5. Method New( length:Int,format:AudioFormat,hertz:Int,data:Void Ptr )
  6. Super.New( length,format,hertz,data )
  7. _data=data
  8. End
  9. Private
  10. Field _data:Void Ptr
  11. Method OnDiscard() Override
  12. libc.free( _data )
  13. _data=Null
  14. End
  15. Method OnFinalize() Override
  16. libc.free( _data )
  17. End
  18. End
  19. Internal
  20. Function LoadAudioData_OGG:AudioData( path:String )
  21. Local buf:=std.memory.DataBuffer.Load( path )
  22. If Not buf Return Null
  23. Local channels:Int
  24. Local hertz:Int
  25. Local samples:Short Ptr
  26. Local length:=stb.vorbis.stb_vorbis_decode_memory( buf.Data,buf.Length,Varptr channels,Varptr hertz,Varptr samples )
  27. If length=-1 Return Null
  28. Local format:AudioFormat
  29. Select channels
  30. Case 1
  31. format=AudioFormat.Mono16
  32. Case 2
  33. format=AudioFormat.Stereo16
  34. Default
  35. libc.free( samples )
  36. Return Null
  37. End
  38. Local data:=New AudioData( length,format,hertz,samples )
  39. Return data
  40. End