AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
audioutilities.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #include "common.h"
9 #include "audioutilities.h"
10 #include <math.h>
11 
12 #ifndef M_PI
13 #define M_PI (3.14159265358979323846)
14 #endif
15 
16 uint32_t AJA_GenerateAudioTone (uint32_t* audioBuffer,
17  uint32_t numSamples,
18  uint32_t numChannels,
19  uint32_t numBits,
20  uint32_t& cycleSample,
21  double sampleRate,
22  double* amplitude,
23  double* frequency,
24  bool endianConvert)
25 {
26  double cycleCurrent[AJA_MAX_AUDIO_CHANNELS];
27  double cycleLength[AJA_MAX_AUDIO_CHANNELS];
28  double scale = (double)((uint32_t)(1<<(numBits-1)));
29  scale -= 1.0;
30 
31  uint32_t sample;
32  uint32_t channel;
33  for (channel = 0; channel < numChannels; channel++)
34  {
35  cycleLength[channel] = sampleRate / frequency[channel];
36  cycleCurrent[channel] = cycleSample;
37  }
38 
39  for (sample = 0; sample < numSamples; sample++)
40  {
41  for (channel = 0; channel < numChannels; channel++)
42  {
43  float nextFloat = (float)(sin(cycleCurrent[channel] / cycleLength[channel] * (M_PI * 2.0)) * amplitude[channel]);
44  uint32_t value = static_cast<uint32_t>((nextFloat * scale) + 0.5);
45 
46  if (endianConvert)
47  {
48  value = AJA_ENDIAN_SWAP32(value);
49  }
50  *audioBuffer++ = value;
51 
52  cycleCurrent[channel] += 1.0;
53  if (cycleCurrent[channel] > cycleLength[channel])
54  {
55  cycleCurrent[channel] -= cycleLength[channel];
56  }
57  }
58  cycleSample++;
59  }
60 
61  return numSamples*4*numChannels;
62 }
audioutilities.h
Declaration of AJA_GenerateAudioTone function.
AJA_GenerateAudioTone
uint32_t AJA_GenerateAudioTone(uint32_t *audioBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t numBits, uint32_t &cycleSample, double sampleRate, double *amplitude, double *frequency, bool endianConvert)
Definition: audioutilities.cpp:16
AJA_MAX_AUDIO_CHANNELS
#define AJA_MAX_AUDIO_CHANNELS
Definition: audioutilities.h:13
common.h
Private include file for all ajabase sources.
AJA_ENDIAN_SWAP32
#define AJA_ENDIAN_SWAP32(_data_)
Definition: types.h:422
M_PI
#define M_PI
Definition: audioutilities.cpp:13