Closed D10n1x closed 2 years ago
You will need to implement your own Subclass of IAudioSource. If you use my https://github.com/pschatzmann/arduino-audio-tools library this should be quite easy:
Or you can try this example replacing the AudioKit with an I2SStream. But you might need to take the latest correction form the Audio Tools...
I am not happy with the current functionality and I think we need to integrate some codecs...
Thanks for the hint, but it’s difficult to understand with my knowledge, although I’ll figure it out individually, it seems like I’ll study something simpler for now
Using the above library https://github.com/pschatzmann/arduino-audio-tools I compiled the following code
#include <Arduino.h>
#include "AudioTools.h"
#include "AudioI2S/I2SStream.h"
#include "AudioLibs/MicroRTSPAudio.h"
#include "AudioStreamer.h"
#include "RTSPServer.h"
const char* ssid = "ssid";
const char* password = "password";
int port = 554;
I2SStream i2s; // Audio source
RTSPSourceAudioStream source(i2s); // IAudioSource for RTSP
AudioStreamer streamer = AudioStreamer(&source); // Stream audio via RTSP
RTSPServer rtsp = RTSPServer(&streamer, port);
// RTSPServer rtsp(&streamer, port);
void setup() {
Serial.begin(115200);
AudioLogger::instance().begin(Serial, AudioLogger::Info);
// start i2s input with default configuration
Serial.println("starting I2S...");
auto cfg = i2s.defaultConfig(RX_MODE);
cfg.i2s_format = I2S_STD_FORMAT; // I2S_LSB_FORMAT I2S_STD_FORMAT
cfg.bits_per_sample = 16;
cfg.channels = 1;
cfg.sample_rate = 44100;
cfg.is_master = true;
i2s.begin(cfg);
Serial.println("Start Wifi");
rtsp.begin(ssid, password);
}
void loop() {
delay(1000);
}
But when the client connects to RTSP, I get an error
E (32714) I2S: i2s_read(2213): RX mode is not enabled
[E] I2SESP32.h : 93 - size_t audio_tools::I2SBase::readBytes(void*, size_t)
before this happens the following
starting I2S...
[I] I2SConfig.h : 89 - rx/tx mode: RX
[I] I2SConfig.h : 90 - port_no: 0
[I] I2SConfig.h : 91 - is_master: Master
[I] I2SConfig.h : 92 - sample rate: 44100
[I] I2SConfig.h : 93 - bits per sample: 16
[I] I2SConfig.h : 94 - number of channels: 1
[I] I2SConfig.h : 95 - i2s_format: I2S_STD_FORMAT
[I] I2SConfig.h : 97 - auto_clear:0
[I] I2SConfig.h : 104 - buffer_count:10
[I] I2SConfig.h : 105 - buffer_size:512
[I] I2SConfig.h : 109 - pin_bck: 14
[I] I2SConfig.h : 110 - pin_ws: 15
[I] I2SConfig.h : 111 - pin_data: 32
and after a while it
[I] I2SConfig.h : 89 - rx/tx mode: TX
[I] I2SConfig.h : 90 - port_no: 0
[I] I2SConfig.h : 91 - is_master: Master
[I] I2SConfig.h : 92 - sample rate: 44100
[I] I2SConfig.h : 93 - bits per sample: 16
[I] I2SConfig.h : 94 - number of channels: 2
[I] I2SConfig.h : 95 - i2s_format: I2S_STD_FORMAT
[I] I2SConfig.h : 97 - auto_clear:1
[I] I2SConfig.h : 104 - buffer_count:10
[I] I2SConfig.h : 105 - buffer_size:512
[I] I2SConfig.h : 109 - pin_bck: 14
[I] I2SConfig.h : 110 - pin_ws: 15
[I] I2SConfig.h : 111 - pin_data: 22
I committed some corrections in both libraries.
For the time being only a sampling rate of 16000 with a mono signal is supported. If you try other settings you will need to adjust the fragment_size and timer_period. But I noticed that the UDP of the ESP32 is just not fast enough to handle more and the only way around this limitation is to use CODECs.
Please note that I have not released this project yet, so it is purely experimental!
I've just started studying esp32, figured out how to launch and listen from the INMP441 microphone via i2s, figured out how to run your code for broadcasting over rtsp, but for a couple of days I can't figure out how to replace AudioTestSource(); with the sound received from the microphone. could you tell me where to dig or help