Implement reset FIFO for ZSM commands
This commit is contained in:
parent
27dbe46ac7
commit
b695192f34
2 changed files with 7 additions and 3 deletions
|
@ -155,7 +155,11 @@ void ZsmBackend::tick(bool step) {
|
|||
for (size_t i = 0; i < cmd.extcmd.bytes; i += 2) {
|
||||
switch (cmd.extcmd.pcm[i]) {
|
||||
case 0: { // ctrl
|
||||
pcm_write_ctrl(cmd.extcmd.pcm[i + 1]);
|
||||
uint8_t ctrl = cmd.extcmd.pcm[i + 1];
|
||||
if (ctrl & 0x80) {
|
||||
remain = 0;
|
||||
}
|
||||
pcm_write_ctrl(ctrl);
|
||||
} break;
|
||||
case 1: { // rate
|
||||
pcm_write_rate(cmd.extcmd.pcm[i + 1]);
|
||||
|
|
|
@ -85,12 +85,12 @@ class ZsmBackend : public PlaybackBackend {
|
|||
}
|
||||
void audio_step(size_t samples) {
|
||||
if (samples == 0) return;
|
||||
while (pcm_fifo_avail() < samples && remain > 0) {
|
||||
while (pcm_fifo_avail() < samples) {
|
||||
if (pcm_read_rate() == 0) break;
|
||||
if ((--remain) == 0) {
|
||||
if (islooped) {
|
||||
cur = loop;
|
||||
remain = loop_rem - 1;
|
||||
remain = loop_rem;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue