[SciPy-User] RIFF header vs Scipy for odd length payloads

Joseph Codadeen jdmc80 at hotmail.com
Tue Sep 1 17:58:13 EDT 2015


Hi,
Sample file is 16 bits

As for a sample, not with me no. But you may create one simply by taking any HFP sample and playing with the RIFF header. Make the payload length an odd number adjusting the data, add a pad byte and adjust only the file length to represent this now even numbered file length, i.e. 36 byte header offset + odd payload length + 1 pad byte.
I amend mine easily in notepad++ .
Read in the file;
    scipy.io.wavfile.read(filepath)
and scipy should complain as numpy doesn't like odd length files.
I will try to share a sample tomorrow but it is simply an audio tone being played.
As for the link on github, that was my original posting.
Thanks.Joseph

Date: Tue, 1 Sep 2015 14:20:00 -0400
From: warren.weckesser at gmail.com
To: scipy-user at scipy.org
Subject: Re: [SciPy-User] RIFF header vs Scipy for odd length payloads



On Tue, Sep 1, 2015 at 10:23 AM, Joseph Codadeen <jdmc80 at hotmail.com> wrote:



Hi,
(tried posting this before with no luck, retrying)
I am a scipy newbie.
The RIFF specification states;
http://www.kk.iij4u.or.jp/~kondo/wave/mpidata.txt (definitive guide?)
     ckSize    A 32-bit unsigned value identifying the               size of ckData. This size value does not               include the size of the ckID or ckSize               fields or the pad byte at the end of               ckData.     ckData    Binary data of fixed or variable size. The               start of ckData is word-aligned with               respect to the start of the RIFF file. If               the chunk size is an odd number of bytes, a               pad byte with value zero is written after               ckData. Word aligning improves access speed               (for chunks resident in memory) and               maintains compatibility with EA IFF. The               ckSize value does not include the pad byte.
     <WORD>    16-bit unsigned        unsigned int               quantity in Intel               format
However, if I do this and read my HFP wav file via scipy,<pre>framerate, data = scipy.io.wavfile.read(filepath)</pre>
 it complains with;<pre>string size must be a multiple of element size</pre>
A bit more debugging added to my test code and numpy (multiarray/ctors.c) gives:
Sample file is 16 bits, note that 24 bit samples do not work in scipy Got error type "ValueError" Analysis of the wav file encountered a problem: "slen: 48683, itemsize: 2 - string size must be a multiple of element size"
i.e. my payload length is odd, reflecting the actual payload as per the the spec. The length of the file reflects the additional pad byte.
So for odd length payloads; * we have the spec saying do not add the pad byte to the payload length, but only to the file length, * scipy likes the payload length to be even.* If I add the pad byte to to the payload length and the file length, scipy is happy.* If I want to follow the spec then no one can load my files into scipy.
Am I misunderstanding something?
What is the correct thing to do in this case?* Follow the spec* Follow scipy* Fix scipy
I believe it should be to fix scipy unless I am looking at the wrong spec. The spec came from http://www.digitalpreservation.gov/formats/fdd/fdd000001.shtml
I have tried this on scipy version 0.16.0 on Ubuntu 14.04 LTS
Thanks.

Could you provide a link to a wav file that demonstrates the problem?

How many bits per sample is your file?  (Sorry, the answer is not clear to me from your email.)  Scipy's wav reader does not support 24 bit files.   If your file is 24 bit, you can try wavio, a small module I wrote specifically to read 24 bit wav files into a numpy array: https://github.com/WarrenWeckesser/wavio


Warren

P.S. For anyone reading this, there is also an issue on github: https://github.com/scipy/scipy/issues/5175

 

 		 	   		   		 	   		  

_______________________________________________

SciPy-User mailing list

SciPy-User at scipy.org

http://mail.scipy.org/mailman/listinfo/scipy-user





_______________________________________________
SciPy-User mailing list
SciPy-User at scipy.org
http://mail.scipy.org/mailman/listinfo/scipy-user 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20150901/1fa20407/attachment.html>


More information about the SciPy-User mailing list