Skip to content

Commit db55872

Browse files
authored
Merge pull request #204 from troyhacks/Strip_Level_Color_Adjust
Strip level color adjust
2 parents 972257a + 6ad0b28 commit db55872

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

usermods/audioreactive/audio_reactive.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ static float lastFftCalc[NUM_GEQ_CHANNELS] = {0.0f}; // backup
348348

349349
#if !defined(CONFIG_IDF_TARGET_ESP32C3)
350350
// audio source parameters and constant
351-
constexpr SRate_t SAMPLE_RATE = 22050; // Base sample rate in Hz - 22Khz is a standard rate. Physical sample time -> 23ms
351+
constexpr SRate_t SAMPLE_RATE = 96000; // Base sample rate in Hz - 22Khz is a standard rate. Physical sample time -> 23ms
352352
//constexpr SRate_t SAMPLE_RATE = 16000; // 16kHz - use if FFTtask takes more than 20ms. Physical sample time -> 32ms
353353
//constexpr SRate_t SAMPLE_RATE = 20480; // Base sample rate in Hz - 20Khz is experimental. Physical sample time -> 25ms
354354
//constexpr SRate_t SAMPLE_RATE = 10240; // Base sample rate in Hz - previous default. Physical sample time -> 50ms

usermods/audioreactive/audio_source.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class AudioSource {
186186
bool _i2sMaster; // when false, ESP32 will be in I2S SLAVE mode (for devices that only operate in MASTER mode). Only works in newer IDF >= 4.4.x
187187
float _sampleScale; // pre-scaling factor for I2S samples
188188
I2S_datatype newSampleBuffer[I2S_SAMPLES_MAX+4] = { 0 }; // global buffer for i2s_read
189+
I2S_datatype newSampleBuffer4x[(I2S_SAMPLES_MAX*4)+4] = { 0 }; // global buffer for i2s_read
189190
};
190191

191192
/* Basic I2S microphone source
@@ -194,12 +195,12 @@ class AudioSource {
194195
*/
195196
class I2SSource : public AudioSource {
196197
public:
197-
I2SSource(SRate_t sampleRate, int blockSize, float sampleScale = 1.0f, bool i2sMaster=true) :
198+
I2SSource(SRate_t sampleRate, int blockSize, float sampleScale = 1.0f, bool i2sMaster=false) :
198199
AudioSource(sampleRate, blockSize, sampleScale, i2sMaster) {
199200
_config = {
200201
.mode = i2sMaster ? i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX) : i2s_mode_t(I2S_MODE_SLAVE | I2S_MODE_RX),
201-
.sample_rate = _sampleRate,
202-
.bits_per_sample = I2S_SAMPLE_RESOLUTION, // slave mode: may help to set this to 96000, as the other side (master) controls sample rates
202+
.sample_rate = _sampleRate, // slave mode: may help to set this to 96000, as the other side (master) controls sample rates
203+
.bits_per_sample = I2S_SAMPLE_RESOLUTION,
203204
.channel_format = I2S_MIC_CHANNEL,
204205
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 2, 0)
205206
.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),
@@ -394,6 +395,8 @@ class I2SSource : public AudioSource {
394395

395396
memset(buffer, 0, sizeof(float) * num_samples); // clear output buffer
396397
I2S_datatype *newSamples = newSampleBuffer; // use global input buffer
398+
I2S_datatype *newSamples_buff = newSampleBuffer4x; // use oversampling global input buffer
399+
397400
if (num_samples > I2S_SAMPLES_MAX) num_samples = I2S_SAMPLES_MAX; // protect the buffer from overflow
398401

399402
err = i2s_read(AR_I2S_PORT, (void *)newSamples, num_samples * sizeof(I2S_datatype), &bytes_read, portMAX_DELAY);
@@ -408,6 +411,15 @@ class I2SSource : public AudioSource {
408411
return;
409412
}
410413

414+
if (_sampleRate == 96000) {
415+
int current = 0;
416+
for (int i = 0; i < 2048; i += 4) {
417+
newSamples[current] = newSamples_buff[i];
418+
current++;
419+
}
420+
num_samples /= 4; // back to 512 samples
421+
}
422+
411423
// Store samples in sample buffer and update DC offset
412424
for (int i = 0; i < num_samples; i++) {
413425

wled00/bus_manager.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ uint8_t IRAM_ATTR ColorOrderMap::getPixelColorOrder(uint16_t pix, uint8_t defaul
102102
uint8_t swapW = defaultColorOrder >> 4;
103103
for (uint8_t i = 0; i < _count; i++) {
104104
if (pix >= _mappings[i].start && pix < (_mappings[i].start + _mappings[i].len)) {
105-
return _mappings[i].colorOrder | (swapW << 4);
105+
return _mappings[i].colorOrder | (swapW << 4); // WLED-MM/TroyHacks: Disabling this disables color order mapping.
106106
}
107107
}
108108
return defaultColorOrder;
@@ -202,6 +202,10 @@ void IRAM_ATTR BusDigital::setPixelColor(uint16_t pix, uint32_t c) {
202202
case 2: c = RGBW32(R(cOld), G(cOld), W(c) , 0); break;
203203
}
204204
}
205+
if (_colorOrder != co) {
206+
c = RGBW32(dim8_lin(R(c)), dim8_lin(G(c)), dim8_lin(B(c)), 0); // WLED-MM/TroyHacks - remap pixels not in the default color order
207+
co = _colorOrder; // keep the original color order, as this is a hack. :)
208+
}
205209
PolyBus::setPixelColor(_busPtr, _iType, pix, c, co);
206210
}
207211

0 commit comments

Comments
 (0)