MCPcopy Create free account
hub / github.com/axmolengine/axmol / wav_open

Function wav_open

core/audio/AudioDecoderWav.cpp:81–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79 return false;
80}
81static bool wav_open(std::string_view fullPath, WAV_FILE* wavf)
82{
83 wavf->Stream = FileUtils::getInstance()->openFileStream(fullPath, IFileStream::Mode::READ);
84 if (!wavf->Stream)
85 return false;
86
87 auto& fileStream = wavf->Stream;
88 wavf->PcmDataOffset = 0;
89
90 // Parsing RIFF chunk
91 fileStream->read(&wavf->FileHeader, WAV_RIFF_SIZE);
92 wavf->PcmDataOffset += WAV_RIFF_SIZE;
93
94 if (wavf->FileHeader.Riff.Format != WAV_SIGN_ID)
95 return false; // not .wav file
96
97 // check somthings
98 auto h = &wavf->FileHeader;
99
100 // Parsing FMT chunk
101 if (!wav_scan_chunk(wavf, WAV_FMT_ID, &wavf->FileHeader.Fmt, &wavf->FileHeader.Fmt.AudioFormat,
102 sizeof(wavf->FileHeader.Fmt) - sizeof(WAV_RIFF_CHUNK)))
103 return false;
104
105 auto& fmtInfo = h->Fmt;
106
107 int bitDepth = (fmtInfo.BitsPerSample);
108
109 // Read PCM data or extensible data if exists.
110 switch (fmtInfo.AudioFormat)
111 { // Check supported format
112 case WAV_FORMAT::PCM:
113 case WAV_FORMAT::IEEE:
114 switch (bitDepth)
115 {
116 case 8:
117 wavf->SourceFormat = AUDIO_SOURCE_FORMAT::PCM_U8;
118 break;
119 case 16:
120 wavf->SourceFormat = AUDIO_SOURCE_FORMAT::PCM_16;
121 break;
122 case 24:
123 wavf->SourceFormat = AUDIO_SOURCE_FORMAT::PCM_24;
124 break;
125 case 32:
126 wavf->SourceFormat = (fmtInfo.AudioFormat == WAV_FORMAT::IEEE) ? AUDIO_SOURCE_FORMAT::PCM_FLT32
127 : AUDIO_SOURCE_FORMAT::PCM_32;
128 break;
129 case 64:
130 wavf->SourceFormat = (fmtInfo.AudioFormat == WAV_FORMAT::IEEE) ? AUDIO_SOURCE_FORMAT::PCM_FLT64
131 : AUDIO_SOURCE_FORMAT::PCM_64;
132 break;
133 }
134 break;
135 case WAV_FORMAT::MULAW:
136 wavf->SourceFormat = AUDIO_SOURCE_FORMAT::MULAW;
137 break;
138 case WAV_FORMAT::ALAW:

Callers 1

openMethod · 0.85

Calls 6

getInstanceFunction · 0.85
wav_scan_chunkFunction · 0.85
IsEqualGUIDFunction · 0.85
openFileStreamMethod · 0.80
readMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected