At Mon, 20 Aug 2012 14:57:51 +0900 (JST), etsuko suzuki wrote:
Hello, Takashi.
Hm, I guess your message didn't reach properly, or was filtered by some spam
filter.
Better to contact with Jaroslav (Cc'ed), who maintains alsa-devel ML.
I contacted him in August 17. However, there is no reply yet.
Didn't you read his mail in Aug. 16? You were in Cc.
[No.1]
http://msdn.microsoft.com/en-us/windows/hardware/gg463006.aspx
In this, I found the statement 'left-alinged'. (In 'Details about wValidBitsPerSample')
I understood 'left-alinged' was 'LSB padding'. So I thought S24_LE was LSB padding.
No. S24_LE has the MSB padding of 8 bits in 32 bit container.
That is, does it mean that this document is not correct? (I don't understand why this document differs from what you say.)
Well, Microsoft doesn't conquer the whole world yet. Their definition isn't what we define for our purpose.
http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/Docs/multichaudP.p... (This PDF is the same as what was written before. The page is written on this.)
On the 6 page of this PDF, it is written to like this.
'If wValidBitsPerSample is less than wBitsPerSample, then the actual PCM data is "left-aligned" within the container. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The sample itself is justified most significant; all extra bits are at the least-significant portion of the container. All non-valid data bits must be set to 0.' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In S24_LE, I think 'wBitsPerSample' indicates 'the container size'(=32) and 'wValidBitsPerSample' indicates 'the bit of actual valid data'(=24).
You _think_ but you utterly misunderstand the terms.
ALSA S24 is not what you think. S24 is a special format, 3 bytes LSB in 4 bytes container. This _is_ the definition. There is no such a format in MS's WAV definition.
wValidBitsPerSample is rather corresponding to hw_params ms_bits parameter.
[No.2]
It was written that Microsoft has defined the new structure 'WAVE_FORMAT_EXTENSIBLE'(FORMAT_CODE:0xFFFE). (On the 4 page of this PDF.)
I think that the new structure should be used in this(the container size > the bit of actual valid data) case.
But the structure recording by arecord was 'WAVE_FORMAT_PCM'(FORMAT_CODE:0x0001).
% od -t x4 ubuntu_rec_S24_LE_48000.wav 0000000 46464952 003a9824 45564157 20746d66 0000010 00000010 00020001 0000bb80 0005dc00
^^^^ 0x0001:WAVE_FORMAT_PCM
(The 'FORMAT_CODE' is written in this page. http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html)
Why does ALSA NOT use the new structure?
Because it's new, and no one cared such a thing.
Has ALSA corresponded to the new structure?
Please send a fix patch if you'd like to improve :)
thanks,
Takashi