arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
MaximilianDSP.h
1#pragma once
2#include "AudioConfig.h"
3#include "AudioTools/CoreAudio/AudioTypes.h"
4#include "maximilian.h"
5#include "libs/maxiClock.h"
6
7// Maximilian play function - return an array of 2 channels
8void play(maxi_float_t *channels);//run dac!
9void play1(maxi_float_t *channels);//run dac!
10void play2(maxi_float_t *channels);//run dac!
11
12namespace audio_tools {
13
18class Maximilian : public VolumeSupport {
19 public:
20
21 Maximilian(Print &out, int bufferSize=DEFAULT_BUFFER_SIZE, void (*callback)(maxi_float_t *channels)=play){
22 buffer_size = bufferSize;
23 p_sink = &out;
24 this->callback = callback;
25 }
26
27 ~Maximilian() {
28 }
29
31 void begin(AudioInfo cfg){
32 this->cfg = cfg;
33 buffer.resize(buffer_size);
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 *) buffer.data();
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(buffer.data(), buffer_size);
66 LOGI("bytes written %u", result)
67 }
68
69 protected:
70 Vector<uint8_t> buffer;
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:18
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:31
Definition NoArduino.h:62
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
Supports the setting and getting of the volume.
Definition AudioTypes.h:201
virtual float volume()
provides the actual volume in the range of 0.0f to 1.0f
Definition AudioTypes.h:204
virtual bool setVolume(float volume)
define the actual volume in the range of 0.0f to 1.0f
Definition AudioTypes.h:206
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioConfig.h:885
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:52
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:55
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:57