annotate foosdk/sdk/foobar2000/helpers/writer_wav.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 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <mmreg.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #include <SDK/audio_postprocessor.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 struct wavWriterSetup_t
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 unsigned m_bps,m_bpsValid,m_samplerate,m_channels,m_channel_mask;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 bool m_float,m_dither, m_wave64;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 bool m_rf64_implicit, m_rf64_explicit;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 void initialize(const audio_chunk & p_chunk,unsigned p_bps,bool p_float,bool p_dither, bool p_wave64 = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 void initialize2(const audio_chunk & p_chunk,unsigned p_bps, unsigned p_bpsValid,bool p_float,bool p_dither, bool p_wave64 = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 void initialize3(const audio_chunk::spec_t & spec, unsigned bps, unsigned bpsValid, bool bFloat, bool bDither, bool bWave64 = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #ifdef _WAVEFORMATEX_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 void setup_wfx(WAVEFORMATEX & p_wfx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #ifdef _WAVEFORMATEXTENSIBLE_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 void setup_wfxe(WAVEFORMATEXTENSIBLE & p_wfx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 bool needWFXE() const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 class CWavWriter
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 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 void open(const char * p_path, const wavWriterSetup_t & p_setup, abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 void open(service_ptr_t<file> p_file, const wavWriterSetup_t & p_setup, abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 void write(const audio_chunk & p_chunk,abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 void write_raw( const void * raw, size_t rawSize, abort_callback & p_abort );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 void finalize(abort_callback & p_abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 void close();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 bool is_open() const { return m_file.is_valid(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 audio_chunk::spec_t get_spec() const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 size_t align(abort_callback & abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 void writeSize(t_uint64 size, abort_callback & abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 bool is64() const {return m_setup.m_wave64;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 t_uint32 chunkOverhead() const {return is64() ? 24 : 8;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 void writeID(const GUID & id, abort_callback & abort);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 service_ptr_t<file> m_file;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 service_ptr_t<audio_postprocessor> m_postprocessor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 wavWriterSetup_t m_setup;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 bool m_wfxe = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 t_uint64 m_offset_fix1 = 0,m_offset_fix2 = 0,m_offset_fix1_delta = 0,m_bytes_written = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 uint64_t m_ds64_at = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 mem_block_container_aligned_incremental_impl<16> m_postprocessor_output;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 file::ptr makeLiveWAVFile( const wavWriterSetup_t & setup, file::ptr data );