Write [buffer~] to disk & display save file name

bongog's icon

I am trying to figure out how to save the contents of a [buffer~] object to disk in a user chosen audio format, and then display & use the filename of the saved file.

If I use [savedialog] -> (write $1) -> [buffer~], I can get the file name from [savedialog], but it does not ensure that the file name entered and the audio file type will match. For example, I can tell [savedialog] that my file is to be named bongo.wav, but (write) -> [buffer~] will save an aiff file by default. And since I want to give the user the option of audio file format, I do not want to have to use one or the other of (writeaiff) or (writewave).

Alternatively, I could simply use (write) -> [buffer~], and the user will be asked to choose a file format (e.g., aiff, wave, NeXT/Sun), but then I do not see a way to grab the file name for display/use within my patch.

Any suggestions?

Jan M's icon

buffer takes the "writeaiff", "writewave", "writeau" and writeraw" messages.

From the reference page of buffer:
"
writewave filename [symbol]
Saves the contents of the buffer~ into a WAV file. A standard Save As dialog is opened for naming the file unless the word writewave is followed by a symbol, in which case the file is saved in the current default folder, using the symbol as the filename.
"

Jan

bongog's icon

Thanks Jan. I understand how writeaiff, etc. work. But how do I get the filename for display? The write message does not have an outlet for the chosen filename the way [savedialog] does.

saulpimpson's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Is this what you want?

Jan M's icon

Are you looking for something like this?

Max Patch
Copy patch and select New From Clipboard in Max.

bongog's icon

Thank you both for your suggestions.

@saulpimpson - Your example allows selection of writing either a wave or an aiff file, but I do not see a way to get the save file name for display.

@Jan - Your example has the user enter the save file name in a text edit object, then send it to the [buffer~] using (writeaiff $1). Unfortunately, if the user does not enter a save file name with the right extension (".aiff" in your example), then a file gets saved in a format that does not match its extension, and this file will not load properly later on.

What I am after is the behavior of a (write) message sent to a [buffer~] object, because it allows the user to select from a drop-down list of audio file types and then to specify a file name, but then to have the specified file name available within my patch, in much the same way an [opendialog] or [savedialog] makes the selected filename available via an object outlet.

saulpimpson's icon

could you combine the two examples to get what you're looking for?

Jan M's icon
Max Patch
Copy patch and select New From Clipboard in Max.

now i think I understand!!!!
What about this

bongog's icon

@Jan - This should do the trick, thanks. On my Windows 7 machine, the savedialog does not seem to work correctly, in that it still displays all files rather than limiting to AIFF and WAVE. What you suggest will be good enough though - only file names with aiff or wave extensions will be saved and in the correct format. Thanks again. I really appreciate you taking the time to help me figure this out!!

Jan M's icon

@bongo : happy that I could help... (sharing is fun ;) )

bongog's icon

any idea why i can't seem to set the file types for [savedialog] or [opendialog] for that matter? sending a writeaiff or writewave message without a file name to [buffer~] will open a save dialog with the file type (.aiff or .wav) selected.

i am on windows 7.