# HG changeset patch # User Robert McIntyre # Date 1319203293 25200 # Node ID c3248c71ae746bb00bd21e6bf24bbaf2101c81bb # Parent 2ad543b339f113dff6e6db615b802a403c4e6446 begin convert program diff -r 2ad543b339f1 -r c3248c71ae74 .hgignore --- a/.hgignore Fri Oct 21 06:03:53 2011 -0700 +++ b/.hgignore Fri Oct 21 06:21:33 2011 -0700 @@ -1,2 +1,4 @@ syntax : glob build* + +test-files* diff -r 2ad543b339f1 -r c3248c71ae74 Makefile --- a/Makefile Fri Oct 21 06:03:53 2011 -0700 +++ b/Makefile Fri Oct 21 06:21:33 2011 -0700 @@ -1,7 +1,22 @@ -all : snes_core +all : build/spc_convert + +build/spc_convert : snes_core demo_utils build/spc_convert.o + g++ build/*.o -o build/spc_convert + +build/spc_convert.o : convert/spc_convert.c + g++ -I . -c convert/spc_convert.c -o build/spc_convert.o + + +demo_utils : build/demo_util.o build/wave_writer.o + +build/demo_util.o : demo/demo_util.c + g++ -c demo/demo_util.c -o build/demo_util.o + +build/wave_writer.o : demo/wave_writer.c + g++ -c demo/wave_writer.c -o build/wave_writer.o snes_core : build/dsp.o build/SNES_SPC.o build/SNES_SPC_misc.o \ diff -r 2ad543b339f1 -r c3248c71ae74 convert/spc_convert.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convert/spc_convert.c Fri Oct 21 06:21:33 2011 -0700 @@ -0,0 +1,57 @@ +/* Records SPC into wave file. Uses dsp_filter to give more authentic sound. + + Usage: play_spc [-s seconds] input.spc output.wav +*/ + +#include "snes_spc/spc.h" + +#include "demo/wave_writer.h" +#include "demo/demo_util.h" /* error(), load_file() */ + +int main( int argc, char** argv ) +{ + /* Create emulator and filter */ + SNES_SPC* snes_spc = spc_new(); + SPC_Filter* filter = spc_filter_new(); + if ( !snes_spc || !filter ) error( "Out of memory" ); + + /* Load SPC */ + { + /* Load file into memory */ + long spc_size; + void* spc = load_file( (argc > 1) ? argv [1] : "test.spc", &spc_size ); + + /* Load SPC data into emulator */ + error( spc_load_spc( snes_spc, spc, spc_size ) ); + free( spc ); /* emulator makes copy of data */ + + /* Most SPC files have garbage data in the echo buffer, so clear that */ + spc_clear_echo( snes_spc ); + + /* Clear filter before playing */ + spc_filter_clear( filter ); + } + + /* Record 20 seconds to wave file */ + wave_open( spc_sample_rate, "out.wav" ); + wave_enable_stereo(); + while ( wave_sample_count() < 20 * spc_sample_rate * 2 ) + { + /* Play into buffer */ +#define BUF_SIZE 2048 + short buf [BUF_SIZE]; + error( spc_play( snes_spc, BUF_SIZE, buf ) ); + + /* Filter samples */ + spc_filter_run( filter, buf, BUF_SIZE ); + + wave_write( buf, BUF_SIZE ); + } + + /* Cleanup */ + spc_filter_delete( filter ); + spc_delete( snes_spc ); + wave_close(); + + return 0; +}