surge-synthesizer / surge

Synthesizer plug-in (previously released as Vember Audio Surge)
https://surge-synthesizer.github.io/
GNU General Public License v3.0
3.16k stars 399 forks source link

crash with Ableton Live track freeze #6588

Closed diemoschwarz closed 1 year ago

diemoschwarz commented 2 years ago

Bug Description: Surge XT as instrument on a MIDI track crashes Live 11 when doing "freeze track".

Surge XT Version

Computer Information (please complete the following!):

Additional Information: crash log excerpt:

Process:               Live [55950]
Path:                  /Applications/Ableton Live 11 Suite.app/Contents/MacOS/Live
Identifier:            com.ableton.live
Version:               11.0.12 [2021-11-04_b232c5df34] (11.0.12 [2021-11-04_b232c5df34])
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Live [55950]
User ID:               502

Date/Time:             2022-09-02 00:15:12.383 +0200
OS Version:            Mac OS X 10.14.6 (18G5033)
Report Version:        12
Bridge OS Version:     4.5 (17P5300)
Anonymous UUID:        D443A25F-1411-ED51-C682-69C022D6C765

Sleep/Wake UUID:       5824BE0F-B164-467D-95E3-347309B222E6

Time Awake Since Boot: 35000 seconds
Time Since Wake:       37 seconds

System Integrity Protection: disabled

Crashed Thread:        0  MainThread  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0xffffffff86660500
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [55950]

VM Regions Near 0xffffffff86660500:
--> shared memory          00007ffffff94000-00007ffffff95000 [    4K] r-x/r-x SM=SHM  

Thread 0 Crashed:: MainThread  Dispatch queue: com.apple.main-thread
0   org.surge-synth-team.surge-xt   0x0000000174f6ee4b SurgeStorage::note_to_pitch(float) + 139
1   org.surge-synth-team.surge-xt   0x000000017506cd65 FM2Oscillator::process_block(float, float, bool, bool, float) + 149
2   org.surge-synth-team.surge-xt   0x0000000174fc9833 SurgeVoice::process_block(QuadFilterChainState&, int) + 387
3   org.surge-synth-team.surge-xt   0x0000000174f9065f SurgeSynthesizer::process() + 2719
4   org.surge-synth-team.surge-xt   0x00000001748f36c5 SurgeSynthProcessor::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 1429
5   org.surge-synth-team.surge-xt   0x00000001748dbd51 JuceAU::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 145
6   org.surge-synth-team.surge-xt   0x00000001748d1966 JuceAU::Render(unsigned int&, AudioTimeStamp const&, unsigned int) + 1734
7   org.surge-synth-team.surge-xt   0x00000001748e0f92 AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 242
8   org.surge-synth-team.surge-xt   0x00000001748e0b42 AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 594
9   org.surge-synth-team.surge-xt   0x00000001748ccace AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 46
baconpaul commented 2 years ago

Thank you

note_to_pitch crash is interesting. May I just ask a couple of questions

1: Are you using any microtuning capabilityes/ MTS-ESP? Entonal studio? etc... Or a hand loaded SCL/KBM 2: Is the midi you are rendering in any way odd or extreme (black midi, notes outside 0..127; lots of channels)? 3: Anything unusual about your patch? Formula modulator or what not? 4: If the answer to 2 or 3 is yes, would you be willing to share the midi or patch (as a zip file here?)

I'll have to learn how to freeze a track in live 11 but I have a demo of it on my Mac so can give it a whirl but a few framing questions first would be great. And holiday weekend here so will be a few days before I look anyway.

Thanks!

diemoschwarz commented 2 years ago

Hi, thanks for the quick response!

  1. no microtuning, but MPE, so there might be some inadvertently bent pitches in there
  2. just ~5 fingers polyphony from Linnstrument jamming
  3. nope, FM based, MPE x, y mapped, but the crash happened with Roger Linn's MPE sounds, too
  4. here is the Live set anyway: untame FM.als.zip
baconpaul commented 2 years ago

Thanks. And only when you freeze right? The live performance was fine?

How odd. I wonder if freeze changes the way events are delivered. Will definitely take a look and have tagged the issue into our 1.1.2 release so we won't forget it (but I won't get to it next 48 hours most likely)

baconpaul commented 2 years ago
Screen Shot 2022-09-01 at 6 53 19 PM

Ahh bummer. With this version of live on ARM on osX 12.5.1 I can freeze both the tracks in your project without a crash.

11.0.2 is a very old live and they had some gnarly MPE bugs (including some we helped them fix that Surge tickled - but didn't crash). Is there any way you could upgrade your live version or are you stuck there?

diemoschwarz commented 2 years ago

yes, only when freezing (right click on the 2nd track -> freeze track), playing is fine and a lot of fun! I just verified: The crash only happens when there are 2 midi clips in the track, when starting the 2nd clip, since the wav for the 1st clip is always written.

Thanks for the tip with 11.1, will upgrade. Cheers and have a nice weekend!

baconpaul commented 2 years ago

OK! If the upgrade fixes it lets close this; if not lets compare other aspects of our system to see if we can find it! Thanks

diemoschwarz commented 2 years ago

Hi Paul, same crash with Live 11.1.1.
Here is the patch, just in case, and of course MPE has to be enabled in Surge (in Live it had to be enabled for the MIDI input device, but it seems to be stored with the track): untame FMPE 1.fxp.zip Thanks for checking, when you have the time, it is not at all urgent for me. Best!

full crash log zip

Process:               Live [74965]
Path:                  /Applications/Ableton Live 11 Suite.app/Contents/MacOS/Live
Identifier:            com.ableton.live
Version:               11.1.1 [2022-03-03_2dca2b8193] (11.1.1 [2022-03-03_2dca2b8193])
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Live [74965]
User ID:               502

Date/Time:             2022-09-02 10:29:14.895 +0200
OS Version:            Mac OS X 10.14.6 (18G5033)
Report Version:        12
Bridge OS Version:     4.5 (17P5300)
Anonymous UUID:        D443A25F-1411-ED51-C682-69C022D6C765

Sleep/Wake UUID:       04FBC9C4-E05E-4940-9CB0-C3255D96C52A

Time Awake Since Boot: 47000 seconds
Time Since Wake:       8800 seconds

System Integrity Protection: disabled

Crashed Thread:        0  MainThread  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0xffffffff78307500
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [74965]

VM Regions Near 0xffffffff78307500:
--> shared memory          00007ffffff94000-00007ffffff95000 [    4K] r-x/r-x SM=SHM  

Thread 0 Crashed:: MainThread  Dispatch queue: com.apple.main-thread
0   org.surge-synth-team.surge-xt   0x0000000173c0be4b SurgeStorage::note_to_pitch(float) + 139
1   org.surge-synth-team.surge-xt   0x0000000173d09d65 FM2Oscillator::process_block(float, float, bool, bool, float) + 149
2   org.surge-synth-team.surge-xt   0x0000000173c66833 SurgeVoice::process_block(QuadFilterChainState&, int) + 387
3   org.surge-synth-team.surge-xt   0x0000000173c2d65f SurgeSynthesizer::process() + 2719
4   org.surge-synth-team.surge-xt   0x00000001735906c5 SurgeSynthProcessor::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 1429
5   org.surge-synth-team.surge-xt   0x0000000173578d51 JuceAU::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 145
6   org.surge-synth-team.surge-xt   0x000000017356e966 JuceAU::Render(unsigned int&, AudioTimeStamp const&, unsigned int) + 1734
7   org.surge-synth-team.surge-xt   0x000000017357df92 AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 242
8   org.surge-synth-team.surge-xt   0x000000017357db42 AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 594
9   org.surge-synth-team.surge-xt   0x0000000173569ace AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 46
10  com.ableton.live                0x000000010979aa52 0x1071f8000 + 39463506
mkruselj commented 2 years ago

Thanks for the report! By the way it would be better to attach the crashlogs as txt files rather than inlining them, which makes reading the issue a scrolling chore. Thanks for understanding!

diemoschwarz commented 2 years ago

good point! I edited the logs to leave only the interesting stuff, and attached the full log (as zip, since GH is picky about file types, and with some effort, since the upload often fails).

mkruselj commented 2 years ago

Much obliged!

baconpaul commented 2 years ago

And yeah thanks for the report. Like I said we've tagged this into the 1.1.2 milestone so will definitely look at it in Sept! I wonder what it will turn out to be!!!

ghost commented 2 years ago

Can somebody tell me the exact steps to do in Ableton Live? I want to test it, I have version 11.2.5 (the very latest) on windows but I'm an Ableton beginner and don't know what to do exactly :)

baconpaul commented 2 years ago

I've been unable to reproduce this with the latest versions of live either

diemoschwarz commented 1 year ago

New evidence, I get a sure crash with this Live set and Surge patch, around measure 48. The MPE sequence has to be placed late in the arrangement (measure 32), if it starts at 0 it plays without crash. surge-mpe-crash.als.zip Clavinet MPE.fxp.zip Live 11.2.6, Surge 1.1.1, MacOS 10.14.6 Intel

Thread 16 Crashed:: com.apple.audio.IOThread.client
0   org.surge-synth-team.surge-xt   0x000000015e098f8e SurgeStorage::note_to_pitch_ignoring_tuning(float) + 126
1   org.surge-synth-team.surge-xt   0x000000015e1f3ec2 StringOscillator::configureLpAndHpFromTone(float) + 322
2   org.surge-synth-team.surge-xt   0x000000015e1f7063 void StringOscillator::process_block_internal<false, (StringOscillator::exciter_modes)0, 1>(float, float, bool, float) + 1619
3   org.surge-synth-team.surge-xt   0x000000015e0f3caa SurgeVoice::process_block(QuadFilterChainState&, int) + 1530
4   org.surge-synth-team.surge-xt   0x000000015e0ba65f SurgeSynthesizer::process() + 2719
5   org.surge-synth-team.surge-xt   0x000000015da1d6c5 SurgeSynthProcessor::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 1429
6   org.surge-synth-team.surge-xt   0x000000015da05d51 JuceAU::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 145
7   org.surge-synth-team.surge-xt   0x000000015d9fb966 JuceAU::Render(unsigned int&, AudioTimeStamp const&, unsigned int) + 1734
8   org.surge-synth-team.surge-xt   0x000000015da0af92 AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 242
9   org.surge-synth-team.surge-xt   0x000000015da0ab42 AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 594
10  org.surge-synth-team.surge-xt   0x000000015d9f6ace AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 46
diemoschwarz commented 1 year ago

just noticed that 1.1.2 is out, downloading now

diemoschwarz commented 1 year ago

nope, still crashing with 1.1.2! What's interesting is that one doesn't need to play the sequence from the start at 32, but anywhere from closely before 48 will crash there.

Thread 5 Crashed:: AudioCalc
0   org.surge-synth-team.surge-xt   0x00000001647cf9fe SurgeStorage::note_to_pitch_ignoring_tuning(float) + 126
1   org.surge-synth-team.surge-xt   0x0000000164931a22 StringOscillator::configureLpAndHpFromTone(float) + 322
2   org.surge-synth-team.surge-xt   0x0000000164934bc3 void StringOscillator::process_block_internal<false, (StringOscillator::exciter_modes)0, 1>(float, float, bool, float) + 1619
3   org.surge-synth-team.surge-xt   0x000000016482b67f SurgeVoice::process_block(QuadFilterChainState&, int) + 3135
4   org.surge-synth-team.surge-xt   0x00000001647f1152 SurgeSynthesizer::process() + 2914
5   org.surge-synth-team.surge-xt   0x0000000164149fc5 SurgeSynthProcessor::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 1429
6   org.surge-synth-team.surge-xt   0x00000001641325f1 JuceAU::processBlock(juce::AudioBuffer<float>&, juce::MidiBuffer&) + 145
7   org.surge-synth-team.surge-xt   0x0000000164128206 JuceAU::Render(unsigned int&, AudioTimeStamp const&, unsigned int) + 1734
8   org.surge-synth-team.surge-xt   0x0000000164137832 AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 242
9   org.surge-synth-team.surge-xt   0x00000001641373e2 AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 594
10  org.surge-synth-team.surge-xt   0x000000016412336e AUMethodRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 46
baconpaul commented 1 year ago

That’s a super interesting stack. I was seeing that in the rack modules if the initial attack was set up improperly but have never seen it in the vst. Thanks - I will take a look next cycle

baconpaul commented 1 year ago

I can't for the life of me reproduce this at head. So frustrating.

And looking at that stack the only case in which it would explode is if the note pitch went to NaN

I wonder if this is the same problem we fixed with william fields controller smoothing

I really don't want to check isnan on pitch there and note_to_pitch is appropriately bounded for finite numbers.

Gonna need to think a bit more. @diemoschwarz curious if the latest nightly actually exhibits the problem still?

diemoschwarz commented 1 year ago

I haven't been able to get it to crash with the nightly so far. Hope it stays this way! Cheers!

mkruselj commented 1 year ago

OK, we'll close this issue then! Feel free to reopen with new info if it reappears.