diff --git a/src/dac.c b/src/dac.c index 54f64ae..74bc9e3 100644 --- a/src/dac.c +++ b/src/dac.c @@ -27,6 +27,18 @@ esp_err_t dac_write(const void *src, size_t size, size_t *bytes_written) return(ret); } +esp_err_t dac_write_int(int *src, size_t size, size_t *bytes_written) +{ + int16_t *out = (int16_t *)malloc(size * sizeof(int16_t)); + for(int i=0;i MAX_INT_16) ? MAX_INT_16 : (in < MIN_INT_16) ? MIN_INT_16 : in; + return (int16_t)(out * float_lut[volume]); +} + int16_t IRAM_ATTR scale_sample_sqrt (int16_t in, uint8_t volume) { return (int16_t)(in * sqrt_float_LUT[volume]); @@ -477,11 +491,13 @@ void wav_player_task(void* pvParameters) tmp16 = scale_sample(tmp16, 127 - bufs[i].fade); } // mix into master - // output_buf[s] += ( tmp16 >> DAMPEN_BITS ); + output_buf[s] += ( tmp16 >> DAMPEN_BITS ); // mix into master clamped - int next = output_buf[s] + ( tmp16 >> DAMPEN_BITS ); - // int16_t next_16 = (int16_t)(next > MAX_INT_16 ? MAX_INT_16 : next < MIN_INT_16 ? MIN_INT_16 : next); - output_buf[s] = (next > MAX_INT_16) ? MAX_INT_16 : (next < MIN_INT_16) ? MIN_INT_16 : next; + + // int next = output_buf[s] + ( tmp16 >> DAMPEN_BITS ); + + // output_buf[s] = (next > MAX_INT_16) ? MAX_INT_16 : (next < MIN_INT_16) ? MIN_INT_16 : next; + // fade if(bufs[i].fade > 0 && left && odd) { @@ -540,27 +556,22 @@ void wav_player_task(void* pvParameters) } // apply the global volume and EQ - bool left = false; for(size_t i=0;i