arduino-audio-tools
Loading...
Searching...
No Matches
PWMAudioOutput.h
Go to the documentation of this file.
1#pragma once
2#include "AudioToolsConfig.h"
3#if defined(USE_PWM)
4
12// this is experimental at the moment
14#include "PWMConfig.h"
15
16namespace audio_tools {
17
26template<class PWMDriverT = PWMDriver>
28 public:
29 // Default constructor with default driver
30 PWMAudioOutput() = default;
33 if (p_driver->isTimerStarted()) {
34 end();
35 }
36 }
37
39 if (mode != TX_MODE) LOGE("mode not supported: using TX_MODE");
40 return p_driver->defaultConfig();
41 }
42
44
46 void setAudioInfo(AudioInfo info) override {
47 TRACEI();
48 AudioOutput::cfg = info;
50 if (cfg.sample_rate != info.sample_rate || cfg.channels != info.channels ||
54 cfg.channels = info.channels;
55 end();
56 begin(cfg);
57 cfg.logInfo();
58 }
59 }
60
62 AudioInfo result = audioInfo();
64 return result;
65 }
66
69 TRACED();
70 this->audio_config = config;
71 return begin();
72 }
73
79
80 virtual void end() override { p_driver->end(); }
81
82 int availableForWrite() override { return p_driver->availableForWrite(); }
83
84 size_t write(const uint8_t* data, size_t len) override {
85 return p_driver->write(data, len);
86 }
87
89 uint32_t framesPerSecond() { return p_driver->framesPerSecond(); }
90
92 void setBuffer(BaseBuffer<uint8_t>* buffer) { p_driver->setBuffer(buffer); }
93
94 protected:
98};
99
100} // namespace audio_tools
101
102#endif
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Abstract Audio Ouptut class.
Definition AudioOutput.h:25
AudioInfo cfg
Definition AudioOutput.h:88
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition AudioOutput.h:49
virtual AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioOutput.h:62
Shared functionality of all buffers.
Definition Buffers.h:23
Common functionality for PWM output. We generate audio using PWM with a frequency that is above the h...
Definition PWMAudioOutput.h:27
uint32_t framesPerSecond()
Definition PWMAudioOutput.h:89
uint32_t underflowsPerSecond()
Definition PWMAudioOutput.h:88
virtual PWMConfig defaultConfig(RxTxMode mode=TX_MODE)
Definition PWMAudioOutput.h:38
PWMDriverBase * driver()
Definition PWMAudioOutput.h:91
void setBuffer(BaseBuffer< uint8_t > *buffer)
Definition PWMAudioOutput.h:92
~PWMAudioOutput()
Definition PWMAudioOutput.h:32
PWMConfig config()
Definition PWMAudioOutput.h:43
bool begin()
Definition PWMAudioOutput.h:74
size_t write(const uint8_t *data, size_t len) override
Definition PWMAudioOutput.h:84
int availableForWrite() override
Definition PWMAudioOutput.h:82
PWMConfig audio_config
Definition PWMAudioOutput.h:95
AudioInfo audioInfoOut() override
Definition PWMAudioOutput.h:61
bool begin(PWMConfig config)
starts the processing using Streams
Definition PWMAudioOutput.h:68
PWMDriver pwm_driver
Definition PWMAudioOutput.h:96
void setAudioInfo(AudioInfo info) override
updates the sample rate dynamically
Definition PWMAudioOutput.h:46
PWMAudioOutput(PWMDriverBase &driver)
Definition PWMAudioOutput.h:31
virtual void end() override
Definition PWMAudioOutput.h:80
PWMDriverBase * p_driver
Definition PWMAudioOutput.h:97
Experimental: Audio output to PWM pins for the AVR. The AVR supports only up to 2 channels.
Definition PWMDriverAVR.h:24
Base Class for all PWM drivers.
Definition PWMDriverBase.h:36
uint32_t framesPerSecond()
Definition PWMDriverBase.h:139
virtual int effectiveOutputSampleRate()
Provides the effective sample rate.
Definition PWMDriverBase.h:168
uint32_t underflowsPerSecond()
Definition PWMDriverBase.h:137
virtual int availableForWrite()
Definition PWMDriverBase.h:92
void setBuffer(BaseBuffer< uint8_t > *buffer)
Definition PWMDriverBase.h:165
virtual PWMConfig defaultConfig()
Definition PWMDriverBase.h:43
bool isTimerStarted()
Definition PWMDriverBase.h:152
virtual size_t write(const uint8_t *data, size_t len)
Definition PWMDriverBase.h:102
bool begin(PWMConfig cfg)
Definition PWMDriverBase.h:49
virtual void end()
Definition PWMDriverBase.h:159
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:56
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:58
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:60
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:62
virtual void logInfo(const char *source="")
Definition AudioTypes.h:127
Configuration data for PWM audio output.
Definition PWMConfigAVR.h:10