Mercurial > octave
changeset 25409:4f6c985ca28a
Fix various bugs with audioread, audiowrite, audioinfo (bug #53975).
* audioread.cc (Faudioread): Add additional case to switch statement for
"native" option to return an array of type single when there are
32 BitsPerSample.
* audioread.cc (Faudiowrite): For 24 BitsPerSample output, change output
to use 32Bits if format is wav, otherwise use 24Bits.
* audioread.cc (Faudioinfo): Add additional case statements to decode
BitsPerSample and return 32 for float and 64 for double, rather than default -1.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 24 May 2018 18:42:52 -0700 |
parents | ce725103ebf1 |
children | ad3d018e595f |
files | libinterp/dldfcn/audioread.cc |
diffstat | 1 files changed, 15 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/dldfcn/audioread.cc Wed Mar 15 22:00:17 2017 +0100 +++ b/libinterp/dldfcn/audioread.cc Thu May 24 18:42:52 2018 -0700 @@ -167,6 +167,9 @@ case SF_FORMAT_PCM_32: ret_audio = int32NDArray (audio * 2147483648); break; + case SF_FORMAT_FLOAT: + ret_audio = FloatNDArray (audio); + break; default: ret_audio = audio; break; @@ -374,7 +377,12 @@ else if (bits == 16) info.format |= SF_FORMAT_PCM_16; else if (bits == 24) - info.format |= SF_FORMAT_PCM_32; + { + if ((info.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV) + info.format |= SF_FORMAT_PCM_32; + else + info.format |= SF_FORMAT_PCM_24; + } else if (bits == 32) { if ((info.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV @@ -584,6 +592,12 @@ case SF_FORMAT_PCM_32: bits = 32; break; + case SF_FORMAT_FLOAT: + bits = 32; + break; + case SF_FORMAT_DOUBLE: + bits = 64; + break; default: bits = -1; break;