annotate foosdk/sdk/foobar2000/helpers/fb2k_wfx.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 struct fb2k_wfx {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 audio_chunk::spec_t spec;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 bool bFloat;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 unsigned bps;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 void parse( const WAVEFORMATEX * wfx ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 spec.sampleRate = wfx->nSamplesPerSec;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 spec.chanCount = wfx->nChannels;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 spec.chanMask = audio_chunk::g_guess_channel_config( spec.chanCount );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 bps = wfx->wBitsPerSample;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 switch( wfx->wFormatTag ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 case WAVE_FORMAT_PCM:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 bFloat = false; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 case WAVE_FORMAT_IEEE_FLOAT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 bFloat = true; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 case WAVE_FORMAT_EXTENSIBLE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 auto wfxe = (const WAVEFORMATEXTENSIBLE*) wfx;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 auto newMask = audio_chunk::g_channel_config_from_wfx( wfxe->dwChannelMask );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 if ( audio_chunk::g_count_channels(newMask) == spec.chanCount ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 spec.chanMask = newMask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if ( wfxe->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 bFloat = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 } else if ( wfxe->SubFormat == KSDATAFORMAT_SUBTYPE_PCM ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 bFloat = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 throw exception_io_data();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 throw exception_io_data();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 };