Saving (exporting) to non-Wav is needlessly tedious

Have you tried my revised (corrected workaround above - it does just that …

I just tested this and it works just as I say :sunglasses: :nerd:

WC

OK, but that is quite a specific use case that most users will never experience, and there are many workarounds to choose from:

  • Open a file browser and copy the name from there.
  • “File menu > Export as WAV”, select the file name, then change the export type (and file extension) to “.flac”
  • Export all of the files with short names, and rename them later:
    In the Windows file browser, you can select multiple files of different types, then right click on one and select “Rename”. Rename that file and all selected files are renamed.
  • Before exporting the original WAV file; “Extra > Scriptables 1 > Set Project” and set the project name.
  • Probably some other ways …

case that most users will never experience

You are a celebrity unicorn.

I’m sure there are occasional posters with similar, very much simplified versions of this problem, but I’ve never seen anything like this application.

People do run into problems when they try to adapt Audacity to industrial applications: “I need to open 50,000 files…” and the perennial favorite: “I need to record six weeks.”

Companies with an eye on the bottom line are attracted to Audacity’s price point.

Unfortunately, both developers are intent on making an app useful for most casual home users (on all three platforms) and there are only so many hours. Everybody thinks Audacity is a large corporation, but it’s not, as witness the British corporate headquarters at Lands End.

So if you want to contribute some of your programming skills, we’d be glad to have you. Are you conversant in C++? I think that’s how the base Audacity is written. So until then, we’ll be happy to add you to the Future Consideration List.

Koz

Thank you all for the insightful replies. Yes, I realize this is a freebie, so should not expect the kind of support that one might expect from a giant like Microsoft or something.

Actually, before I reported the situation, I had looked for such an option under preferences. If such a switch was to be implemented, I suspect it would be better there than at the export dialog box. But I will proceed with the workarounds for now.

Hi Steve. I downloaded both. I’ve used an older LameDrop before. This newer one works, I’m sure, but it’s only for MP3, as best I can tell from the encoding options. Foobar2000 doesn’t claim to do conversions, but is a player. But I proceeded to install, and still cannot see any evidence of file conversion utility.

Yes “LamedropXP” is specifically for MP3 (using LAME). That was just an example - there are many others.

Foobar2000 has very powerful transcoding abilities. Their documentation is here:
http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Foobar2000
and specifically:
http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Converter

Thanks. Will check it out. While we’re here, can you please tell me where I look to find the feature to convert my loaded file from 48k to 44.1k sampling rate? I don’t see anything like it in “Effects”.

When you export a file, the sample rate of the exported file is determined by the “Project Rate” (lower left corner of the main Audacity window https://manual.audacityteam.org/man/selection_toolbar.html#rate)

To me, changing the sample rate is a big deal. I’m doing it now, changing a 4-hr wav from 48000 to 44100, and will take about 8 min. But there’s nothing talking about this conversion in the GUI anywhere (that is, it doesn’t label anything as being “Change sample rate” or something). Can you assure me that the conversion will be done “as perfectly as mathematically possible”?

Actually, I just googled the issue and it says NOT to simply change that Projected Rate, which is only for playback. It said to find “Resample” under “Tracks”.

I’m betting that “it” is not the documentation:
“Changing the project rate in Selection Toolbar immediately changes the sample rate at which new tracks will be recorded or generated in the current project, and at which existing tracks will be played, rendered or exported.”

How would you reconcile that with what is here (esp. the parenthetical):

http://www.dynamicsoflanguage.edu.au/research/data-archives/guides/resampling-audio-using-audacity/

“The project sampling rate is located in the lower left-hand corner (Project Rate (Hz)). To change the rate of your file, you need to select the Tracks menu and scroll down to Resample… (If you were to change the rate by altering the project sampling rate below, it would merely change the rate Audacity plays the file, not the file’s actual sample rate).”

I would say they are wrong on many counts.

  1. “we request that you record your audio at the highest sampling rate and bitrate possible”
    That is not good advice, and certainly not “best practice”. Very high sample rates are more likely to reduce the sound quality than improve it (for normal audio). There’s an excellent article for background information here: 24/192 Music Downloads are Very Silly Indeed
    The recommended “bit format” for recording with Audacity is 32-bit float (which is the default).

  2. “The rate of your file is located in the grey area to the left of the waveform”
    No, that is the sample rate of the “track”. The track sample rate is often the same as the sample rate of the imported file, but it can be different.
    A “track” is not a “file”.

  3. "To change the rate of your file, you need to select the Tracks menu and scroll down to Resample… "
    That changes the sample rate of the track. It does not change the sample rate of any files.
    A “track” is not a “file”.

  4. “If you were to change the rate by altering the project sampling rate below, it would merely change the rate Audacity plays the file, not the file’s actual sample rate”
    Yes, it does change the rate that Audacity plays the file, but it also changes the “default” rate for the current project, which in turn affects the sample rate when recording, generating, mixing and exporting.

  5. “Once your file has been down-sampled, you need to change the project’s sampling rate, otherwise you get an error message that the two rates do not match.”
    On most setups it is perfectly possible to have tracks that have different sample rates to the project. The “problem” referred to here is known to happen on a few machines, and is probably due to buggy sound card drivers, but this is NOT the usual case.

  6. Now that you have changed the sampling rate, the next step is to change the 24 bit rate to a lower rate.
    This is nonsense. “24-bit” is the “bit format” (“sample format”) and is not a “rate”. The “bit format” is the manner in which each sample value is represented. The “sample rate” is the number of samples per second. They are different things.

7)go to the drop down menu within the track window, go to Set Sample Format and select 16-bit float
No, don’t do this. This is bad advice. There is absolutely no benefit in doing this, and it can reduce the sound quality, or even cause irreparable damage.

8)Under the File menu, select Export audio…
In the current version of Audacity, the menu for exporting a WAV file is: “File > Export > Export as WAV”

Addressing the “All Files” entry in the Types drop-down is trivial. This is one of the first things I changed in my personal version of Audacity 2.0.6. I would bet that the code is available here on the forum but it is a simple matter of adding an extra entry to the drop down (I use the menu item name “All Files”) and giving it the appropriate wildcard. (I’ve also re-spelled some of the menu item names so that they all start with a unique first letter and thus are easier to access via script or vocally.)
all files.png

Edgar,

it is a simple matter of adding an extra entry to the drop down

Exactly where do you do this?

It’s been years since I did this, but…

Find all "*.*", Subfolders, Find Results 1, Entire Solution, "*.cpp"
  D:\mine\src\LabelDialog.cpp(542):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\LabelDialog.cpp(602):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\Menus.cpp(4764):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\Menus.cpp(4805):                                    _("MIDI and Allegro files (*.mid;*.midi;*.gro)|*.mid;*.midi;*.gro|MIDI files (*.mid;*.midi)|*.mid;*.midi|Allegro files (*.gro)|*.gro|All files (*.*)|*.*"),
  D:\mine\src\UploadDialog.cpp(340):                    wxT("All files (*.*)|*.*"),
  D:\mine\src\UploadDialog.cpp(1196):                      wxT("All files (*.*)|*.*"), wxFD_SAVE | wxRESIZE_BORDER);
  D:\mine\src\UploadDialog.cpp(1223):        FileDialog saveFile(this, wxT("Download File"), wxT(""), src, wxT("All files (*.*)|*.*"), wxFD_SAVE | wxRESIZE_BORDER);
  D:\mine\src\export\ExportFFmpegDialogs.cpp(1720):                  wxString(_("XML files (*.xml)|*.xml|All files (*.*)|*.*")),
  D:\mine\src\export\ExportFFmpegDialogs.cpp(1740):                  wxString(_("XML files (*.xml)|*.xml|All files (*.*)|*.*")),
  D:\mine\src\export\ExportMP3.cpp(1231):   return _("Only lame_enc.dll|lame_enc.dll|Dynamically Linked Libraries (*.dll)|*.dll|All Files (*.*)|*");
  D:\mine\src\prefs\KeyConfigPrefs.cpp(332):                       _("XML files (*.xml)|*.xml|All files (*.*)|*.*"),
  D:\mine\src\prefs\KeyConfigPrefs.cpp(363):                       _("XML files (*.xml)|*.xml|All files (*.*)|*.*"),
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(730):      filterBuffer += (gs_customFilter ? wxT("*.*") : m_FilterGroups[i]);
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1109):      pExtensions.Add(wxT("*.*"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1148):      pExtensions.Add(wxT("*.*"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1175):      pExtensions.Add(wxT("*.*"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1211):      pExtensions.Add(wxT("*.*"));
  Matching lines: 17    Matching files: 7    Total files searched: 340



Find all "All Files", Whole word, Subfolders, Find Results 1, Entire Solution, "*.cpp"
  D:\mine\src\BatchProcessDialog.cpp(234):   wxString mask = _("All files|*|All supported files|") +
  D:\mine\src\Dependencies.cpp(293):   EVT_BUTTON(wxID_YES, DependencyDialog::OnYes) // "Copy All Files (Safer)"
  D:\mine\src\Dependencies.cpp(368):            S.Id(wxID_YES).AddButton(_("Copy All Files (Safer)"));
  D:\mine\src\Dependencies.cpp(382):            choices.Add(_("Always copy all files (safest)"));
  D:\mine\src\DirManager.cpp(148):                                  wxArrayString& filePathArray,  // output: all files in dirPath tree
  D:\mine\src\DirManager.cpp(200):                                             wxArrayString& filePathArray, // output: all files in dirPath tree
  D:\mine\src\DirManager.cpp(439):   /* Move all files into this new directory.  Files which are
  D:\mine\src\DirManager.cpp(1387):      filePathArray,          // output: all files in project directory tree
  D:\mine\src\DirManager.cpp(1748):      const wxArrayString& filePathArray,       // input: all files in project directory
  D:\mine\src\DirManager.cpp(1790):      filePathArray,          // output: all files in project directory tree
  D:\mine\src\DirManager.cpp(1798):            filePathArray,          // input: all files in project directory tree
  D:\mine\src\LabelDialog.cpp(542):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\LabelDialog.cpp(602):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\Menus.cpp(4764):                    _("Text files (*.txt)|*.txt|All files (*.*)|*.*"),
  D:\mine\src\Menus.cpp(4805):                                    _("MIDI and Allegro files (*.mid;*.midi;*.gro)|*.mid;*.midi;*.gro|MIDI files (*.mid;*.midi)|*.mid;*.midi|Allegro files (*.gro)|*.gro|All files (*.*)|*.*"),
  D:\mine\src\Menus.cpp(4840):                    _("All files (*)|*"),
  D:\mine\src\Project.cpp(2214):   wxString mask = _("All files|*|All supported files|") +
  D:\mine\src\UploadDialog.cpp(340):                    wxT("All files (*.*)|*.*"),
  D:\mine\src\UploadDialog.cpp(1196):                      wxT("All files (*.*)|*.*"), wxFD_SAVE | wxRESIZE_BORDER);
  D:\mine\src\UploadDialog.cpp(1223):        FileDialog saveFile(this, wxT("Download File"), wxT(""), src, wxT("All files (*.*)|*.*"), wxFD_SAVE | wxRESIZE_BORDER);
  D:\mine\src\export\ExportFFmpegDialogs.cpp(1720):                  wxString(_("XML files (*.xml)|*.xml|All files (*.*)|*.*")),
  D:\mine\src\export\ExportFFmpegDialogs.cpp(1740):                  wxString(_("XML files (*.xml)|*.xml|All files (*.*)|*.*")),
  D:\mine\src\export\ExportMP3.cpp(1231):   return _("Only lame_enc.dll|lame_enc.dll|Dynamically Linked Libraries (*.dll)|*.dll|All Files (*.*)|*");
  D:\mine\src\export\ExportMP3.cpp(1249):   return wxString(_("Only libmp3lame.dylib|libmp3lame.dylib|Dynamic Libraries (*.dylib)|*.dylib|All Files (*)|*"));
  D:\mine\src\export\ExportMP3.cpp(1267):   return wxString(_("Only libmp3lame.so.0|libmp3lame.so.0|Primary Shared Object files (*.so)|*.so|Extended Libraries (*.so*)|*.so*|All Files (*)|*"));
  D:\mine\src\import\ImportLOF.cpp(255):   // set any duration/offset factors for last window, as all files were called
  D:\mine\src\import\ImportLOF.cpp(300):      // set any duration/offset factors for last window, as all files were called
  D:\mine\src\prefs\KeyConfigPrefs.cpp(332):                       _("XML files (*.xml)|*.xml|All files (*.*)|*.*"),
  D:\mine\src\prefs\KeyConfigPrefs.cpp(363):                       _("XML files (*.xml)|*.xml|All files (*.*)|*.*"),
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1108):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1123):      wxString temp(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1147):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1174):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1210):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\FileDialog.cpp(99):   // if filter is of form "All files (*)|*|..." set correct filter index
  Matching lines: 35    Matching files: 13    Total files searched: 340

Remember, I’m using Audacity 2.0.6 which is years out of date. The code-base has changed but the general are of interest is probably around:

  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1108):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1123):      wxString temp(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1147):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1174):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\win\FileDialogPrivate.cpp(1210):      pDescriptions.Add(_("All files"));
  D:\mine\lib-src\FileDialog\FileDialog.cpp(99):   // if filter is of form "All files (*)|*|..." set correct filter index

Well, thank you, Edgar. You gave a bigger answer than I needed. From the “ccp” reference I see that the real answer is “You can’t change it in Audacity preferences. You have to create a PROGRAMMING environment, get the C source code for Audacity, make custom changes and RECOMPILE your own custom version.”

And so the answer to my question is, “short of that, you cannot add an entry to the dropdown”. Thanks for the explanation, though.

Steve, thanks for setting me straight. I’ve looked further into resampling options (outside Audacity). It appears that Audacity is my best option for getting the best possible resampling quality. As I study the docs more, I think I am concluding that I don’t have to consider Dithering options because it appears that dithering is only used with converting from one bit-depth to another, NOT when changing sample rate within the same bit-depth. Am I right??

Not quite. (This is something that I’d like to improve in Audacity, but to do it right is a very big job.)

Dither is only “required” when changing from a higher bit-depth to a lower bit-depth (bit format), but exporting the final “render to file” is always handled with 32-bit float precision. This is perfect if applying envelopes / gain / pan / normalization / or any effects, or mixing more than one track, as it provides the highest quality (with dither).

However, when exporting only one track, AND no effects have been applied, AND the original bit format was 16-bit, AND no envelopes, pan or gain changes have been applied, then it is (very slightly) better to turn off dither (even if changing the sample rate). If you leave dither enabled or not, you will probably not hear the difference, but “ideally” dither should be off in this “special” case, and enabled (“shaped”) for all other cases.