tor-browser

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

sine_wave_generator.cc (1221B)


      1 /*
      2 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/audio_mixer/sine_wave_generator.h"
     12 
     13 #include <cmath>
     14 #include <cstddef>
     15 #include <cstdint>
     16 #include <numbers>
     17 
     18 #include "api/audio/audio_frame.h"
     19 #include "rtc_base/checks.h"
     20 #include "rtc_base/numerics/safe_conversions.h"
     21 
     22 namespace webrtc {
     23 
     24 namespace {
     25 constexpr float kPi = std::numbers::pi_v<float>;
     26 }  // namespace
     27 
     28 void SineWaveGenerator::GenerateNextFrame(AudioFrame* frame) {
     29  RTC_DCHECK(frame);
     30  int16_t* frame_data = frame->mutable_data();
     31  for (size_t i = 0; i < frame->samples_per_channel_; ++i) {
     32    for (size_t ch = 0; ch < frame->num_channels_; ++ch) {
     33      frame_data[frame->num_channels_ * i + ch] =
     34          saturated_cast<int16_t>(amplitude_ * sinf(phase_));
     35    }
     36    phase_ += wave_frequency_hz_ * 2 * kPi / frame->sample_rate_hz_;
     37  }
     38 }
     39 }  // namespace webrtc