Skip to content

Commit 53ca299

Browse files
authored
fix wav files invalid codec
1 parent 36464fd commit 53ca299

File tree

2 files changed

+54
-50
lines changed

2 files changed

+54
-50
lines changed

src/Audio.cpp

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
*
44
* Created on: Oct 26.2018
55
*
6-
* Version 2.0.5g
7-
* Updated on: Aug 10.2022
6+
* Version 2.0.5h
7+
* Updated on: Aug 11.2022
88
* Author: Wolle (schreibfaul1)
99
*
1010
*/
@@ -1111,6 +1111,49 @@ bool Audio::latinToUTF8(char* buff, size_t bufflen){
11111111
return true;
11121112
}
11131113
//---------------------------------------------------------------------------------------------------------------------
1114+
size_t Audio::readAudioHeader(uint32_t bytes){
1115+
size_t bytesReaded = 0;
1116+
if(m_codec == CODEC_WAV){
1117+
int res = read_WAV_Header(InBuff.getReadPtr(), bytes);
1118+
if(res >= 0) bytesReaded = res;
1119+
else{ // error, skip header
1120+
m_controlCounter = 100;
1121+
}
1122+
}
1123+
if(m_codec == CODEC_MP3){
1124+
int res = read_ID3_Header(InBuff.getReadPtr(), bytes);
1125+
if(res >= 0) bytesReaded = res;
1126+
else{ // error, skip header
1127+
m_controlCounter = 100;
1128+
}
1129+
}
1130+
if(m_codec == CODEC_M4A){
1131+
int res = read_M4A_Header(InBuff.getReadPtr(), bytes);
1132+
if(res >= 0) bytesReaded = res;
1133+
else{ // error, skip header
1134+
m_controlCounter = 100;
1135+
}
1136+
}
1137+
if(m_codec == CODEC_AAC){
1138+
// stream only, no header
1139+
m_audioDataSize = getFileSize();
1140+
m_controlCounter = 100;
1141+
}
1142+
if(m_codec == CODEC_FLAC){
1143+
int res = read_FLAC_Header(InBuff.getReadPtr(), bytes);
1144+
if(res >= 0) bytesReaded = res;
1145+
else{ // error, skip header
1146+
stopSong();
1147+
m_controlCounter = 100;
1148+
}
1149+
}
1150+
if(!isRunning()){
1151+
log_e("Processing stopped due to invalid audio header");
1152+
return 0;
1153+
}
1154+
return bytesReaded;
1155+
}
1156+
//---------------------------------------------------------------------------------------------------------------------
11141157
int Audio::read_WAV_Header(uint8_t* data, size_t len) {
11151158
static size_t headerSize;
11161159
static uint32_t cs = 0;
@@ -2805,7 +2848,6 @@ bool Audio::STfromEXTINF(char* str){
28052848
void Audio::processLocalFile() {
28062849

28072850
if(!(audiofile && m_f_running && getDatamode() == AUDIO_LOCALFILE)) return;
2808-
28092851
int bytesDecoded = 0;
28102852
uint32_t bytesCanBeWritten = 0;
28112853
uint32_t bytesCanBeRead = 0;
@@ -2853,45 +2895,7 @@ void Audio::processLocalFile() {
28532895
if(bytesCanBeRead == InBuff.getMaxBlockSize()) { // mp3 or aac frame complete?
28542896

28552897
if(m_controlCounter != 100){
2856-
if(m_codec == CODEC_WAV){
2857-
int res = read_WAV_Header(InBuff.getReadPtr(), bytesCanBeRead);
2858-
if(res >= 0) bytesDecoded = res;
2859-
else{ // error, skip header
2860-
m_controlCounter = 100;
2861-
}
2862-
}
2863-
if(m_codec == CODEC_MP3){
2864-
int res = read_ID3_Header(InBuff.getReadPtr(), bytesCanBeRead);
2865-
if(res >= 0) bytesDecoded = res;
2866-
else{ // error, skip header
2867-
m_controlCounter = 100;
2868-
}
2869-
}
2870-
if(m_codec == CODEC_M4A){
2871-
int res = read_M4A_Header(InBuff.getReadPtr(), bytesCanBeRead);
2872-
if(res >= 0) bytesDecoded = res;
2873-
else{ // error, skip header
2874-
m_controlCounter = 100;
2875-
}
2876-
}
2877-
if(m_codec == CODEC_AAC){
2878-
// stream only, no header
2879-
m_audioDataSize = getFileSize();
2880-
m_controlCounter = 100;
2881-
}
2882-
2883-
if(m_codec == CODEC_FLAC){
2884-
int res = read_FLAC_Header(InBuff.getReadPtr(), bytesCanBeRead);
2885-
if(res >= 0) bytesDecoded = res;
2886-
else{ // error, skip header
2887-
stopSong();
2888-
m_controlCounter = 100;
2889-
}
2890-
}
2891-
if(!isRunning()){
2892-
log_e("Processing stopped due to invalid audio header");
2893-
return;
2894-
}
2898+
bytesDecoded = readAudioHeader(bytesCanBeRead);
28952899
}
28962900
else {
28972901
bytesDecoded = sendBytes(InBuff.getReadPtr(), bytesCanBeRead);
@@ -3729,7 +3733,7 @@ bool Audio:: initializeDecoder(){
37293733
InBuff.changeMaxBlockSize(m_frameSizeWav);
37303734
break;
37313735
case CODEC_OGG:
3732-
m_codec = CODEC_OGG;
3736+
m_codec = CODEC_OGG; log_e("!");
37333737
AUDIO_INFO("ogg not supported");
37343738
goto exit;
37353739
break;
@@ -4063,13 +4067,12 @@ int Audio::sendBytes(uint8_t* data, size_t len) {
40634067
bytesLeft = len;
40644068
int ret = 0;
40654069
int bytesDecoded = 0;
4066-
if(m_codec == CODEC_WAV){ //copy len data in outbuff and set validsamples and bytesdecoded=len
4067-
memmove(m_outBuff, data , len);
4068-
if(getBitsPerSample() == 16) m_validSamples = len / (2 * getChannels());
4069-
if(getBitsPerSample() == 8 ) m_validSamples = len / 2;
4070-
bytesLeft = 0;
4071-
}
4070+
40724071
switch(m_codec){
4072+
case CODEC_WAV: memmove(m_outBuff, data , len); //copy len data in outbuff and set validsamples and bytesdecoded=len
4073+
if(getBitsPerSample() == 16) m_validSamples = len / (2 * getChannels());
4074+
if(getBitsPerSample() == 8 ) m_validSamples = len / 2;
4075+
bytesLeft = 0; break;
40734076
case CODEC_MP3: ret = MP3Decode(data, &bytesLeft, m_outBuff, 0); break;
40744077
case CODEC_AAC: ret = AACDecode(data, &bytesLeft, m_outBuff); break;
40754078
case CODEC_M4A: ret = AACDecode(data, &bytesLeft, m_outBuff); break;

src/Audio.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Audio.h
33
*
44
* Created on: Oct 28,2018
5-
* Updated on: Aug 10,2022
5+
* Updated on: Aug 11,2022
66
* Author: Wolle (schreibfaul1)
77
*/
88

@@ -235,6 +235,7 @@ class Audio : private AudioBuffer{
235235
void printDecodeError(int r);
236236
void showID3Tag(const char* tag, const char* val);
237237
void unicode2utf8(char* buff, uint32_t len);
238+
size_t readAudioHeader(uint32_t bytes);
238239
int read_WAV_Header(uint8_t* data, size_t len);
239240
int read_FLAC_Header(uint8_t *data, size_t len);
240241
int read_ID3_Header(uint8_t* data, size_t len);

0 commit comments

Comments
 (0)