File tree Expand file tree Collapse file tree 4 files changed +92708
-0
lines changed Expand file tree Collapse file tree 4 files changed +92708
-0
lines changed Original file line number Diff line number Diff line change @@ -312,6 +312,12 @@ class AudioFFTBase : public AudioStream {
312
312
size_t readBytes (uint8_t *data, size_t len) override {
313
313
TRACED ();
314
314
if (rfft_data.size () == 0 ) return 0 ;
315
+
316
+ // get data via callback if there is no more data
317
+ if (cfg.rxtx_mode == RX_MODE && cfg.callback != nullptr && rfft_data.available () == 0 ) {
318
+ cfg.callback (*this );
319
+ }
320
+
315
321
// execute rfft when we consumed all data
316
322
if (has_rfft_data && rfft_data.available () == 0 ) {
317
323
rfft ();
@@ -443,6 +449,14 @@ class AudioFFTBase : public AudioStream {
443
449
// / gets the value of a bin
444
450
bool getBin (int pos, FFTBin &bin) { return p_driver->getBin (pos, bin); }
445
451
452
+ // / clears the fft data
453
+ void clearBins (){
454
+ FFTBin empty{0 ,0 };
455
+ for (int j=0 ; j< size (); j++){
456
+ setBin (j, empty);
457
+ }
458
+ }
459
+
446
460
// / Provides the actual configuration
447
461
AudioFFTConfig &config () { return cfg; }
448
462
Original file line number Diff line number Diff line change
1
+ cmake_minimum_required (VERSION 3.20 )
2
+
3
+
4
+ # set the project name
5
+ project (ifft )
6
+ set (CMAKE_CXX_STANDARD 11 )
7
+ set (DCMAKE_CXX_FLAGS "-Werror" )
8
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ldl -lpthread -lm" )
9
+ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ldl -lpthread -lm" )
10
+
11
+ # Emulator is not necessary for -DIS_MIN_DESKTOP
12
+ set (ADD_ARDUINO_EMULATOR OFF CACHE BOOL "Add Arduino Emulator Library" )
13
+ set (ADD_PORTAUDIO OFF CACHE BOOL "No Portaudio" )
14
+
15
+ # Build with arduino-audio-tools
16
+ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
17
+ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /../.. ${CMAKE_CURRENT_BINARY_DIR} /arduino-audio-tools )
18
+ endif ()
19
+
20
+ # Download miniaudio.h
21
+ file (DOWNLOAD https://raw.githubusercontent.com/mackron/miniaudio/master/miniaudio.h
22
+ ${CMAKE_CURRENT_SOURCE_DIR} /miniaudio.h )
23
+
24
+
25
+ # build sketch as executable
26
+ add_executable (ifft ifft.cpp )
27
+
28
+ # set preprocessor defines
29
+ target_compile_definitions (ifft PUBLIC -DIS_MIN_DESKTOP )
30
+
31
+ # specify libraries
32
+ target_link_libraries (ifft arduino-audio-tools )
33
+
34
+ # access to miniaudio in sketch directory
35
+ target_include_directories (ifft PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
Original file line number Diff line number Diff line change
1
+ #include " AudioTools.h"
2
+ #include " AudioTools/AudioLibs/AudioRealFFT.h" // using RealFFT
3
+ #include " AudioTools/AudioLibs/MiniAudioStream.h"
4
+
5
+ AudioInfo info (44100 , 2 , 16 );
6
+ AudioRealFFT afft; // or AudioKissFFT
7
+ // CsvOutput<int16_t> out(Serial);
8
+ MiniAudioStream out;
9
+ StreamCopy copier (out, afft);
10
+ int bin_idx = 0 ;
11
+
12
+ // privide fft data
13
+ void fftFillData (AudioFFTBase &fft) {
14
+ fft.clearBins ();
15
+ FFTBin bin{1 ,1 };
16
+ fft.setBin (bin_idx, bin);
17
+
18
+ // restart from first bin
19
+ if (++bin_idx>=fft.size ()) bin_idx = 0 ;
20
+ }
21
+
22
+ void setup () {
23
+ AudioToolsLogger.begin (Serial, AudioToolsLogLevel::Warning);
24
+
25
+ // Setup FFT
26
+ auto tcfg = afft.defaultConfig (RX_MODE);
27
+ tcfg.copyFrom (info);
28
+ tcfg.length = 1024 ;
29
+ tcfg.callback = fftFillData;
30
+ afft.begin (tcfg);
31
+
32
+ // setup output
33
+ auto ocfg = out.defaultConfig (TX_MODE);
34
+ ocfg.copyFrom (info);
35
+ out.begin (ocfg);
36
+ }
37
+
38
+ void loop () { copier.copy (); }
You can’t perform that action at this time.
0 commit comments