zohann commited on
Commit
185d662
·
verified ·
1 Parent(s): 9789ea9

Upload Audio_Effects_SDK/samples/utils/wave_reader/waveReadWrite.hpp with huggingface_hub

Browse files
Audio_Effects_SDK/samples/utils/wave_reader/waveReadWrite.hpp ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (c) 2017-2022, NVIDIA Corporation. All rights reserved.
3
+ *
4
+ * NVIDIA Corporation and its licensors retain all intellectual property
5
+ * and proprietary rights in and to this software, related documentation
6
+ * and any modifications thereto. Any use, reproduction, disclosure or
7
+ * distribution of this software and related documentation without an express
8
+ * license agreement from NVIDIA Corporation is strictly prohibited.
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include <stdint.h>
14
+ #include <string.h>
15
+ #include <assert.h>
16
+
17
+ #include <memory>
18
+ #include <string>
19
+ #include <vector>
20
+
21
+ #include "wave.hpp"
22
+
23
+ #define MAKEFOURCC(a, b, c, d) ( (uint32_t) (((d) << 24) | ((c) << 16) | ((b) << 8) | (a)) )
24
+
25
+ struct RiffHeader {
26
+ uint32_t chunkId;
27
+ uint32_t chunkSize;
28
+ uint32_t fileTag;
29
+ };
30
+
31
+ struct RiffChunk {
32
+ uint32_t chunkId;
33
+ uint32_t chunkSize;
34
+ };
35
+
36
+ struct WaveFileInfo {
37
+ waveFormat_ext wfx;
38
+ uint8_t* audioData;
39
+ uint32_t audioDataSize;
40
+ };
41
+
42
+ enum WaveFileFlags {
43
+ READ_WAVEFILE = 0,
44
+ WRITE_WAVEFILE = 1
45
+ };
46
+
47
+ class CWaveFileRead {
48
+ public:
49
+ explicit CWaveFileRead(std::string wavFile);
50
+ uint32_t GetSampleRate() const { return m_WaveFormatEx.nSamplesPerSec; }
51
+ uint32_t GetRawPCMDataSizeInBytes() const { return m_WaveDataSize; }
52
+ uint32_t GetNumSamples() const { return m_nNumSamples; }
53
+ uint32_t GetNumAlignedSamples() const { return m_NumAlignedSamples; }
54
+ uint8_t* GetRawPCMData() { return m_WaveData.get(); }
55
+ const float *GetFloatPCMData();
56
+ const float *GetFloatPCMDataAligned(int alignSamples);
57
+ waveFormat_ext& GetWaveFormat() { return m_WaveFormatEx; }
58
+ int GetBitsPerSample();
59
+ bool isValid() const { return validFile; }
60
+ std::vector<float>* GetFloatVector();
61
+
62
+ private:
63
+ const RiffChunk* FindChunk(const uint8_t* data, size_t sizeBytes, uint32_t fourcc);
64
+ int readPCM(const char* szFileName);
65
+
66
+ private:
67
+ std::string m_wavFile;
68
+ uint32_t m_nNumSamples;
69
+ bool validFile;
70
+ std::unique_ptr<uint8_t[]> m_WaveData;
71
+ std::vector<float> m_floatWaveData;
72
+ uint32_t m_WaveDataSize;
73
+ std::unique_ptr<float[]> m_floatWaveDataAligned;
74
+ waveFormat_ext m_WaveFormatEx;
75
+ uint32_t m_NumAlignedSamples;
76
+ };
77
+
78
+ class CWaveFileWrite {
79
+ public:
80
+ CWaveFileWrite(std::string wavFile, uint32_t samplesPerSec, uint32_t numChannels,
81
+ uint16_t bitsPerSample, bool isFloat);
82
+ ~CWaveFileWrite();
83
+ bool initFile();
84
+ // can be called 'n' times.
85
+ bool writeChunk(const void *data, uint32_t len);
86
+ bool commitFile();
87
+ uint32_t getWrittenCount() { return m_cumulativeCount; }
88
+ std::string getFileName() { return m_wavFile; }
89
+ private:
90
+ bool m_validState = false;
91
+ std::string m_wavFile;
92
+ FILE *m_fp = nullptr;
93
+ uint32_t m_cumulativeCount = 0;
94
+ waveFormat_ext wfx;
95
+ bool m_commitDone = false;
96
+ };
97
+
98
+ bool ReadWavFile(const std::string& filename, uint32_t expected_sample_rate,
99
+ std::vector<float>** data, unsigned* original_num_samples,
100
+ std::vector<int>* file_end_offset, int align_samples = -1);