|
|
@@ -181,6 +181,8 @@ start: |
|
|
|
//Serial.print("AudioPlaySdWav write, "); |
|
|
|
//Serial.print("size = "); |
|
|
|
//Serial.print(size); |
|
|
|
//Serial.print(", buffer_offset = "); |
|
|
|
//Serial.print(buffer_offset); |
|
|
|
//Serial.print(", data_length = "); |
|
|
|
//Serial.print(data_length); |
|
|
|
//Serial.print(", space = "); |
|
|
@@ -194,6 +196,8 @@ start: |
|
|
|
if (size < len) len = size; |
|
|
|
memcpy((uint8_t *)header + data_length, p, len); |
|
|
|
data_length += len; |
|
|
|
buffer_offset += len; |
|
|
|
buffer_length -= len; |
|
|
|
if (data_length < 20) return false; |
|
|
|
// parse the header... |
|
|
|
if (header[0] == 0x46464952 && header[2] == 0x45564157 |
|
|
@@ -214,6 +218,8 @@ start: |
|
|
|
if (size < len) len = size; |
|
|
|
memcpy((uint8_t *)header + data_length, p, len); |
|
|
|
data_length += len; |
|
|
|
buffer_offset += len; |
|
|
|
buffer_length -= len; |
|
|
|
if (data_length < 16) return false; |
|
|
|
if (parse_format()) { |
|
|
|
//Serial.println("audio format ok"); |
|
|
@@ -227,11 +233,13 @@ start: |
|
|
|
break; |
|
|
|
|
|
|
|
// find the data chunk |
|
|
|
case STATE_PARSE3: |
|
|
|
case STATE_PARSE3: // 10 |
|
|
|
len = 8 - data_length; |
|
|
|
if (size < len) len = size; |
|
|
|
memcpy((uint8_t *)header + data_length, p, len); |
|
|
|
data_length += len; |
|
|
|
buffer_offset += len; |
|
|
|
buffer_length -= len; |
|
|
|
if (data_length < 8) return false; |
|
|
|
//Serial.print("chunk id = "); |
|
|
|
//Serial.print(header[0], HEX); |
|
|
@@ -261,15 +269,20 @@ start: |
|
|
|
goto start; |
|
|
|
|
|
|
|
// ignore any extra unknown chunks (title & artist info) |
|
|
|
case STATE_PARSE4: |
|
|
|
case STATE_PARSE4: // 11 |
|
|
|
if (size < data_length) { |
|
|
|
data_length -= size; |
|
|
|
buffer_offset += size; |
|
|
|
buffer_length -= size; |
|
|
|
return false; |
|
|
|
} |
|
|
|
p += data_length; |
|
|
|
size -= data_length; |
|
|
|
buffer_offset += data_length; |
|
|
|
buffer_length -= data_length; |
|
|
|
data_length = 0; |
|
|
|
state = STATE_PARSE3; |
|
|
|
//Serial.println("consumed unknown chunk"); |
|
|
|
goto start; |
|
|
|
|
|
|
|
// playing mono at native sample rate |