laamaa / m8c

Cross-platform M8 tracker headless client
Other
382 stars 81 forks source link

[Raspberry Pi] Crash of the gui when using the fm synth #24

Closed klingklangmatze closed 2 years ago

klingklangmatze commented 2 years ago

Thank you for this client!!. I have a problem when using the FM synths. As soon as I set complex waveforms, the gui disappears but the sound stays on. This happens particularly quickly when using noise. I can start the m8c again from the terminal, but after a few seconds it crashes again. Could it be because I am using an RPi4 instead of an RPi3b+?

laamaa commented 2 years ago

Hi,

Thanks! The problem sounds weird. Unfortunately I currently do not have a Raspberry Pi 4 that I could test with, but I couldn't replicate the problem at least with my laptop (so it would seem like a usb or other system resources related thing). Are you using the official power supply or at least something as powerful with a good power cable?

I'll test with a pi1 at some point if it happens with that.

klingklangmatze commented 2 years ago

Thank you for the feedback. Unfortunately, the error also occurs on a RPi3 B+ with a newly installed Raspberry Pi OS. I only use original RPi power supplies.

I have also tested different M8 firmware versions without success. As soon as the waveform of the FM synth becomes complex, the M8 interface closes to the Terminal, but the sound playback continues.

This happens... sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 338. sp: sp_nonblocking_read(0x4ed7e0, 0x4e52e8, 1024) called. sp: Reading up to 1024 bytes from port /dev/ttyACM0. sp: sp_nonblocking_read returning 0. INFO: Shutting down INFO: Disconnecting M8 sp: sp_blocking_write(0x4ed7e0, 0xbeb5f1dc, 1, 5) called. sp: Writing 1 bytes to port /dev/ttyACM0, timeout 5 ms. sp: sp_blocking_write returning 1. sp: sp_close(0x4ed7e0) called. sp: Closing port /dev/ttyACM0. sp: sp_close returning SP_OK. sp: sp_free_port(0x4ed7e0) called. sp: Freeing port structure. sp: sp_free_port returning.

laamaa commented 2 years ago

Hi,

I managed to reproduce the problem on my RPi1 system. It seems that the SDL2 library is sending SDL_Quit events with no clear reason when there's lots of stuff going on (it didn't seem to be an OOM issue or SIGINT/SIGTERM either, and signals are trapped outside SDL2 in main.c). Unfortunately since SDL2 uses this event also for legit window closing events (pressing the cross in a window title bar, pressing CMD+Q on a Mac, ALT+F4 on Windows etc.), I wouldn't want to change the code to ignore this event.

A workaround is to delete line 258 in input.c

https://github.com/laamaa/m8c/blob/85462edcb19db46832d364f328f8236f191c82e3/input.c#L258

this way SDL_Quit events are ignored.

-Jonne

klingklangmatze commented 2 years ago

Great, problem solved. Thank you very much!

laamaa commented 2 years ago

Thanks for reporting & confirming! I'll close the issue for now.