Thank you, Edgar!
Your help keeps me going!
On more thing to clarify: my Audacity should get a full qualified path with the input and the output argument, e.g.: "C:UsersmeDesktopAudacity.exe" -input "C:UsersmeMusicinputsinput.wav" -output "C:UsersmeMusicoutputsoutput.wav".
Do you think, that would be possible? Without having the CLI CDed to the folder in which the -input file resides, seems to work, when opening/ importing a wave-file.
Can't I use paths with spaces if I put them into apostrophes ("")?
I tried the whole day to get my Audacity running. But with few success.
Now it doesn't try to open the given output-path anymore, but it doesn't save the edited wave-file OnCloseWindow anymore, though I didn't change anything on it at OnCloseWindow.
This is my OnInit-function now (I commented out the if (!handled) branch):
Code: Select all
bool AudacityApp::OnInit()
{
//efm5 start new
SetCLIpath(wxGetCwd());
mbDoUnattended = false;
mbDoTo4 = false;
mbSilenceProject = false;
mbAmplify = false;
mbDoPrompt = false;
mbFileNameError = false;
mbNeedToSave = true;
mbSaveAsSet = false; //mytry
//efm5 end new
m_aliasMissingWarningShouldShow = true;
m_LastMissingBlockFile = NULL;
#if defined(__WXGTK__)
// Workaround for bug 154 -- initialize to false
inKbdHandler = false;
#endif
#if defined(__WXMAC__)
// Disable window animation
wxSystemOptions::SetOption( wxMAC_WINDOW_PLAIN_TRANSITION, 1 );
#endif
//MERGE:
//Everything now uses Audacity name for preferences.
//(Audacity and CleanSpeech the same program and use
//the same preferences file).
//
// LL: Moved here from InitPreferences() to ensure VST effect
// discovery writes configuration to the correct directory
// on OSX with case-sensitive file systems.
#ifdef AUDACITY_NAME
wxString appName = wxT(AUDACITY_NAME);
wxString vendorName = wxT(AUDACITY_NAME);
#else
wxString vendorName = wxT("Audacity");
wxString appName = wxT("Audacity");
#endif
wxTheApp->SetVendorName(vendorName);
wxTheApp->SetAppName(appName);
#ifdef USE_VST // if no VST support, answer is always no
// Have we been started to check a plugin?
if (argc == 3 && wxStrcmp(argv[1], VSTCMDKEY) == 0) {
wxHandleFatalExceptions();
VSTEffect::Check(argv[2]);
return false;
}
#endif
#ifndef __WXMAC__
mLogger = new wxLogWindow(NULL, wxT("Audacity Log"), false, false);
mLogger->SetActiveTarget(mLogger);
mLogger->EnableLogging(true);
mLogger->SetLogLevel(wxLOG_Max);
#endif
// Unused strings that we want to be translated, even though
// we're not using them yet...
wxString future1 = _("Master Gain Control");
wxString future2 = _("Input Meter");
wxString future3 = _("Output Meter");
::wxInitAllImageHandlers();
wxFileSystem::AddHandler(new wxZipFSHandler);
InitPreferences();
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) && !defined(__CYGWIN__)
this->AssociateFileTypes();
#endif
// TODO - read the number of files to store in history from preferences
mRecentFiles = new FileHistory(ID_RECENT_LAST - ID_RECENT_FIRST + 1, ID_RECENT_CLEAR);
mRecentFiles->Load(*gPrefs, wxT("RecentFiles"));
//
// Paths: set search path and temp dir path
//
wxString home = wxGetHomeDir();
mAppHomeDir = home;
theTheme.EnsureInitialised();
// AColor depends on theTheme.
AColor::Init();
/* On Unix systems, the default temp dir is in /tmp. */
/* Search path (for plug-ins, translations etc) is (in this order):
* The AUDACITY_PATH environment variable
* The current directory
* The user's .audacity-files directory in their home directory
* The "share" and "share/doc" directories in their install path */
#ifdef __WXGTK__
defaultTempDir.Printf(wxT("/tmp/audacity-%s"), wxGetUserId().c_str());
wxString pathVar = wxGetenv(wxT("AUDACITY_PATH"));
if (pathVar != wxT(""))
AddMultiPathsToPathList(pathVar, audacityPathList);
AddUniquePathToPathList(::wxGetCwd(), audacityPathList);
AddUniquePathToPathList(wxString::Format(wxT("%s/.audacity-files"),
home.c_str()),
audacityPathList);
#ifdef AUDACITY_NAME
AddUniquePathToPathList(wxString::Format(wxT("%s/share/%s"),
wxT(INSTALL_PREFIX), wxT(AUDACITY_NAME)),
audacityPathList);
AddUniquePathToPathList(wxString::Format(wxT("%s/share/doc/%s"),
wxT(INSTALL_PREFIX), wxT(AUDACITY_NAME)),
audacityPathList);
#else //AUDACITY_NAME
AddUniquePathToPathList(wxString::Format(wxT("%s/share/audacity"),
wxT(INSTALL_PREFIX)),
audacityPathList);
AddUniquePathToPathList(wxString::Format(wxT("%s/share/doc/audacity"),
wxT(INSTALL_PREFIX)),
audacityPathList);
#endif //AUDACITY_NAME
AddUniquePathToPathList(wxString::Format(wxT("%s/share/locale"),
wxT(INSTALL_PREFIX)),
audacityPathList);
#endif //__WXGTK__
wxFileName tmpFile;
tmpFile.AssignTempFileName(wxT("nn"));
wxString tmpDirLoc = tmpFile.GetPath(wxPATH_GET_VOLUME);
::wxRemoveFile(tmpFile.GetFullPath());
// On Mac and Windows systems, use the directory which contains Audacity.
#ifdef __WXMSW__
// On Windows, the path to the Audacity program is in argv[0]
wxString progPath = wxPathOnly(argv[0]);
AddUniquePathToPathList(progPath, audacityPathList);
AddUniquePathToPathList(progPath+wxT("\Languages"), audacityPathList);
defaultTempDir.Printf(wxT("%s\audacity_temp"),
tmpDirLoc.c_str());
#endif //__WXWSW__
#ifdef __WXMAC__
// On Mac OS X, the path to the Audacity program is in argv[0]
wxString progPath = wxPathOnly(argv[0]);
AddUniquePathToPathList(progPath, audacityPathList);
// If Audacity is a "bundle" package, then the root directory is
// the great-great-grandparent of the directory containing the executable.
AddUniquePathToPathList(progPath+wxT("/../../../"), audacityPathList);
AddUniquePathToPathList(progPath+wxT("/Languages"), audacityPathList);
AddUniquePathToPathList(progPath+wxT("/../../../Languages"), audacityPathList);
defaultTempDir.Printf(wxT("%s/audacity-%s"),
tmpDirLoc.c_str(),
wxGetUserId().c_str());
#endif //__WXMAC__
// BG: Create a temporary window to set as the top window
wxFrame *temporarywindow = new wxFrame(NULL, -1, wxT("temporarytopwindow"));
SetTopWindow(temporarywindow);
// Initialize the ModuleManager
ModuleManager::Initialize();
// Initialize the CommandHandler
InitCommandHandler();
// load audacity plug-in modules
LoadModules(*mCmdHandler);
// Locale
// wxWidgets 2.3 has a much nicer wxLocale API. We can make this code much
// better once we move to wx 2.3/2.4.
wxString lang = gPrefs->Read(wxT("/Locale/Language"), wxT(""));
if (lang == wxT(""))
lang = GetSystemLanguageCode();
#ifdef NOT_RQD
//TIDY-ME: (CleanSpeech) Language prompt??
// The prompt for language only happens ONCE on a system.
// I don't think we should disable it JKC
wxString lang = gPrefs->Read(wxT("/Locale/Language"), "en"); //lda
// Pop up a dialog the first time the program is run
//lda if (lang == "")
//lda lang = ChooseLanguage(NULL);
#endif
mLocale = NULL;
InitLang( lang );
// Init DirManager, which initializes the temp directory
// If this fails, we must exit the program.
if (!InitTempDir()) {
FinishPreferences();
return false;
}
// More initialization
InitCleanSpeech();
InitDitherers();
InitAudioIO();
LoadEffects();
#ifdef __WXMAC__
// On the Mac, users don't expect a program to quit when you close the last window.
// Create a menubar that will show when all project windows are closed.
wxMenu *fileMenu = new wxMenu();
wxMenu *recentMenu = new wxMenu();
fileMenu->Append(wxID_NEW, wxString(_("&New")) + wxT("tCtrl+N"));
fileMenu->Append(wxID_OPEN, wxString(_("&Open...")) + wxT("tCtrl+O"));
fileMenu->AppendSubMenu(recentMenu, _("Open &Recent..."));
fileMenu->Append(wxID_ABOUT, _("&About Audacity..."));
fileMenu->Append(wxID_PREFERENCES, wxString(_("&Preferences...")) + wxT("tCtrl+,"));
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&File"));
wxMenuBar::MacSetCommonMenuBar(menuBar);
mRecentFiles->UseMenu(recentMenu);
mRecentFiles->AddFilesToMenu(recentMenu);
// This invisibale frame will be the "root" of all other frames and will
// become the active frame when no projects are open.
gParentFrame = new wxFrame(NULL, -1, wxEmptyString, wxPoint(0, 0), wxSize(0, 0), 0);
#endif //__WXMAC__
SetExitOnFrameDelete(true);
//efm5 start
#if !defined(__CYGWIN__)//might work on Cygwin
if (argc > 1) {
if (!wxString(wxT("-doTo4")).CmpNoCase(argv[1])) {
mbDoUnattended = true;
mbDoTo4 = true;
}
if (!wxString(wxT("-doTo3")).CmpNoCase(argv[1])) {
mbDoUnattended = true;
mbDoTo3 = true;
}
else if (!wxString(wxT("-doSilenceProject")).CmpNoCase(argv[1])) {
mbDoUnattended = true;
mbSilenceProject = true;
}
else if (!wxString(wxT("-doAmplify")).CmpNoCase(argv[1])) {
mbDoUnattended = true;
mbAmplify = true;
}
}
#endif
//efm5 end
AudacityProject *project = CreateNewAudacityProject();
mCmdHandler->SetProject(project);
wxWindow * pWnd = MakeHijackPanel() ;
if( pWnd )
{
project->Show( false );
SetTopWindow(pWnd);
pWnd->Show( true );
}
delete temporarywindow;
if( project->mShowSplashScreen )
project->OnHelpWelcome();
// JKC 10-Sep-2007: Enable monitoring from the start.
// (recommended by lprod.org).
// Monitoring stops again after any
// PLAY or RECORD completes.
// So we also call StartMonitoring when STOP is called.
project->MayStartMonitoring();
#ifdef __WXMAC__
mLogger = new wxLogWindow(NULL, wxT("Audacity Log"), false, false);
mLogger->SetActiveTarget(mLogger);
mLogger->EnableLogging(true);
mLogger->SetLogLevel(wxLOG_Max);
#endif
#ifdef USE_FFMPEG
FFmpegStartup();
#endif
#ifdef USE_GSTREAMER
GStreamerStartup();
#endif
mImporter = new Importer;
//
// Auto-recovery
//
bool didRecoverAnything = false;
if (!ShowAutoRecoveryDialogIfNeeded(&project, &didRecoverAnything))
{
// Important: Prevent deleting any temporary files!
DirManager::SetDontDeleteTempFiles();
QuitAudacity(true);
}
//
// Command-line parsing, but only if we didn't recover
//
#if !defined(__CYGWIN__)
// Parse command-line arguments
if (argc > 1 && !didRecoverAnything) {
for (int option = 1; option < argc; option++) {
if (!argv[option])
continue;
bool handled = false;
if (!wxString(wxT("-help")).CmpNoCase(argv[option])) {
PrintCommandLineHelp(); // print the help message out
exit(0);
}
if (option < argc - 1 &&
argv[option + 1] &&
!wxString(wxT("-blocksize")).CmpNoCase(argv[option])) {
long theBlockSize;
if (wxString(argv[option + 1]).ToLong(&theBlockSize)) {
if (theBlockSize >= 256 && theBlockSize < 100000000) {
wxFprintf(stderr, _("Using block size of %ldn"),
theBlockSize);
Sequence::SetMaxDiskBlockSize(theBlockSize);
}
}
option++;
handled = true;
}
if (!handled && !wxString(wxT("-test")).CmpNoCase(argv[option])) {
RunBenchmark(NULL);
exit(0);
}
if (!handled && !wxString(wxT("-version")).CmpNoCase(argv[option])) {
wxPrintf(wxT("Audacity v%s (%s)n"),
AUDACITY_VERSION_STRING,
(wxUSE_UNICODE ? wxT("Unicode") : wxT("ANSI")));
exit(0);
}
//efm5 start
if (!handled && !wxString(wxT("-doTo3")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
handled = true;
}
if (!handled && !wxString(wxT("-doTo4")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
handled = true;
}
if (!handled && !wxString(wxT("-doSilenceProject")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
wxString tempFilename(GetCLIpath());
tempFilename.Append(wxT("\"));//must escape NEWLINE to compile
tempFilename.Append(argv[option+1]);
mUnattendedProjectName = tempFilename;
handled = true;
}
if (!handled && !wxString(wxT("-doAmplify")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
wxString tempFilename(GetCLIpath());
tempFilename.Append(wxT("\"));//must escape NEWLINE to compile
tempFilename.Append(argv[option+1]);
mUnattendedProjectName = tempFilename;
handled = true;
}
//efm5 end
//mytry start
if (!handled && !wxString(wxT("-input")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
wxFileName fn(argv[option+1]);
fn.MakeAbsolute();
project->OpenFile(fn.GetFullPath());
//wxString tempFilename(GetCLIpath());
//tempFilename.Append(wxT("\"));//must escape NEWLINE to compile
//tempFilename.Append(argv[option+1]);
//project->OpenFile(tempFilename);
handled = true;
}
if (!handled && !wxString(wxT("-output")).CmpNoCase(argv[option])) {
if (!project)
project = CreateNewAudacityProject();
wxString tempFilename(GetCLIpath());
tempFilename.Append(wxT("\"));//must escape NEWLINE to compile
tempFilename.Append(argv[option+1]);
mSaveAsFileName = tempFilename;
//mSaveAsFileName = argv[option+1];
//mSaveAsFileName.MakeAbsolute();
mbSaveAsSet = true;
handled = true;
}
//mytry end
if (argv[option][0] == wxT('-') && !handled) {
wxPrintf(_("Unknown command line option: %sn"), argv[option]);
exit(0);
}
/*//mytry start
if (!handled)
{
if (!project)
{
// Create new window for project
project = CreateNewAudacityProject();
}
//efm5 start
wxString tempFN(GetCLIpath());
tempFN.Append(wxT("\"));//must escape NEWLINE to compile
tempFN.Append(argv[option]);
project->OpenFile(tempFN);
if (mbDoUnattended) {
wxSetWorkingDirectory(GetCLIpath());
project->UnattendedCLIAction();
}
// Always open files with an absolute path
//wxFileName fn(argv[option]);
//fn.MakeAbsolute();
//project->OpenFile(fn.GetFullPath());
//efm5 end
project = NULL; // don't reuse this project for other file
}
*///mytry end
} // for option...
} // if (argc>1)
#else //__CYGWIN__
// Cygwin command line parser (by Dave Fancella)
if (argc > 1 && !didRecoverAnything) {
int optionstart = 1;
bool startAtOffset = false;
// Scan command line arguments looking for trouble
for (int option = 1; option < argc; option++) {
if (!argv[option])
continue;
// Check to see if argv[0] is copied across other arguments.
// This is the reason Cygwin gets its own command line parser.
if (wxString(argv[option]).Lower().Contains(wxString(wxT("audacity.exe")))) {
startAtOffset = true;
optionstart = option + 1;
}
}
for (int option = optionstart; option < argc; option++) {
if (!argv[option])
continue;
bool handled = false;
bool openThisFile = false;
wxString fileToOpen;
if (!wxString(wxT("-help")).CmpNoCase(argv[option])) {
PrintCommandLineHelp(); // print the help message out
exit(0);
}
if (option < argc - 1 &&
argv[option + 1] &&
!wxString(wxT("-blocksize")).CmpNoCase(argv[option])) {
long theBlockSize;
if (wxString(argv[option + 1]).ToLong(&theBlockSize)) {
if (theBlockSize >= 256 && theBlockSize < 100000000) {
wxFprintf(stderr, _("Using block size of %ldn"),
theBlockSize);
Sequence::SetMaxDiskBlockSize(theBlockSize);
}
}
option++;
handled = true;
}
if (!handled && !wxString(wxT("-test")).CmpNoCase(argv[option])) {
RunBenchmark(NULL);
exit(0);
}
if (argv[option][0] == wxT('-') && !handled) {
wxPrintf(_("Unknown command line option: %sn"), argv[option]);
exit(0);
}
if(handled)
fileToOpen.Clear();
if (!handled)
fileToOpen = fileToOpen + wxT(" ") + argv[option];
if(wxString(argv[option]).Lower().Contains(wxT(".aup")))
openThisFile = true;
if(openThisFile) {
openThisFile = false;
if (!project)
{
// Create new window for project
project = CreateNewAudacityProject();
}
project->OpenFile(fileToOpen);
project = NULL; // don't reuse this project for other file
}
} // for option...
} // if (argc>1)
#endif // __CYGWIN__ (Cygwin command-line parser)
gInited = true;
ModuleManager::Dispatch(AppInitialized);
mWindowRectAlreadySaved = FALSE;
wxLog::FlushActive(); // Make sure all log messages are written.
mTimer = new wxTimer(this, kAudacityAppTimerID);
mTimer->Start(200);
return TRUE;
}
I'll have to rest something to get my mind clearer.
I would be very happy if you could help me on this.