diff options
| author | Jeff Epler <jepler@gmail.com> | 2019-12-12 08:44:15 -0600 |
|---|---|---|
| committer | Jeff Epler <jepler@gmail.com> | 2019-12-12 08:44:15 -0600 |
| commit | 1cdac3f16a9244c992e8494a7246ab643cdb47c0 (patch) | |
| tree | bc50ab0a7659defa75b867027330192c802fd1c5 /shared-module/audiomp3/MP3File.h | |
| parent | 8c841af9461eba6252690c38bc3e726f2fd09e8b (diff) | |
MP3File: Fix stereo playback on samd AudioOut
There were several problems with the way this worked -- the read_count
approach was too complicated and I made a mistake "simplifying" it from
WaveFile. And when the right channel was returned, it was off by 1 byte,
making it into static.
Instead, directly track which is the "other" channel that has data
available, and by using the right data type make the "+ channel"
arithmetic give the right result.
This requires a double cast (int16_t*)(void*) due to an alignment warning;
the alignment is now ensured manually, but the compiler doesn't make the
necessary inference that the low address bit must be clear.
Diffstat (limited to 'shared-module/audiomp3/MP3File.h')
| -rw-r--r-- | shared-module/audiomp3/MP3File.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/shared-module/audiomp3/MP3File.h b/shared-module/audiomp3/MP3File.h index 12649ac1a..9d99e8d1f 100644 --- a/shared-module/audiomp3/MP3File.h +++ b/shared-module/audiomp3/MP3File.h @@ -39,7 +39,7 @@ typedef struct { uint8_t* inbuf; uint32_t inbuf_length; uint32_t inbuf_offset; - uint8_t* buffers[2]; + int16_t* buffers[2]; uint32_t len; uint32_t frame_buffer_size; @@ -50,8 +50,8 @@ typedef struct { uint8_t channel_count; bool eof; - uint16_t read_count; - uint16_t channel_read_count[2]; + int8_t other_channel; + int8_t other_buffer_index; } audiomp3_mp3file_obj_t; // These are not available from Python because it may be called in an interrupt. |
