tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_audio_dump.cpp (1806B)


      1 /*
      2 * Copyright © 2023 Mozilla Foundation
      3 *
      4 * This program is made available under an ISC-style license.  See the
      5 * accompanying file LICENSE for details.
      6 */
      7 
      8 #define NOMINMAX
      9 #define _USE_MATH_DEFINES
     10 
     11 #include "cubeb/cubeb.h"
     12 #include <ratio>
     13 
     14 #include "cubeb_audio_dump.h"
     15 #include "gtest/gtest.h"
     16 #include <chrono>
     17 #include <cmath>
     18 #include <fstream>
     19 #include <iostream>
     20 #include <thread>
     21 
     22 TEST(cubeb, audio_dump)
     23 {
     24  cubeb_audio_dump_session_t session;
     25  int rv = cubeb_audio_dump_init(&session);
     26  ASSERT_EQ(rv, 0);
     27 
     28  cubeb_stream_params params;
     29  params.rate = 44100;
     30  params.channels = 2;
     31  params.format = CUBEB_SAMPLE_FLOAT32NE;
     32 
     33  cubeb_audio_dump_stream_t dump_stream;
     34  rv = cubeb_audio_dump_stream_init(session, &dump_stream, params, "test.wav");
     35  ASSERT_EQ(rv, 0);
     36 
     37  rv = cubeb_audio_dump_start(session);
     38  ASSERT_EQ(rv, 0);
     39 
     40  float phase = 0;
     41  const size_t buf_sz = 2 * 44100 / 50;
     42  float buf[buf_sz];
     43  for (uint32_t iteration = 0; iteration < 50; iteration++) {
     44    uint32_t write_idx = 0;
     45    for (uint32_t i = 0; i < buf_sz / params.channels; i++) {
     46      for (uint32_t j = 0; j < params.channels; j++) {
     47        buf[write_idx++] = sin(phase);
     48      }
     49      phase += 440 * M_PI * 2 / 44100;
     50      if (phase > 2 * M_PI) {
     51        phase -= 2 * M_PI;
     52      }
     53    }
     54    rv = cubeb_audio_dump_write(dump_stream, buf, 2 * 44100 / 50);
     55    std::this_thread::sleep_for(std::chrono::milliseconds(100));
     56    ASSERT_EQ(rv, 0);
     57  }
     58 
     59  std::this_thread::sleep_for(std::chrono::milliseconds(100));
     60 
     61  rv = cubeb_audio_dump_stop(session);
     62  ASSERT_EQ(rv, 0);
     63 
     64  rv = cubeb_audio_dump_stream_shutdown(session, dump_stream);
     65  ASSERT_EQ(rv, 0);
     66 
     67  rv = cubeb_audio_dump_shutdown(session);
     68  ASSERT_EQ(rv, 0);
     69 
     70  std::ifstream file("test.wav");
     71  ASSERT_TRUE(file.good());
     72 }
     73 
     74 #undef NOMINMAX