MCPcopy Create free account
hub / github.com/OpenEarable/open-earable / update

Method update

src/task_manager/TaskManager.cpp:3–71  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1#include "TaskManager.h"
2
3void TaskManager::update() {
4 update_edge_ml();
5
6 if (_buffer_flag) return;
7 _buffer_flag = true;
8
9 const int _min_blocks = 2;
10 const int _max_blocks = 4;
11 //const float STD = 0.5;
12
13 /*Serial.print("Play: ");
14 Serial.print(audio_player.available() ? (*audio_player.source->stream)->remaining() : -1);
15 Serial.print(" PDM: ");
16 Serial.println(recorder.available() ? (*recorder.target->stream)->remaining() : -1);*/
17
18 Provider * provider;
19
20 int _blocks_handled = 0;
21
22 while (!check_overlap(NULL) && max(recorder.available() ? (*recorder.target->stream)->ready() : 0, audio_player.available() ? (*audio_player.source->stream)->ready() : 0) >= _min_blocks) {
23 // check priority
24 float diff = (recorder.available() ? (*recorder.target->stream)->remaining() : pdm_b_count) - (audio_player.available() ? (*audio_player.source->stream)->remaining() : audio_b_count);
25 //float mean = (pdm_mic_sensor.remaining_blocks() + audio_player.remaining_blocks()) / 2.0;
26 int blocks = min(abs(diff) + _min_blocks / 2, _max_blocks - _blocks_handled); //max(mean * STD, min_update / 2); //min_update / 2;
27 //int blocks = 1;
28
29 if (audio_player.available() && diff > 0) {
30 provider = audio_player.source;
31 } else if (recorder.available()) {
32 provider = recorder.target;
33 } else {
34 break; // needed?
35 }
36
37 long start = millis();
38 //_blocks_handled += update(provider, min(blocks,(*provider->stream)->ready()));
39 int cont = update_audio(provider, min(blocks,(*provider->stream)->ready()));
40 float _time = millis() - start;
41
42 _blocks_handled += cont;
43
44 /*if (cont > 0) {
45 if (provider == audio_player.source) {
46 _mean_i2s = (1-alpha) * _mean_i2s + alpha * _time / cont;
47 _var_i2s = (1-alpha) * _var_i2s + alpha * powf(_time / cont - _mean_i2s, 2);
48 } else if (provider == recorder.target){
49 _mean_pdm = (1-alpha) * _mean_pdm + alpha * _time / cont;
50 _var_pdm = (1-alpha) * _var_pdm + alpha * powf(_time / cont - _mean_pdm , 2);
51 }
52 }*/
53
54 if (_blocks_handled >= _max_blocks) break;
55 }
56
57 /*long now = millis();
58 Serial.print(now - (long)_edge_ml_last - (long)_edge_ml_delay);
59 Serial.print(", ");
60 Serial.println(_blocks_handled);*/

Callers 1

update_edge_mlMethod · 0.45

Calls 3

availableMethod · 0.45
readyMethod · 0.45
remainingMethod · 0.45

Tested by

no test coverage detected