X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=src%2Fwav2swf.c;h=70315b21838c9fd047bd6bedcdc302d3c397cd16;hp=8dfd0db86ad8e4baff5d511e67d0d6859f892083;hb=0e8807d9a620e8932bc67653321eaae1436fdd43;hpb=481f699009f197fcec789c94996f4d81fef364e0 diff --git a/src/wav2swf.c b/src/wav2swf.c index 8dfd0db..70315b2 100644 --- a/src/wav2swf.c +++ b/src/wav2swf.c @@ -22,10 +22,17 @@ struct options_t options[] = { {"o","output"}, {"v","verbose"}, + {"d","definesound"}, + {"l","loop"}, + {"f","framerate"}, {"V","version"}, {0,0} }; +static int loop = 0; +static int definesound = 0; +static int framerate = 0; + int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { @@ -36,10 +43,24 @@ int args_callback_option(char*name,char*val) outputname = val; return 1; } + else if(!strcmp(name, "d")) { + definesound = 1; + return 0; + } + else if(!strcmp(name, "l")) { + loop = atoi(val); + return 1; + } else if(!strcmp(name, "v")) { verbose ++; return 0; } + else if(!strcmp(name, "f")) { + float f; + sscanf(val, "%f", &f); + framerate = f*256; + return 1; + } else { printf("Unknown option: -%s\n", name); exit(1); @@ -54,6 +75,9 @@ void args_callback_usage(char*name) { printf("Usage: %s [-o filename] file.wav\n", name); printf("\t-v , --verbose\t\t\t Be more verbose\n"); + printf("\t-d , --definesound\t\t\t Generate a DefineSound tag instead of streaming sound\n"); + printf("\t-l , --loop n\t\t\t Loop sound n times (implies -d)\n"); + printf("\t-f , --framerate fps\t\t\t Set framerate to fps frames per seond\n"); printf("\t-o , --output filename\t\t set output filename (default: output.swf)\n"); printf("\t-V , --version\t\t\t Print program version and exit\n"); } @@ -68,69 +92,103 @@ int args_callback_command(char*name,char*val) } int main (int argc,char ** argv) -{ SWF swf; - RGBA rgb; - SRECT r; - S32 width=300,height = 300; - TAG * tag; - - int f,i,ls1,fs1; - int count; - int t; - struct WAV wav,wav2; - int blocksize = 1152; - U16* samples; - int numsamples; - - processargs(argc, argv); - initLog(0,-1,0,0,-1,verbose); - - if(!readWAV(filename, &wav)) - { - logf(" Error reading %s", filename); - exit(1); - } - convertWAV2mono(&wav,&wav2, 44100); - //printWAVInfo(&wav); - //printWAVInfo(&wav2); - samples = (U16*)wav2.data; - numsamples = wav2.size/2; - - memset(&swf,0x00,sizeof(SWF)); - - swf.fileVersion = 4; - swf.frameRate = 11025*256/(blocksize); - - swf.movieSize.xmax = 20*width; - swf.movieSize.ymax = 20*height; - - swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); - tag = swf.firstTag; - rgb.r = 0xff; - rgb.g = 0xff; - rgb.b = 0xff; - swf_SetRGB(tag,&rgb); - - tag = swf_InsertTag(tag, ST_SOUNDSTREAMHEAD); - swf_SetSoundStreamHead(tag, blocksize); - - logf(" %d blocks", numsamples/(blocksize*2)); - for(t=0;t Writing block %d", t); - block1 = &samples[t*2*blocksize]; - swf_SetSoundStreamBlock(tag, block1, blocksize*2,1); - tag = swf_InsertTag(tag, ST_SHOWFRAME); - } - - f = open(outputname,O_WRONLY|O_CREAT|O_TRUNC, 0644); - if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n"); - close(f); - - swf_FreeTags(&swf); - return 0; +{ + SWF swf; + RGBA rgb; + SRECT r; + S32 width=300,height = 300; + TAG * tag; + + int f,i,ls1,fs1; + int count; + int t; + struct WAV wav,wav2; + int blocksize; + float blockspersecond; + float framespersecond; + float framesperblock; + float framepos = 0; + U16* samples; + int numsamples; + + processargs(argc, argv); + + blocksize = 1152; + blockspersecond = 11025.0/blocksize; + framespersecond = blockspersecond; + if(framerate) + framespersecond = framerate/256.0; + framesperblock = framespersecond/blockspersecond; + + initLog(0,-1,0,0,-1,verbose); + + if(!readWAV(filename, &wav)) + { + logf(" Error reading %s", filename); + exit(1); + } + convertWAV2mono(&wav,&wav2, 44100); + //printWAVInfo(&wav); + //printWAVInfo(&wav2); + samples = (U16*)wav2.data; + numsamples = wav2.size/2; + + memset(&swf,0x00,sizeof(SWF)); + + swf.fileVersion = 5; + swf.frameRate = (int)(framespersecond*256); + + swf.movieSize.xmax = 20*width; + swf.movieSize.ymax = 20*height; + + swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); + tag = swf.firstTag; + rgb.r = 0xff; + rgb.g = 0xff; + rgb.b = 0xff; + swf_SetRGB(tag,&rgb); + + if(!definesound) + { + tag = swf_InsertTag(tag, ST_SOUNDSTREAMHEAD); + swf_SetSoundStreamHead(tag, blocksize); + + logf(" %d blocks", numsamples/(blocksize*2)); + for(t=0;t Writing block %d", t); + block1 = &samples[t*2*blocksize]; + swf_SetSoundStreamBlock(tag, block1, 1); + oldframe = (int)framepos; + framepos += framesperblock; + newframe = (int)framepos; + for(s=oldframe;s