| 79 | return false; |
| 80 | } |
| 81 | static 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: |
no test coverage detected