diff --git a/src/main.cpp b/src/main.cpp index 5df66c4b6..a127d6882 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,6 +25,7 @@ FurnaceGUI g; #endif String outName; +String vgmOutName; int loops=1; DivAudioExportModes outMode=DIV_EXPORT_MODE_ONE; @@ -180,6 +181,12 @@ bool pOutput(String val) { return true; } +bool pVGMOut(String val) { + vgmOutName=val; + e.setAudio(DIV_AUDIO_DUMMY); + return true; +} + bool needsValue(String param) { for (size_t i=0; i","output audio to file")); + params.push_back(TAParam("O","vgmout",true,pVGMOut,"","output .vgm data")); params.push_back(TAParam("L","loglevel",true,pLogLevel,"debug|info|warning|error","set the log level (info by default)")); params.push_back(TAParam("v","view",true,pView,"pattern|commands|nothing","set visualization (pattern by default)")); params.push_back(TAParam("c","console",false,pConsole,"","enable console mode")); @@ -207,6 +215,7 @@ void initParams() { int main(int argc, char** argv) { outName=""; + vgmOutName=""; initParams(); @@ -320,10 +329,28 @@ int main(int argc, char** argv) { logE("could not initialize engine!\n"); return 1; } - if (outName!="") { - e.setConsoleMode(true); - e.saveAudio(outName.c_str(),loops,outMode); - e.waitAudioFile(); + if (outName!="" || vgmOutName!="") { + if (vgmOutName!="") { + SafeWriter* w=e.saveVGM(); + if (w!=NULL) { + FILE* f=fopen(vgmOutName.c_str(),"wb"); + if (f!=NULL) { + fwrite(w->getFinalBuf(),1,w->size(),f); + fclose(f); + } else { + logE("could not open file! %s\n",strerror(errno)); + } + w->finish(); + delete w; + } else { + logE("could not write VGM!\n"); + } + } + if (outName!="") { + e.setConsoleMode(true); + e.saveAudio(outName.c_str(),loops,outMode); + e.waitAudioFile(); + } return 0; }