X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswfsound.c;h=ac60b5531376ffed47581a9dd37824a6f892dd78;hb=5c59d829bdc0d6a15bfc28a664c6d309a7e80edb;hp=fe3461d35881cf229c3097f3e1d6d8646f9ec5a3;hpb=a970a6438fa892d043faac61ea6e27c8c88f79fa;p=swftools.git diff --git a/lib/modules/swfsound.c b/lib/modules/swfsound.c index fe3461d..ac60b55 100644 --- a/lib/modules/swfsound.c +++ b/lib/modules/swfsound.c @@ -70,15 +70,20 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int numsamples, char first) #ifdef LAME #include "../lame/lame.h" - + +/* TODO: find a way to set these from the outside */ +int swf_mp3_samplerate = 44100; +int swf_mp3_channels = 1; +int swf_mp3_bitrate = 32; + static lame_global_flags*lame_flags; static void initlame(unsigned char*buf, int bufsize) { lame_flags = lame_init(); - lame_set_in_samplerate(lame_flags, 44100); - lame_set_num_channels(lame_flags, 1); + lame_set_in_samplerate(lame_flags, swf_mp3_samplerate); + lame_set_num_channels(lame_flags, swf_mp3_channels); lame_set_scale(lame_flags, 0); // MPEG1 32, 44.1, 48khz @@ -89,6 +94,7 @@ static void initlame(unsigned char*buf, int bufsize) lame_set_quality(lame_flags, 0); lame_set_mode(lame_flags, MONO/*3*/); + lame_set_brate(lame_flags, swf_mp3_bitrate); //lame_set_compression_ratio(lame_flags, 11.025); lame_set_bWriteVbrTag(lame_flags, 0); @@ -127,7 +133,7 @@ void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples) swf_SetU16(tag,avgnumsamples); } -void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first) +void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first) { char*buf; int oldlen=0,len = 0; @@ -141,8 +147,8 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first) if(first) { int fs = lame_get_framesize(lame_flags); //printf("framesize:%d\n", fs); - swf_SetU16(tag, fs); // samples per mp3 frame - swf_SetU16(tag, 0); // seek + swf_SetU16(tag, fs * first); // samples per mp3 frame + swf_SetU16(tag, seek); // seek } len += lame_encode_buffer(lame_flags, samples, samples, numsamples, &buf[len], bufsize-len); @@ -183,7 +189,8 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) blocks = num / (blocksize); swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); - swf_SetU32(tag,blocks*blocksize); + + swf_SetU32(tag,blocks*blocksize / 4); // 44100 -> 11025 buf = malloc(bufsize); if(!buf) @@ -215,7 +222,7 @@ void swf_SetSoundDefine(TAG*tag, S16*samples, int num) void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info) { U8 flags = (info->stop?SOUNDINFO_STOP:0) - |(info->multiple?SOUNDINFO_NOMULTIPLE:0) + |(info->nomultiple?SOUNDINFO_NOMULTIPLE:0) |(info->envelopes?SOUNDINFO_HASENVELOPE:0) |(info->loops?SOUNDINFO_HASLOOPS:0) |(info->outpoint?SOUNDINFO_HASOUTPOINT:0)