feat ✨: Added new feature for audio processing with AudioKit and MidiBleServer
Implemented a new audio processing system using AudioKit and MidiBleServer, allowing for real-time audio processing and MIDI control.
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.pio
|
||||||
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/ipch
|
||||||
10
.vscode/extensions.json
vendored
Normal file
10
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
|
// for the documentation about the extensions.json format
|
||||||
|
"recommendations": [
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
],
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"ms-vscode.cpptools-extension-pack"
|
||||||
|
]
|
||||||
|
}
|
||||||
91
kk.yaml
Normal file
91
kk.yaml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
version: "3.4"
|
||||||
|
services:
|
||||||
|
tdarr:
|
||||||
|
lxc_name: tdarr
|
||||||
|
image: ghcr.io/haveagitgat/tdarr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: bridge
|
||||||
|
ports:
|
||||||
|
- 8265:8265 # webUI port
|
||||||
|
- 8266:8266 # server port
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Rome
|
||||||
|
- PUID=${PUID}
|
||||||
|
- PGID=${PGID}
|
||||||
|
- UMASK_SET=002
|
||||||
|
- serverIP=0.0.0.0
|
||||||
|
- serverPort=8266
|
||||||
|
- webUIPort=8265
|
||||||
|
- internalNode=true
|
||||||
|
- inContainer=true
|
||||||
|
- ffmpegVersion=7
|
||||||
|
- nodeName=MyInternalNode
|
||||||
|
- auth=false
|
||||||
|
- openBrowser=true
|
||||||
|
- maxLogSizeMB=10
|
||||||
|
- cronPluginUpdate=
|
||||||
|
# - NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
# - NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
volumes:
|
||||||
|
- /docker/tdarr/server:/app/server
|
||||||
|
- /docker/tdarr/configs:/app/configs
|
||||||
|
- /docker/tdarr/logs:/app/logs
|
||||||
|
- /media:/media
|
||||||
|
- /transcode_cache:/temp
|
||||||
|
|
||||||
|
# devices:
|
||||||
|
# - /dev/dri:/dev/dri
|
||||||
|
# deploy:
|
||||||
|
# resources:
|
||||||
|
# reservations:
|
||||||
|
# devices:
|
||||||
|
# - driver: nvidia
|
||||||
|
# count: all
|
||||||
|
# capabilities: [gpu]
|
||||||
|
|
||||||
|
|
||||||
|
# node example
|
||||||
|
tdarr-node:
|
||||||
|
lxc_name: tdarr-node
|
||||||
|
image: ghcr.io/haveagitgat/tdarr_node:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: service:tdarr
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Rome
|
||||||
|
- PUID=${PUID}
|
||||||
|
- PGID=${PGID}
|
||||||
|
- UMASK_SET=002
|
||||||
|
- nodeName=MyExternalNode
|
||||||
|
- serverIP=0.0.0.0
|
||||||
|
- serverPort=8266
|
||||||
|
- inContainer=true
|
||||||
|
- ffmpegVersion=7
|
||||||
|
- nodeType=mapped
|
||||||
|
- priority=-1
|
||||||
|
- cronPluginUpdate=
|
||||||
|
- apiKey=
|
||||||
|
- maxLogSizeMB=10
|
||||||
|
- pollInterval=2000
|
||||||
|
- startPaused=false
|
||||||
|
- transcodegpuWorkers=1
|
||||||
|
- transcodecpuWorkers=2
|
||||||
|
- healthcheckgpuWorkers=1
|
||||||
|
- healthcheckcpuWorkers=1
|
||||||
|
# - NVIDIA_DRIVER_CAPABILITIES=all
|
||||||
|
# - NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- /docker/tdarr/configs:/app/configs
|
||||||
|
- /docker/tdarr/logs:/app/logs
|
||||||
|
- /media:/media
|
||||||
|
- /transcode_cache:/temp
|
||||||
|
|
||||||
|
# devices:
|
||||||
|
# - /dev/dri:/dev/dri
|
||||||
|
# deploy:
|
||||||
|
# resources:
|
||||||
|
# reservations:
|
||||||
|
# devices:
|
||||||
|
# - driver: nvidia
|
||||||
|
# count: all
|
||||||
|
# capabilities: [gpu]
|
||||||
16
platformio.ini
Normal file
16
platformio.ini
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[platformio]
|
||||||
|
description = Audio Example
|
||||||
|
default_envs = esp32dev
|
||||||
|
|
||||||
|
[env:esp32dev]
|
||||||
|
platform = https://github.com/platformio/platform-espressif32.git
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
lib_deps =
|
||||||
|
https://github.com/pschatzmann/arduino-audio-tools.git
|
||||||
|
https://github.com/pschatzmann/arduino-audio-driver.git
|
||||||
|
https://github.com/pschatzmann/arduino-midi.git
|
||||||
|
build_flags = -DCORE_DEBUG_LEVEL=5 -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function -Wno-format-extra-args
|
||||||
|
monitor_speed = 115200
|
||||||
|
monitor_filters = esp32_exception_decoder
|
||||||
|
board_build.partitions = huge_app.csv
|
||||||
78
src/main.cpp
Normal file
78
src/main.cpp
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
// or LyratV42,LyratV43,AudioKitAC101,AudioKitEs8388V1,AudioKitEs8388V2
|
||||||
|
|
||||||
|
#include "AudioTools.h"
|
||||||
|
#include "AudioTools/AudioLibs/AudioBoardStream.h"
|
||||||
|
#include "AudioTools/AudioLibs/AudioRealFFT.h" // or AudioKissFFT
|
||||||
|
#include <Midi.h>
|
||||||
|
|
||||||
|
MidiBleServer ble("MidiServer");
|
||||||
|
MidiCallbackAction action;
|
||||||
|
|
||||||
|
AudioBoardStream kit(AudioKitEs8388V1); // Audio source
|
||||||
|
AudioRealFFT fft; // or AudioKissFFT
|
||||||
|
StreamCopy copier(fft, kit); // copy mic to tfl
|
||||||
|
int channels = 2;
|
||||||
|
int samples_per_second = 44100;
|
||||||
|
int bits_per_sample = 16;
|
||||||
|
float value=0;
|
||||||
|
int midi_note;
|
||||||
|
int prev_note;
|
||||||
|
int amplitude=50;
|
||||||
|
|
||||||
|
int freqToMidi(float frequency) {
|
||||||
|
if (frequency <= 0) return -1; // Error case
|
||||||
|
return round(69 + 12 * log(frequency / 440.0) / log(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
// display fft result
|
||||||
|
void fftResult(AudioFFTBase &fft){
|
||||||
|
float diff;
|
||||||
|
auto result = fft.result();
|
||||||
|
if (result.magnitude>100000){
|
||||||
|
Serial.print(result.frequency);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(result.magnitude);
|
||||||
|
Serial.print(" => ");
|
||||||
|
Serial.print(result.frequencyAsNote(diff));
|
||||||
|
Serial.print( " diff: ");
|
||||||
|
Serial.println(diff);
|
||||||
|
midi_note == freqToMidi(result.frequency);
|
||||||
|
if (midi_note != prev_note){
|
||||||
|
ble.noteOff( prev_note, 20 );
|
||||||
|
prev_note = midi_note;
|
||||||
|
ble.noteOn(midi_note, amplitude );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Warning);
|
||||||
|
|
||||||
|
ble.begin(action);
|
||||||
|
|
||||||
|
// ble.begin();
|
||||||
|
ble.setDefaultSendingChannel(0);
|
||||||
|
|
||||||
|
// setup Audiokit
|
||||||
|
auto cfg = kit.defaultConfig(RX_MODE);
|
||||||
|
cfg.input_device = ADC_INPUT_LINE2;
|
||||||
|
cfg.channels = channels;
|
||||||
|
cfg.sample_rate = samples_per_second;
|
||||||
|
cfg.bits_per_sample = bits_per_sample;
|
||||||
|
kit.begin(cfg);
|
||||||
|
|
||||||
|
// Setup FFT
|
||||||
|
auto tcfg = fft.defaultConfig();
|
||||||
|
tcfg.length = 8192;
|
||||||
|
tcfg.channels = channels;
|
||||||
|
tcfg.sample_rate = samples_per_second;
|
||||||
|
tcfg.bits_per_sample = bits_per_sample;
|
||||||
|
tcfg.callback = &fftResult;
|
||||||
|
fft.begin(tcfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
copier.copy();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user