* Bug #11860 fixed - wavwrite failed for 24 bits files (error in savewave function). 74/10774/2
Charlotte HECQUET [Mon, 11 Mar 2013 15:20:13 +0000 (16:20 +0100)]
Change-Id: I806b4261db2129fa08361ff3861a09385d828e4e

scilab/CHANGES_5.4.X
scilab/modules/sound/macros/savewave.sci
scilab/modules/sound/tests/nonreg_tests/bug_11860.dia.ref [new file with mode: 0644]
scilab/modules/sound/tests/nonreg_tests/bug_11860.tst [new file with mode: 0644]
scilab/modules/sound/tests/nonreg_tests/bug_11860.wav [new file with mode: 0644]

index ecf872c..61c44bd 100644 (file)
@@ -327,6 +327,8 @@ Bug fixes
 
 * Bug #11851 fixed - Default EOL under Mac should be LF.
 
+* Bug #11860 fixed - wavwrite failed for 24 bits files (error in savewave function).
+
 * Bug #11924 fixed - winclose() was not tagged as obsolete.
 
 * Bug #11931 fixed - In graphics, white space was not used as default thousand
index 1191a08..6199c8d 100644 (file)
@@ -120,7 +120,7 @@ function [status] = write_wavedat(fid,fmt,data)
     // Determine # bytes/sample - format requires rounding
     //  to next integer number of bytes:
     BytesPerSample = ceil(fmt('nBitsPerSample')/8);
-    
+
     select BytesPerSample
     case 1 then
        dtype = 'uc'; // unsigned 8-bit
@@ -156,12 +156,12 @@ function [status] = write_wavedat(fid,fmt,data)
       oct2 = (floor((data-(oct3*2^16))/(2^8)));
       oct1 = (floor(data-(oct3*2^16)-(oct2*2^8)));//lsb
       data_line = zeros(3*total_samples,1);
-      data_line(1:6:$) = (oct1(:,1));
-      data_line(2:6:$) = (oct2(:,1));
-      data_line(3:6:$) = (oct3(:,1));
-      data_line(4:6:$) = (oct1(:,2));
-      data_line(5:6:$) = (oct2(:,2));
-      data_line(6:6:$) = (oct3(:,2));
+      data_line(1:6:$) = oct1(1,:)';
+      data_line(2:6:$) = oct2(1,:)';
+      data_line(3:6:$) = oct3(1,:)';
+      data_line(4:6:$) = oct1(2,:)';
+      data_line(5:6:$) = oct2(2,:)';
+      data_line(6:6:$) = oct3(2,:)';
       data_line = data_line';
     else
       data_line = data;
diff --git a/scilab/modules/sound/tests/nonreg_tests/bug_11860.dia.ref b/scilab/modules/sound/tests/nonreg_tests/bug_11860.dia.ref
new file mode 100644 (file)
index 0000000..5529292
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 11860 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11860
+//
+// <-- Short Description -->
+// wavwrite failed for 24 bits files (error in savewave function)
+//
+filename=SCI +'/modules/sound/tests/nonreg_tests/bug_11860.wav';
+[y_ref,Fs_ref,nbits_ref]=wavread(filename);
+wavwrite(y_ref,Fs_ref,nbits_ref,SCI+'/modules/sound/tests/nonreg_tests/bug_11860_written.wav');
+filename_written=SCI+'/modules/sound/tests/nonreg_tests/bug_11860_written.wav';
+[y,Fs,nbits]=wavread(filename_written);
+assert_checktrue(abs(y_ref-y)<1e-6);
+assert_checkalmostequal(Fs,Fs_ref);
+assert_checkalmostequal(nbits,nbits_ref);
+mdelete(filename_written);
diff --git a/scilab/modules/sound/tests/nonreg_tests/bug_11860.tst b/scilab/modules/sound/tests/nonreg_tests/bug_11860.tst
new file mode 100644 (file)
index 0000000..5529292
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 11860 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11860
+//
+// <-- Short Description -->
+// wavwrite failed for 24 bits files (error in savewave function)
+//
+filename=SCI +'/modules/sound/tests/nonreg_tests/bug_11860.wav';
+[y_ref,Fs_ref,nbits_ref]=wavread(filename);
+wavwrite(y_ref,Fs_ref,nbits_ref,SCI+'/modules/sound/tests/nonreg_tests/bug_11860_written.wav');
+filename_written=SCI+'/modules/sound/tests/nonreg_tests/bug_11860_written.wav';
+[y,Fs,nbits]=wavread(filename_written);
+assert_checktrue(abs(y_ref-y)<1e-6);
+assert_checkalmostequal(Fs,Fs_ref);
+assert_checkalmostequal(nbits,nbits_ref);
+mdelete(filename_written);
diff --git a/scilab/modules/sound/tests/nonreg_tests/bug_11860.wav b/scilab/modules/sound/tests/nonreg_tests/bug_11860.wav
new file mode 100644 (file)
index 0000000..7d52811
Binary files /dev/null and b/scilab/modules/sound/tests/nonreg_tests/bug_11860.wav differ