zynthian / zynthian-issue-tracking

Centralized Issue Tracking for Zynthian Project
https://github.com/orgs/zynthian/projects/1
11 stars 3 forks source link

Error at startup if multitrack audio recording armed #1228

Open riban-bw opened 1 week ago

riban-bw commented 1 week ago

Describe the issue

After restarting zynthian with multitrack audio recording enabled (chains armed) I saw error messages in the log.

To Reproduce

Steps to reproduce the behavior:

  1. Add 2 zynsampler chains
  2. Enable multitrack recording on chain 1 and the main mixbus.
  3. Restart zynthian (can probably save and load snapshot).

    Expected behaviour

    No errors.

    Actual behaviour

    Errors logged

    Additional context

    Log:

    Started libzynmixer
    Started libzynseq
    Started libzynsmf
    ERROR:zynthian_engine_audioplayer.control_cb: 'position'
    ERROR:zynthian_signal_manager.queue_thread_task: Queued callback 'update_control_arm(...)' for signal(4,2): 'rec'
    ERROR:zynthian_signal_manager.queue_thread_task: Traceback (most recent call last):
    File "/zynthian/zynthian-ui/zyngine/zynthian_signal_manager.py", line 172, in queue_thread_task
    data[2](**data[3])
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 886, in update_control_arm
    self.update_control(chan, "rec", value)
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 881, in update_control
    strip.zctrls[symbol].set_value(value, False)
    ~~~~~~~~~~~~^^^^^^^^
    KeyError: 'rec'
    Traceback (most recent call last):
    File "/zynthian/zynthian-ui/zyngine/zynthian_signal_manager.py", line 172, in queue_thread_task
    data[2](**data[3])
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 886, in update_control_arm
    self.update_control(chan, "rec", value)
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 881, in update_control
    strip.zctrls[symbol].set_value(value, False)
    ~~~~~~~~~~~~^^^^^^^^
    KeyError: 'rec'
    ERROR:zynthian_signal_manager.queue_thread_task: Queued callback 'update_control_arm(...)' for signal(4,2): 'rec'
    ERROR:zynthian_signal_manager.queue_thread_task: Traceback (most recent call last):
    File "/zynthian/zynthian-ui/zyngine/zynthian_signal_manager.py", line 172, in queue_thread_task
    data[2](**data[3])
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 886, in update_control_arm
    self.update_control(chan, "rec", value)
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 881, in update_control
    strip.zctrls[symbol].set_value(value, False)
    ~~~~~~~~~~~~^^^^^^^^
    KeyError: 'rec'
    Traceback (most recent call last):
    File "/zynthian/zynthian-ui/zyngine/zynthian_signal_manager.py", line 172, in queue_thread_task
    data[2](**data[3])
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 886, in update_control_arm
    self.update_control(chan, "rec", value)
    File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 881, in update_control
    strip.zctrls[symbol].set_value(value, False)
    ~~~~~~~~~~~~^^^^^^^^
    KeyError: 'rec'

Configuration

Hardware

Raspberry Pi 4 Model B Rev 1.5
Audio: V5 ADAC
Display: MIPI DSI 800x480 (inverted)
Wiring: V5
I2C: MCP23017@0x20, MCP23017@0x21
Profile: v5

System

Debian GNU/Linux 12 (bookworm)
Build Date: 2024-02-01
Memory: 34% (1302M/3791M)
SD Card: 96% (26G/29G)
Temperature: 46.7ºC
Overclock: Maximum

MIDI & UI

Tuning: 440 Hz
Master Channel: Off
Preload Presets: Off
ZS3 (SubSnapShots): On
Power Save: 10 minutes
Audio Levels on Snapshots: On

Software

zyncoder: vangelis (1dd6f7a) 
zynthian-ui: vangelis (0fcc76d)
zynthian-sys: vangelis (f842566)
zynthian-data: vangelis (ddfa009)
zynthian-webconf: vangelis (bd99d05)
riban-bw commented 2 days ago

This is caused by update_control expecting every control to have a corresponding mixer zctrl but the mixer does not handle multitrack record flags. It can be resolved by adding this check to zynthian_gui_mixer::update_control:

        if symbol in strip.zctrls:
            strip.zctrls[symbol].set_value(value, False)

I will do this when the change freeze (due to code style refactor) is ended.

riban-bw commented 1 day ago

This is resolved by another change. Ready to depoy in next point release.