/*--------------------------------------------------------------------------*/ long _fftwfA (char* w, long ni) /* export wisdom to string */ { char *ws; ws = fftwf_export_wisdom_to_string(); long n = strlen(ws); if (n>ni) return -n; strcpy(w,ws); return n; }
int main(int argc, char **argv) { svSystemSpecificInitialisation(); #ifdef Q_WS_X11 #if QT_VERSION >= 0x040500 // QApplication::setGraphicsSystem("raster"); #endif #endif #ifdef Q_OS_MAC if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_8) { // Fix for OS/X 10.9 font problem QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande"); } #endif SVApplication application(argc, argv); QStringList args = application.arguments(); signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); #ifndef Q_OS_WIN32 signal(SIGHUP, signalHandler); signal(SIGQUIT, signalHandler); #endif bool audioOutput = true; bool oscSupport = true; if (args.contains("--help") || args.contains("-h") || args.contains("-?")) { cerr << QApplication::tr( "\nSonic Visualiser is a program for viewing and exploring audio data\nfor semantic music analysis and annotation.\n\nUsage:\n\n %1 [--no-audio] [--no-osc] [<file> ...]\n\n --no-audio: Do not attempt to open an audio output device\n --no-osc: Do not provide an Open Sound Control port for remote control\n <file>: One or more Sonic Visualiser (.sv) and audio files may be provided.\n").arg(argv[0]) << endl; exit(2); } if (args.contains("--no-audio")) audioOutput = false; if (args.contains("--no-osc")) oscSupport = false; QApplication::setOrganizationName("sonic-visualiser"); QApplication::setOrganizationDomain("sonicvisualiser.org"); QApplication::setApplicationName(QApplication::tr("Sonic Visualiser")); QSplashScreen *splash = 0; QSettings settings; settings.beginGroup("Preferences"); if (settings.value("show-splash", true).toBool()) { QPixmap pixmap(":/icons/sv-splash.png"); QPainter painter; painter.begin(&pixmap); QString text = QString("v%1").arg(SV_VERSION); painter.drawText (pixmap.width() - painter.fontMetrics().width(text) - 10, 10 + painter.fontMetrics().ascent(), text); painter.end(); splash = new QSplashScreen(pixmap); splash->show(); QTimer::singleShot(5000, splash, SLOT(hide())); application.processEvents(); } settings.endGroup(); settings.beginGroup("RDF"); if (!settings.contains("rdf-indices")) { QStringList list; list << "http://www.vamp-plugins.org/rdf/plugins/index.txt"; settings.setValue("rdf-indices", list); } settings.endGroup(); QIcon icon; int sizes[] = { 16, 22, 24, 32, 48, 64, 128 }; for (int i = 0; i < int(sizeof(sizes)/sizeof(sizes[0])); ++i) { icon.addFile(QString(":icons/sv-%1x%2.png").arg(sizes[i]).arg(sizes[i])); } QApplication::setWindowIcon(icon); QString language = QLocale::system().name(); settings.beginGroup("Preferences"); language = settings.value("locale", language).toString(); settings.endGroup(); QTranslator qtTranslator; QString qtTrName = QString("qt_%1").arg(language); SVDEBUG << "Loading " << qtTrName << "... "; bool success = false; if (!(success = qtTranslator.load(qtTrName))) { QString qtDir = getenv("QTDIR"); if (qtDir != "") { success = qtTranslator.load (qtTrName, QDir(qtDir).filePath("translations")); } } if (!success) { SVDEBUG << "Failed\nFailed to load Qt translation for locale" << endl; } else { cerr << "Done" << endl; } application.installTranslator(&qtTranslator); QTranslator svTranslator; QString svTrName = QString("sonic-visualiser_%1").arg(language); SVDEBUG << "Loading " << svTrName << "... "; svTranslator.load(svTrName, ":i18n"); SVDEBUG << "Done" << endl; application.installTranslator(&svTranslator); StoreStartupLocale(); // Permit size_t and PropertyName to be used as args in queued signal calls qRegisterMetaType<PropertyContainer::PropertyName>("PropertyContainer::PropertyName"); MainWindow *gui = new MainWindow(audioOutput, oscSupport); application.setMainWindow(gui); InteractiveFileFinder::setParentWidget(gui); TransformUserConfigurator::setParentWidget(gui); if (splash) { QObject::connect(gui, SIGNAL(hideSplash()), splash, SLOT(hide())); } QDesktopWidget *desktop = QApplication::desktop(); QRect available = desktop->availableGeometry(); int width = (available.width() * 2) / 3; int height = available.height() / 2; if (height < 450) height = (available.height() * 2) / 3; if (width > height * 2) width = height * 2; settings.beginGroup("MainWindow"); QSize size = settings.value("size", QSize(width, height)).toSize(); gui->resizeConstrained(size); if (settings.contains("position")) { QRect prevrect(settings.value("position").toPoint(), size); if (!(available & prevrect).isEmpty()) { gui->move(prevrect.topLeft()); } } if (settings.value("maximised", false).toBool()) { gui->setWindowState(Qt::WindowMaximized); } settings.endGroup(); gui->show(); // The MainWindow class seems to have trouble dealing with this if // it tries to adapt to this preference before the constructor is // complete. As a lazy hack, apply it explicitly from here gui->preferenceChanged("Property Box Layout"); application.m_readyForFiles = true; // Ready to receive files from e.g. Apple Events for (QStringList::iterator i = args.begin(); i != args.end(); ++i) { if (i == args.begin()) continue; if (i->startsWith('-')) continue; QString path = *i; application.handleFilepathArgument(path, splash); } for (QStringList::iterator i = application.m_filepathQueue.begin(); i != application.m_filepathQueue.end(); ++i) { QString path = *i; application.handleFilepathArgument(path, splash); } #ifdef HAVE_FFTW3F settings.beginGroup("FFTWisdom"); QString wisdom = settings.value("wisdom").toString(); if (wisdom != "") { fftwf_import_wisdom_from_string(wisdom.toLocal8Bit().data()); } #ifdef HAVE_FFTW3 wisdom = settings.value("wisdom_d").toString(); if (wisdom != "") { fftw_import_wisdom_from_string(wisdom.toLocal8Bit().data()); } #endif settings.endGroup(); #endif if (splash) splash->finish(gui); delete splash; /* TipDialog tipDialog; if (tipDialog.isOK()) { tipDialog.exec(); } */ int rv = application.exec(); gui->hide(); cleanupMutex.lock(); if (!cleanedUp) { TransformFactory::deleteInstance(); TempDirectory::getInstance()->cleanup(); cleanedUp = true; } application.releaseMainWindow(); #ifdef HAVE_FFTW3F settings.beginGroup("FFTWisdom"); char *cwisdom = fftwf_export_wisdom_to_string(); if (cwisdom) { settings.setValue("wisdom", cwisdom); free(cwisdom); } #ifdef HAVE_FFTW3 cwisdom = fftw_export_wisdom_to_string(); if (cwisdom) { settings.setValue("wisdom_d", cwisdom); free(cwisdom); } #endif settings.endGroup(); #endif FileSource::debugReport(); delete gui; cleanupMutex.unlock(); return rv; }
int main(int argc, char **argv) { fftwf_plan ptmp; FILE *wisdom_file; char *wisdom_string; fftwf_complex *in, *out; double *inf,*outf; in = (fftwf_complex *)fftwf_malloc(65536*sizeof(fftwf_complex)); out = (fftwf_complex *)fftwf_malloc(65536*sizeof(fftwf_complex)); inf = (double *)in; outf = (double *)out; if ((wisdom_file = fopen("wisdom","w")) != NULL) { fprintf(stderr,"Wisdom file successfully opened\n"); fprintf(stderr,"Checking forward fft's up to 8192\n"); fprintf(stderr,"64 Forward\n"); ptmp = fftwf_plan_dft_1d(64,in,out,FFTW_FORWARD, FFTW_PATIENT); { int i; for(i=0;i<64;i++) { inf[2*i] = cos(i*M_PI/129.0); inf[2*i+1] = sin(i*M_PI/129.0); } fftwf_execute(ptmp); /*for(i=0;i<64;i++) { fprintf(stderr,"bin[%3d] = (%15.10f %15.10f)\n",i,outf[2*i],outf[2*i+1]); }*/ } fftwf_destroy_plan(ptmp); fprintf(stderr,"128 Forward\n"); ptmp = fftwf_plan_dft_1d(128,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"256 Forward\n"); ptmp = fftwf_plan_dft_1d(256,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"512 Forward\n"); ptmp = fftwf_plan_dft_1d(512,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"1024 Forward\n"); ptmp = fftwf_plan_dft_1d(1024,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"2048 Forward\n"); ptmp = fftwf_plan_dft_1d(2048,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"4096 Forward\n"); ptmp = fftwf_plan_dft_1d(4096,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"8192 Forward\n"); ptmp = fftwf_plan_dft_1d(8192,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); /* fprintf(stderr,"16384 Forward\n"); ptmp = fftwf_plan_dft_1d(16384,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"32768 Forward\n"); ptmp = fftwf_plan_dft_1d(32768,in,out,FFTW_FORWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); */ fprintf(stderr,"Checking inverse fft's up to 8192\n"); fprintf(stderr,"64 Backward\n"); ptmp = fftwf_plan_dft_1d(64,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"128 Backward\n"); ptmp = fftwf_plan_dft_1d(128,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"256 Backward\n"); ptmp = fftwf_plan_dft_1d(256,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"512 Backward\n"); ptmp = fftwf_plan_dft_1d(512,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"1024 Backward\n"); ptmp = fftwf_plan_dft_1d(1024,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"2048 Backward\n"); ptmp = fftwf_plan_dft_1d(2048,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"4096 Backward\n"); ptmp = fftwf_plan_dft_1d(4096,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"8192 Backward\n"); ptmp = fftwf_plan_dft_1d(8192,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); /* fprintf(stderr,"16384 Backward\n"); ptmp = fftwf_plan_dft_1d(16384,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); fprintf(stderr,"32768 Backward\n"); ptmp = fftwf_plan_dft_1d(32768,in,out,FFTW_BACKWARD, FFTW_PATIENT); fftwf_destroy_plan(ptmp); */ fftwf_free(in); fftwf_free(out); fprintf(stderr,"Finished computing, exporting wisdom\n"); fflush(stderr); wisdom_string = fftwf_export_wisdom_to_string(); fprintf(wisdom_file,"%s",wisdom_string); fclose(wisdom_file); fprintf(stderr,"%s\n",wisdom_string); fprintf(stderr,"Done!\n"); } else fprintf(stderr,"Could not create the wisdom file.\n"); //fprintf(stderr,"Press the Enter key to close."),gets(dummy); }