| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- Strict
- Rem
- bbdoc: Audio/OGG loader
- about:
- The OGG loader module provides the ability to load OGG format #{audio samples}.
- End Rem
- Module BRL.OGGLoader
- ModuleInfo "Version: 1.04"
- ModuleInfo "Author: Simon Armstrong"
- ModuleInfo "License: zlib/libpng"
- ModuleInfo "Copyright: Blitz Research Ltd"
- ModuleInfo "Modserver: BRL"
- ModuleInfo "History: 1.04 Release"
- ModuleInfo "History: Moved SaveOgg to module axe.saveogg"
- ModuleInfo "History: 1.03 Release"
- ModuleInfo "History: Added Function SaveOgg"
- ModuleInfo "History: 1.02 Release"
- ModuleInfo "History: Fixed reading past end of stream with some short files"
- Import Pub.OggVorbis
- Import BRL.AudioSample
- Private
- Function readfunc( buf@Ptr,size,nmemb,src:Object )
- Local bytes=TStream(src).Read(buf,size*nmemb)
- Return bytes/size
- End Function
- Function seekfunc( src_obj:Object,off0,off1,whence )
- Local off
- Local src:TStream=TStream(src_obj)
- ?X86
- off=off0
- ?PPC
- off=off1
- ?
- Local res=-1
- Select whence
- Case 0
- res=src.Seek(off) 'SEEK_SET
- Case 1
- res=src.Seek(src.Pos()+off) 'SEEK_CUR
- Case 2
- res=src.Seek(src.Size()+off) 'SEEK_END
- End Select
- If res>=0 Return 0
- Return -1
- End Function
- Function closefunc( src:Object )
- End Function
- Function tellfunc( src:Object )
- Return TStream(src).Pos()
- End Function
- Type TAudioSampleLoaderOGG Extends TAudioSampleLoader
- Method LoadAudioSample:TAudioSample( stream:TStream )
- Local samples,channels,freq
- Local ogg:Byte Ptr=Decode_Ogg(stream,readfunc,seekfunc,closefunc,tellfunc,samples,channels,freq)
-
- If Not ogg Return
- Local format
- ?PPC
- If channels=1 format=SF_MONO16BE Else format=SF_STEREO16BE
- ?X86
- If channels=1 format=SF_MONO16LE Else format=SF_STEREO16LE
- ?
- Local size=samples*2*channels
- Local sample:TAudioSample=TAudioSample.Create( samples,freq,format )
- Local err=Read_Ogg( ogg,sample.samples,size )
- Read_Ogg( ogg,Null,0 )
- If err Return
- Return sample
- End Method
- End Type
- AddAudioSampleLoader New TAudioSampleLoaderOGG
|