diff --git a/src/ProjectFileManager.cpp b/src/ProjectFileManager.cpp index 65540b873..c1f85206a 100644 --- a/src/ProjectFileManager.cpp +++ b/src/ProjectFileManager.cpp @@ -625,18 +625,34 @@ bool ProjectFileManager::SaveCopyWaveTracks(const FilePath & strProjectPathName, auto &trackFactory = TrackFactory::Get( project ); wxString extension, fileFormat; -#ifdef USE_LIBVORBIS - if (bLossless) { - extension = wxT("wav"); - fileFormat = wxT("WAVFLT"); - } else { + bool haveVorbis = +#if defined(USE_LIBVORBIS) + true; +#else + false; +#endif + if (!bLossless && haveVorbis) { extension = wxT("ogg"); fileFormat = wxT("OGG"); + } else{ + extension = wxT("wav"); + fileFormat = wxT("WAV"); + + // LLL: Temporary hack until I can figure out how to add an "ExportPCMCommand" + // to create a 32-bit float WAV file. It tells the ExportPCM exporter + // to use float when exporting the next WAV file. + // + // This was done as part of the resolution for bug #2062. + // + // See: ExportPCM.cpp, LoadEncoding() + auto cleanup = finally([&] { + gPrefs->DeleteEntry(wxT("/FileFormats/ExportFormat_SF1_ForceFloat")); + gPrefs->Flush(); + }); + gPrefs->Write(wxT("/FileFormats/ExportFormat_SF1_ForceFloat"), true); + gPrefs->Flush(); } -#else - extension = wxT("wav"); - fileFormat = wxT("WAVFLT"); -#endif + // Some of this is similar to code in ExportMultipleDialog::ExportMultipleByTrack // but that code is really tied into the dialogs. diff --git a/src/export/ExportPCM.cpp b/src/export/ExportPCM.cpp index 22a4b6e10..0e10ef0d3 100644 --- a/src/export/ExportPCM.cpp +++ b/src/export/ExportPCM.cpp @@ -62,8 +62,6 @@ static const kFormats[] = {SF_FORMAT_AIFF | SF_FORMAT_PCM_16, wxT("AIFF"), XO("AIFF (Apple/SGI)")}, #endif {SF_FORMAT_WAV | SF_FORMAT_PCM_16, wxT("WAV"), XO("WAV (Microsoft)")}, - {SF_FORMAT_WAV | SF_FORMAT_PCM_24, wxT("WAV24"), XO("WAV (Microsoft) signed 24-bit PCM")}, - {SF_FORMAT_WAV | SF_FORMAT_FLOAT, wxT("WAVFLT"), XO("WAV (Microsoft) 32-bit float PCM")}, }; enum @@ -72,8 +70,6 @@ enum FMT_AIFF, #endif FMT_WAV, - FMT_WAV24, - FMT_WAVFLT, FMT_OTHER }; @@ -83,18 +79,33 @@ enum static int LoadOtherFormat(int def = 0) { - return gPrefs->Read(wxString::Format(wxT("/FileFormats/ExportFormat_SF1")), + return gPrefs->Read(wxT("/FileFormats/ExportFormat_SF1"), kFormats[0].format & SF_FORMAT_TYPEMASK); } static void SaveOtherFormat(int val) { - gPrefs->Write(wxString::Format(wxT("/FileFormats/ExportFormat_SF1")), val); + gPrefs->Write(wxT("/FileFormats/ExportFormat_SF1"), val); gPrefs->Flush(); } static int LoadEncoding(int type) { + // LLL: Temporary hack until I can figure out how to add an "ExportPCMCommand" + // to create a 32-bit float WAV file. It tells the ExportPCM exporter + // to use float when exporting the next WAV file. + // + // This was done as part of the resolution for bug #2062. + // + // See: ProjectFileManager.cpp, ProjectFileManager::SaveCopyWaveTracks() + if (gPrefs->HasEntry(wxT("/FileFormats/ExportFormat_SF1_ForceFloat"))) + { + gPrefs->DeleteEntry(wxT("/FileFormats/ExportFormat_SF1_ForceFloat")); + gPrefs->Flush(); + + return SF_FORMAT_FLOAT; + } + return gPrefs->Read(wxString::Format(wxT("/FileFormats/ExportFormat_SF1_Type/%s_%x"), sf_header_shortname(type), type), (long int) 0); } @@ -492,11 +503,6 @@ ProgressResult ExportPCM::Export(AudacityProject *project, sf_format = SF_FORMAT_WAV; break; - case FMT_WAV24: - case FMT_WAVFLT: - sf_format = kFormats[subformat].format; - break; - default: // Retrieve the current format. sf_format = LoadOtherFormat();