test_audio.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include "mel_band_roformer/audio.h"
  5. int main() {
  6. std::cout << "Test: Audio I/O with dr_wav" << std::endl;
  7. const std::string test_file = "test_tone.wav";
  8. const int sample_rate = 44100;
  9. const int duration_sec = 1;
  10. const int channels = 2;
  11. const int total_samples = sample_rate * duration_sec * channels;
  12. // 1. Generate Stereo Sine Wave (440Hz Left, 880Hz Right)
  13. AudioBuffer gen_buffer;
  14. gen_buffer.channels = channels;
  15. gen_buffer.sampleRate = sample_rate;
  16. gen_buffer.samples = total_samples;
  17. gen_buffer.data.resize(total_samples);
  18. for (int i = 0; i < sample_rate * duration_sec; ++i) {
  19. float t = (float)i / sample_rate;
  20. float val_left = std::sin(2.0f * 3.14159f * 440.0f * t);
  21. float val_right = std::sin(2.0f * 3.14159f * 880.0f * t);
  22. gen_buffer.data[i * 2 + 0] = val_left;
  23. gen_buffer.data[i * 2 + 1] = val_right;
  24. }
  25. // 2. Write to File
  26. std::cout << "Writing " << test_file << "..." << std::endl;
  27. try {
  28. AudioFile::Save(test_file, gen_buffer);
  29. } catch (const std::exception& e) {
  30. std::cerr << "Error writing: " << e.what() << std::endl;
  31. return 1;
  32. }
  33. // 3. Read Back
  34. std::cout << "Reading " << test_file << "..." << std::endl;
  35. AudioBuffer read_buffer;
  36. try {
  37. read_buffer = AudioFile::Load(test_file);
  38. } catch (const std::exception& e) {
  39. std::cerr << "Error reading: " << e.what() << std::endl;
  40. return 1;
  41. }
  42. // 4. Verify
  43. if (read_buffer.sampleRate != sample_rate) {
  44. std::cerr << "FAILED: Sample rate mismatch " << read_buffer.sampleRate << " != " << sample_rate << std::endl;
  45. return 1;
  46. }
  47. if (read_buffer.channels != channels) {
  48. std::cerr << "FAILED: Channel count mismatch " << read_buffer.channels << " != " << channels << std::endl;
  49. return 1;
  50. }
  51. float max_diff = 0.0f;
  52. for (size_t i = 0; i < read_buffer.samples; ++i) {
  53. float diff = std::abs(read_buffer.data[i] - gen_buffer.data[i]);
  54. if (diff > max_diff) max_diff = diff;
  55. }
  56. std::cout << "Max diff: " << max_diff << std::endl;
  57. if (max_diff > 1e-4) {
  58. std::cerr << "FAILED: Data mismatch (diff > 1e-4)" << std::endl;
  59. return 1;
  60. }
  61. std::cout << "PASSED: Audio I/O Verified." << std::endl;
  62. return 0;
  63. }