X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=src%2Fwav2swf.c;h=157b9b5fc20b8953087c0c37da9aee9bb69c16c5;hp=0b233c717f07bc217ae4ec53aabb871ae5a3111d;hb=f71e2516e9cdcc0b8bc4bf3166247cb7fd1be911;hpb=23cda857a4248617d746a37dca4652604ef11a1e diff --git a/src/wav2swf.c b/src/wav2swf.c index 0b233c7..157b9b5 100644 --- a/src/wav2swf.c +++ b/src/wav2swf.c @@ -24,12 +24,14 @@ struct options_t options[] = {"v","verbose"}, {"d","definesound"}, {"l","loop"}, + {"r","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) { @@ -47,12 +49,19 @@ int args_callback_option(char*name,char*val) } else if(!strcmp(name, "l")) { loop = atoi(val); + definesound = 1; return 1; } else if(!strcmp(name, "v")) { verbose ++; return 0; } + else if(!strcmp(name, "r")) { + float f; + sscanf(val, "%f", &f); + framerate = f*256; + return 1; + } else { printf("Unknown option: -%s\n", name); exit(1); @@ -69,6 +78,7 @@ void args_callback_usage(char*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-r , --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"); } @@ -94,11 +104,27 @@ int main (int argc,char ** argv) int count; int t; struct WAV wav,wav2; - int blocksize = 1152; + int blocksize; + float blockspersecond; + float framespersecond; + float framesperblock; + float framepos = 0; U16* samples; int numsamples; processargs(argc, argv); + + if(!definesound && framerate) { + printf("Warning! The -r option is experimental and won't work without -d\n"); + } + + 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)) @@ -115,7 +141,7 @@ int main (int argc,char ** argv) memset(&swf,0x00,sizeof(SWF)); swf.fileVersion = 5; - swf.frameRate = 11025*256/(blocksize); + swf.frameRate = (int)(framespersecond*256); swf.movieSize.xmax = 20*width; swf.movieSize.ymax = 20*height; @@ -135,12 +161,18 @@ int main (int argc,char ** argv) logf(" %d blocks", numsamples/(blocksize*2)); for(t=0;t Writing block %d", t); block1 = &samples[t*2*blocksize]; - swf_SetSoundStreamBlock(tag, block1, 1); - tag = swf_InsertTag(tag, ST_SHOWFRAME); + swf_SetSoundStreamBlock(tag, block1, 0, 1); + + oldframe = (int)framepos; + framepos += framesperblock; + newframe = (int)framepos; + for(s=oldframe;s