
Code: Select all
; Author oryaaaaa. 2009/11/11
; ----------------------------------
;/ You need flac-1.2.1-devel-win.zip
;/ flac-1.2.1-devel-win\lib\libFLAC.lib and libFLAC.dll
;/ IF you use FLAC API LIB, your software applied LGPL License
;/ But Flac.exe and others are GPL License.
Enumeration
#FLAC__STREAM_DECODER_READ_STATUS_CONTINUE
#FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM
#FLAC__STREAM_DECODER_READ_STATUS_ABORT
EndEnumeration
Enumeration
#FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE
#FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
EndEnumeration
ImportC "libFLAC.lib"
FLAC__stream_decoder_delete( )
FLAC__stream_decoder_finish( )
FLAC__stream_decoder_flush( )
FLAC__stream_decoder_get_bits_per_sample(decoder.l)
FLAC__stream_decoder_get_blocksize(decoder.l)
FLAC__stream_decoder_get_channel_assignment(decoder.l)
FLAC__stream_decoder_get_channels(decoder.l)
FLAC__stream_decoder_get_decode_position(decoder.l)
FLAC__stream_decoder_get_md5_checking( )
FLAC__stream_decoder_get_resolved_state_string( )
FLAC__stream_decoder_get_sample_rate(decoder.l)
FLAC__stream_decoder_get_state(decoder.l)
FLAC__stream_decoder_get_total_samples(decoder.l)
FLAC__stream_decoder_init_FILE( )
FLAC__stream_decoder_init_ogg_FILE( )
FLAC__stream_decoder_init_ogg_stream( )
FLAC__stream_decoder_init_stream(decoder.l, readcallback.l, seekcallback.l, tellcallback.l, lengthcallback.l, eofcallback.l, writecallback.l, Metacallback.l, errcallback.l, *cliend_data)
FLAC__stream_decoder_new( )
FLAC__stream_decoder_process_single(decoder.l)
FLAC__stream_decoder_process_until_end_of_metadata(decoder.l)
FLAC__stream_decoder_process_until_end_of_stream(decoder.l)
FLAC__stream_decoder_reset( )
FLAC__stream_decoder_seek_absolute( )
FLAC__stream_decoder_set_md5_checking( )
FLAC__stream_decoder_set_metadata_ignore( )
FLAC__stream_decoder_set_metadata_ignore_all( )
FLAC__stream_decoder_set_metadata_ignore_application( )
FLAC__stream_decoder_set_metadata_respond( )
FLAC__stream_decoder_set_metadata_respond_all( )
FLAC__stream_decoder_set_metadata_respond_application( )
FLAC__stream_decoder_set_ogg_serial_number( )
FLAC__stream_decoder_skip_single_frame( )
EndImport
;/ decode
Global File.l = ReadFile(#PB_Any, OpenFileRequester("","", "*.flac",0))
Global callFile.l = CreateFile(#PB_Any, "test.wav")
Global decoder.l = FLAC__stream_decoder_new()
ProcedureC read_callback(*decoder, *buffer, *Bytes, *cliend_data)
Protected err.l
err = ReadData(File, *buffer, PeekL(*Bytes))
;Debug "Read >"+Str(Loc(File))+ " Bytes "+Str(PeekL(*Bytes))+ " Error "+Str(err)
If err=0
ProcedureReturn #FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM
ElseIf err=PeekL(*Bytes)
ProcedureReturn #FLAC__STREAM_DECODER_READ_STATUS_CONTINUE
Else
ProcedureReturn #FLAC__STREAM_DECODER_READ_STATUS_ABORT
EndIf
EndProcedure
ProcedureC write_callback(*decoder, *frame, *buffer, *cliend_data)
Protected err.l, aa.l
For aa=0 To FLAC__stream_decoder_get_blocksize(decoder.l)-1
WriteWord(callFile, PeekL(PeekL(*buffer)+aa*4))
WriteWord(callFile, PeekL(PeekL(*buffer+4)+aa*4))
Next
If err=0
ProcedureReturn #FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE
Else
ProcedureReturn #FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
EndIf
EndProcedure
ProcedureC error_callback(*decoder, Status.l, *cliend_data)
Debug "Error"
Debug Status
EndProcedure
FLAC__stream_decoder_init_stream(decoder, @read_callback(),0,0,0,0, @write_callback(),0,@error_callback(),0)
FLAC__stream_decoder_process_until_end_of_stream(decoder)
CloseFile(File)
CloseFile(callFile)