arduino-audio-tools
MaximilianDSP.h
1 #pragma once
2 #include "AudioConfig.h"
3 #include "maximilian.h"
4 #include "libs/maxiClock.h"
5 
6 // Maximilian play function - return an array of 2 channels
7 void play(maxi_float_t *channels);//run dac!
8 void play1(maxi_float_t *channels);//run dac!
9 void play2(maxi_float_t *channels);//run dac!
10 
11 namespace audio_tools {
12 
17 class Maximilian : public VolumeSupport {
18  public:
19 
20  Maximilian(Print &out, int bufferSize=DEFAULT_BUFFER_SIZE, void (*callback)(maxi_float_t *channels)=play){
21  buffer_size = bufferSize;
22  p_buffer = new uint8_t[bufferSize];
23  p_sink = &out;
24  this->callback = callback;
25  }
26 
27  ~Maximilian() {
28  delete[] p_buffer;
29  }
30 
32  void begin(AudioInfo cfg){
33  this->cfg = cfg;
34  maxiSettings::setup(cfg.sample_rate, cfg.channels, DEFAULT_BUFFER_SIZE);
35  }
36 
38  bool setVolume(float f) override{
39  if (f>1.0f){
41  return false;
42  }
43  if (f<0.0f){
45  return false;
46  }
48  return true;
49  }
50 
52  void copy() {
53  // fill buffer with data
54  maxi_float_t out[cfg.channels];
55  uint16_t samples = buffer_size / sizeof(uint16_t);
56  int16_t *p_samples = (int16_t *)p_buffer;
57  for (uint16_t j=0;j<samples;j+=cfg.channels){
58  callback(out);
59  // convert all channels to int16
60  for (int ch=0;ch<cfg.channels;ch++){
61  p_samples[j+ch] = volume() * out[ch] * 32767.0f;
62  }
63  }
64  // write buffer to audio sink
65  unsigned int result = p_sink->write(p_buffer, buffer_size);
66  LOGI("bytes written %u", result)
67  }
68 
69  protected:
70  uint8_t *p_buffer=nullptr;
71  int buffer_size=256;
72  Print *p_sink=nullptr;
73  AudioInfo cfg;
74  void (*callback)(maxi_float_t *channels);
75 };
76 
77 
78 } // namespace
AudioTools integration with Maximilian.
Definition: MaximilianDSP.h:17
void copy()
Copies the audio data from maximilian to the audio sink, Call this method from the Arduino Loop.
Definition: MaximilianDSP.h:52
bool setVolume(float f) override
Defines the volume. The values are between 0.0 and 1.0.
Definition: MaximilianDSP.h:38
void begin(AudioInfo cfg)
Setup Maximilian with audio parameters.
Definition: MaximilianDSP.h:32
Definition: NoArduino.h:58
Supports the setting and getting of the volume.
Definition: AudioTypes.h:210
virtual float volume()
provides the actual volume in the range of 0.0f to 1.0f
Definition: AudioTypes.h:213
virtual bool setVolume(float volume)
define the actual volume in the range of 0.0f to 1.0f
Definition: AudioTypes.h:215
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition: AnalogAudio.h:10
Basic Audio information which drives e.g. I2S.
Definition: AudioTypes.h:50
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition: AudioTypes.h:53
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition: AudioTypes.h:55