audiodata.monkey2 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. Namespace std.audio
  2. Class AudioData
  3. Field OnDiscarded:Void()
  4. Method New( length:Int,format:AudioFormat,hertz:Int )
  5. Local data:=libc.malloc( BytesPerSample( format )*length )
  6. _length=length
  7. _format=format
  8. _hertz=hertz
  9. _data=Cast<UByte Ptr>( data )
  10. OnDiscarded=Lambda()
  11. libc.free( data )
  12. End
  13. End
  14. Method New( length:Int,format:AudioFormat,hertz:Int,data:Void Ptr )
  15. _length=length
  16. _format=format
  17. _hertz=hertz
  18. _data=Cast<UByte Ptr>( data )
  19. End
  20. Property Length:Int()
  21. Return _length
  22. End
  23. Property Format:AudioFormat()
  24. Return _format
  25. End
  26. Property Hertz:Int()
  27. Return _hertz
  28. End
  29. Property Data:UByte Ptr()
  30. Return _data
  31. End
  32. Property Size:Int()
  33. Return BytesPerSample( _format ) * _length
  34. End
  35. Method GetSample:Float( index:Int,channel:Int=0 )
  36. DebugAssert( index>=0 And index<_length )
  37. Select _format
  38. Case AudioFormat.Mono8
  39. Return _data[index]/128.0-1
  40. Case AudioFormat.Stereo8
  41. Return _data[index*2+(channel&1)]/128.0-1
  42. Case AudioFormat.Mono16
  43. Return Cast<Short Ptr>( _data )[index]/32767.0
  44. Case AudioFormat.Stereo16
  45. Return Cast<Short Ptr>( _data )[index*2+(channel&1)]/32767.0
  46. End
  47. Return 0
  48. End
  49. Method SetSample( index:Int,channel:Int=0,sample:Float )
  50. DebugAssert( index>=0 And index<_length )
  51. End
  52. Method Discard()
  53. If _discarded Return
  54. _discarded=True
  55. OnDiscarded()
  56. _length=0
  57. _format=Null
  58. _data=Null
  59. End
  60. Function Load:AudioData( path:String )
  61. Select ExtractExt( path ).ToLower()
  62. Case ".wav" Return LoadAudioData_WAV( path )
  63. Case ".ogg" Return LoadAudioData_OGG( path )
  64. End
  65. Return Null
  66. End
  67. Private
  68. Field _length:Int
  69. Field _format:AudioFormat
  70. Field _hertz:Int
  71. Field _data:UByte Ptr
  72. Field _discarded:Bool
  73. End