* bugfixes
[swftools.git] / lib / modules / swfsound.c
index d0bfc20..ac60b55 100644 (file)
@@ -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);
 
@@ -141,7 +147,7 @@ void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, 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, fs * first); // samples per mp3 frame
        swf_SetU16(tag, seek); // seek
     }
 
@@ -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)