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;