
Code: Select all
; Author oryaaaaa. 2009/11/7
; ----------------------------------
;/ 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__StreamEncoderWriteStatus
#FLAC__STREAM_ENCODER_WRITE_STATUS_OK
#FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
EndEnumeration
ImportC "libFLAC.lib"
FLAC__stream_encoder_delete(encoder.l)
FLAC__stream_encoder_finish(encoder.l)
FLAC__stream_encoder_get_verify(encoder.l)
FLAC__stream_encoder_init_stream(encoder.l, writecallback.l, seekcallback.l, tellcallback.l, Metacallback.l)
FLAC__stream_encoder_new( )
FLAC__stream_encoder_process(encoder.l, sample.l, len.l) ;/ crush
FLAC__stream_encoder_process_interleaved(encoder.l, sample.l, len.l)
FLAC__stream_encoder_set_bits_per_sample(encoder.l, bit.b)
FLAC__stream_encoder_set_blocksize(encoder.l, block.l)
FLAC__stream_encoder_set_channels(encoder.l, ch.l)
FLAC__stream_encoder_set_compression_level( encoder.l, level.l)
FLAC__stream_encoder_set_do_escape_coding(encoder.l, a.l)
FLAC__stream_encoder_set_do_exhaustive_model_search(encoder.l, flg.b)
FLAC__stream_encoder_set_do_md5(encoder.l, flg.b) ;/ no effect
FLAC__stream_encoder_set_do_mid_side_stereo(encoder, flg.b)
FLAC__stream_encoder_set_do_qlp_coeff_prec_search(encoder.l, flg.b)
FLAC__stream_encoder_set_loose_mid_side_stereo(encoder, flg.b)
FLAC__stream_encoder_set_max_lpc_order(encoder.l, flg.b)
FLAC__stream_encoder_set_max_residual_partition_order(encoder.l, flg.l)
FLAC__stream_encoder_set_metadata(encoder, meta.l)
FLAC__stream_encoder_set_min_residual_partition_order(encoder.l, flg.l)
FLAC__stream_encoder_set_rice_parameter_search_dist(encoder.l, flg.l)
FLAC__stream_encoder_set_sample_rate(encoder.l, rate.l)
FLAC__stream_encoder_set_streamable_subset(encoder.l, flg.b)
FLAC__stream_encoder_set_total_samples_estimate(encoder.l, flg.l) ;/ INT64, Dont use
FLAC__stream_encoder_set_verify(encoder.l, flg.b)
EndImport
Global callFile = CreateFile(#PB_Any, "test.flac")
Global File = ReadFile(#PB_Any, OpenFileRequester("","", "*.wav",0))
ProcedureC FLAC__StreamEncoderWriteStatus(*encoder, *buffer, Bytes, samples, current_frame, *cliend_data)
If WriteData(callFile, *buffer, Bytes)
ProcedureReturn #FLAC__STREAM_ENCODER_WRITE_STATUS_OK
Else
ProcedureReturn #FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
EndIf
EndProcedure
encoder.l = FLAC__stream_encoder_new()
FLAC__stream_encoder_set_channels(encoder, 2)
FLAC__stream_encoder_set_bits_per_sample(encoder, 16)
FLAC__stream_encoder_set_sample_rate(encoder, 44100)
FLAC__stream_encoder_set_blocksize(encoder, 4096)
FLAC__stream_encoder_set_compression_level(encoder, 8)
FLAC__stream_encoder_init_stream(encoder, @FLAC__StreamEncoderWriteStatus(), 0, 0, 0)
Global *FB = AllocateMemory(Lof(File)*2)
ReadData(File, *FB, Lof(File))
;/ INT16 to INT32 variable
For pos.l=Lof(File)-2 To 0 Step -2
PokeL(*FB+pos*2, PeekW(*FB+pos))
Next
For pos=0 To Int(Lof(File)*2-7) Step 8
FLAC__stream_encoder_process_interleaved(encoder, *FB+pos, 1)
Next
FLAC__stream_encoder_finish(encoder)
CloseFile(File)
;/ FLAC__stream_encoder_set_total_samples_estimate
Size.q = (i Dont know)
FileSeek(callFile, 22)
WriteAsciiCharacter(callFile, (Size >>32)&$FF)
WriteAsciiCharacter(callFile, (Size >>24)&$FF)
WriteAsciiCharacter(callFile, (Size >>16)&$FF)
WriteAsciiCharacter(callFile, (Size >>8)&$FF)
WriteAsciiCharacter(callFile, Size&$FF)
CloseFile(callFile)