Mercurial > octave
changeset 23868:ff9758331d78
audiowrite: add support for Quality option on Ogg Vorbis files (bug #51704)
* audioread.cc (Faudiowrite): Add support and input validation for Quality
option, scaled to be compatible with Matlab.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Thu, 10 Aug 2017 11:30:10 -0700 |
parents | 4f68899f9e5b |
children | b3d59e080eae |
files | libinterp/dldfcn/audioread.cc |
diffstat | 1 files changed, 12 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/dldfcn/audioread.cc Thu Aug 10 09:31:38 2017 -0700 +++ b/libinterp/dldfcn/audioread.cc Thu Aug 10 11:30:10 2017 -0700 @@ -344,8 +344,8 @@ std::string title = ""; std::string artist = ""; std::string comment = ""; - // FIXME: Quality is currently unused? - // float quality = 0.75; + double quality = 0.75; + for (int i = 3; i < nargin; i += 2) { if (i >= nargin - 1) @@ -379,11 +379,15 @@ warning_with_id ("Octave:audiowrite:unused-parameter", "audiowrite: 'BitRate' accepted for Matlab " "compatibility, but is ignored"); - // FIXME: Quality is currently unused? else if (keyword == "quality") - warning_with_id ("Octave:audiowrite:unused-parameter", - "audiowrite: ignoring 'Quality' option, " - "not yet unimplemented"); + { + double value = value_arg.xdouble_value ("audiowrite: Quality value must be a scalar"); + + if (octave::math::isnan (value) || value < 0 || value > 100) + error ("audiowrite: Quality must be a number between 0 and 100"); + + quality = value / 100; + } else if (keyword == "title") title = value_arg.string_value (); else if (keyword == "artist") @@ -403,6 +407,8 @@ frame.add_fcn (safe_close, file); + sf_command (file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)); + if (title != "") sf_set_string (file, SF_STR_TITLE, title.c_str ());