X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfc.c;h=301f542a6f335640f411d6ad871c2cf6fc973aaf;hb=e3147ae362f22e9627c7eace0b33d01c09e30f25;hp=009a21564ef70e0d4037b15d53df3146202deec2;hpb=15d5047042b1e32aaf85f565e8e77eb91128b757;p=swftools.git diff --git a/src/swfc.c b/src/swfc.c index 009a215..301f542 100644 --- a/src/swfc.c +++ b/src/swfc.c @@ -32,8 +32,9 @@ #include "../lib/log.h" #include "../lib/args.h" #include "../lib/q.h" +#include "../lib/mp3.h" +#include "../lib/wav.h" #include "parser.h" -#include "wav.h" #include "../lib/png.h" //#define DEBUG @@ -1201,17 +1202,15 @@ typedef struct _sound_t void s_sound(char*name, char*filename) { struct WAV wav, wav2; + struct MP3 mp3; sound_t* sound; - U16*samples; - int numsamples; - int t; - int blocksize = 1152; + U16*samples = NULL; + unsigned numsamples; + unsigned blocksize = 1152; + int is_mp3 = 0; - if(!readWAV(filename, &wav)) { - warning("Couldn't read wav file \"%s\"", filename); - samples = 0; - numsamples = 0; - } else { + if(readWAV(filename, &wav)) { + int t; convertWAV2mono(&wav, &wav2, 44100); samples = (U16*)wav2.data; numsamples = wav2.size/2; @@ -1222,6 +1221,16 @@ void s_sound(char*name, char*filename) samples[t] = (samples[t]>>8)&0xff | (samples[t]<<8)&0xff00; } #endif + } else if(mp3_read(&mp3, filename)) { + fprintf(stderr, "\"%s\" seems to work as a MP3 file...\n", filename); + blocksize = 1; + is_mp3 = 1; + } + else + { + warning("Couldn't read WAV/MP3 file \"%s\"", filename); + samples = 0; + numsamples = 0; } if(numsamples%blocksize != 0) @@ -1240,7 +1249,19 @@ void s_sound(char*name, char*filename) tag = swf_InsertTag(tag, ST_DEFINESOUND); swf_SetU16(tag, id); //id - swf_SetSoundDefine(tag, samples, numsamples); + if(is_mp3) + { + swf_SetSoundDefineMP3( + tag, mp3.data, mp3.size, + mp3.SampRate, + mp3.Channels, + mp3.NumFrames); + mp3_clear(&mp3); + } + else + { + swf_SetSoundDefine(tag, samples, numsamples); + } sound = (sound_t*)malloc(sizeof(sound_t)); /* mem leak */ sound->tag = tag;