Skip to content

Commit 6989022

Browse files
tests: cover audio buffer decoding
1 parent 43d78af commit 6989022

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

tests/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,16 @@ target_link_libraries(${UTF8_TEST} PRIVATE common)
9696
add_test(NAME ${UTF8_TEST} COMMAND ${UTF8_TEST})
9797
set_tests_properties(${UTF8_TEST} PROPERTIES LABELS "unit")
9898

99+
# Audio byte-buffer decode regression test
100+
set(AUDIO_BUFFER_TEST test-read-audio-data-buffer)
101+
add_executable(${AUDIO_BUFFER_TEST} ${AUDIO_BUFFER_TEST}.cpp)
102+
target_include_directories(${AUDIO_BUFFER_TEST} PRIVATE ../examples)
103+
target_link_libraries(${AUDIO_BUFFER_TEST} PRIVATE common)
104+
target_compile_definitions(${AUDIO_BUFFER_TEST} PRIVATE
105+
SAMPLE_PATH="${PROJECT_SOURCE_DIR}/samples/jfk.wav")
106+
add_test(NAME ${AUDIO_BUFFER_TEST} COMMAND ${AUDIO_BUFFER_TEST})
107+
set_tests_properties(${AUDIO_BUFFER_TEST} PROPERTIES LABELS "unit")
108+
99109
# VAD test tests VAD in isolation
100110
set(VAD_TEST test-vad)
101111
add_executable(${VAD_TEST} ${VAD_TEST}.cpp)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include "common-whisper.h"
2+
3+
#include <cmath>
4+
#include <cstdio>
5+
#include <fstream>
6+
#include <iterator>
7+
#include <string>
8+
#include <vector>
9+
10+
#ifdef NDEBUG
11+
#undef NDEBUG
12+
#endif
13+
#include <cassert>
14+
15+
static std::vector<char> read_file_bytes(const std::string & path) {
16+
std::ifstream input(path, std::ios::binary);
17+
assert(input.good());
18+
return std::vector<char>(
19+
std::istreambuf_iterator<char>(input),
20+
std::istreambuf_iterator<char>());
21+
}
22+
23+
static void assert_pcm_nearly_equal(const std::vector<float> & expected, const std::vector<float> & actual) {
24+
assert(expected.size() == actual.size());
25+
for (size_t i = 0; i < expected.size(); ++i) {
26+
assert(std::fabs(expected[i] - actual[i]) < 1e-6f);
27+
}
28+
}
29+
30+
int main() {
31+
const std::string sample_path = SAMPLE_PATH;
32+
const std::vector<char> wav_data = read_file_bytes(sample_path);
33+
assert(!wav_data.empty());
34+
35+
std::vector<float> pcm_from_file;
36+
std::vector<std::vector<float>> stereo_from_file;
37+
assert(read_audio_data(sample_path, pcm_from_file, stereo_from_file, false));
38+
assert(!pcm_from_file.empty());
39+
assert(stereo_from_file.empty());
40+
41+
std::vector<float> pcm_from_memory;
42+
std::vector<std::vector<float>> stereo_from_memory;
43+
assert(read_audio_data(wav_data.data(), wav_data.size(), pcm_from_memory, stereo_from_memory, false));
44+
assert(!pcm_from_memory.empty());
45+
assert(stereo_from_memory.empty());
46+
47+
assert_pcm_nearly_equal(pcm_from_file, pcm_from_memory);
48+
49+
printf("Decoded %zu bytes from memory into %zu PCM samples\n", wav_data.size(), pcm_from_memory.size());
50+
return 0;
51+
}

0 commit comments

Comments
 (0)