audacity / audacity

Audio Editor
https://wiki.audacityteam.org/wiki/For_Developers
Other
12.67k stars 2.27k forks source link

Effect: Normalize make audacity hangs on Linux #7691

Open ycollet opened 2 weeks ago

ycollet commented 2 weeks ago

Bug description

I recorded an audio part and then I try to Volume->Normalize the part and audacity hangs

Steps to reproduce

Open a wav file Select the track Volume->Normalize->Validate

Expected behavior

Volume normalized audio

Actual behavior

Crash

Audacity Version

Audacity 3.7.x

Operating system

Linux

Additional context

I use Fedora 41 with audacity from rpmfusion. Here is the stack trace:

(gdb) where
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007ffff5880793 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78
#2  0x00007ffff5827d1e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x00007ffff580f942 in __GI_abort () at abort.c:79
#4  0x00007ffff580f85e in __assert_fail_base
    (fmt=0x7fffe330af75 "%s%s%s :%u : %s%s l'assertion « %s » a échoué.\n%n", assertion=assertion@entry=0x7ffff6d92197 "mClip.StrongInvariant()", file=file@entry=0x7ffff6d8d0f8 "/builddir/build/BUILD/audacity-freeworld-3.7.0-build/audacity-sources-3.7.0/libraries/lib-wave-track/WaveClip.cpp", line=line@entry=2047, function=function@entry=0x7ffff6d8e798 "WaveClip::StrongInvariantScope::~StrongInvariantScope()") at assert.c:94
#5  0x00007ffff581fe47 in __assert_fail
    (assertion=0x7ffff6d92197 "mClip.StrongInvariant()", file=0x7ffff6d8d0f8 "/builddir/build/BUILD/audacity-freeworld-3.7.0-build/audacity-sources-3.7.0/libraries/lib-wave-track/WaveClip.cpp", line=2047, function=0x7ffff6d8e798 "WaveClip::StrongInvariantScope::~StrongInvariantScope()") at assert.c:103
#6  0x00007ffff6d3ebb5 in WaveClip::StrongInvariantScope::~StrongInvariantScope() () at /usr/bin/../lib64/audacity/lib-wave-track.so
#7  0x00007ffff6d3b20d in WaveClip::SetSamples(unsigned long, char const*, sampleFormat, sampleCount, unsigned long, sampleFormat) () at /usr/bin/../lib64/audacity/lib-wave-track.so
#8  0x00007ffff6d3b2a9 in WaveClipChannel::SetSamples(char const*, sampleFormat, sampleCount, unsigned long, sampleFormat) () at /usr/bin/../lib64/audacity/lib-wave-track.so
#9  0x00007ffff6d576ff in WaveChannel::Set(char const*, sampleFormat, sampleCount, unsigned long, sampleFormat) () at /usr/bin/../lib64/audacity/lib-wave-track.so
#10 0x00007ffff7d584af in NormalizeBase::ProcessOne(WaveChannel&, TranslatableString const&, double&, float) () at /usr/bin/../lib64/audacity/lib-builtin-effects.so
#11 0x00007ffff7d594c0 in NormalizeBase::Process(EffectInstance&, EffectSettings&) () at /usr/bin/../lib64/audacity/lib-builtin-effects.so
#12 0x00007ffff6ee4173 in EffectBase::DoEffect(EffectSettings&, std::function<std::optional<std::shared_ptr<EffectInstanceEx> > (EffectSettings&)> const&, double, TrackList*, WaveTrackFactory*, NotifyingSelectedRegion&, unsigned int, std::shared_ptr<EffectSettingsAccess> const&) () at /usr/bin/../lib64/audacity/lib-effects.so
#13 0x00007ffff7e4a790 in AudacityApplicationLogic::DoEffect(wxString const&, AudacityProject&, unsigned int, std::function<bool (Effect&, std::shared_ptr<EffectInstance>&, SimpleEffectSettingsAccess&)>, std::function<void ()>, std::function<void ()>) () at /usr/bin/../lib64/audacity/lib-audacity-application-logic.so
#14 0x00005555557044b3 in EffectUI::DoEffect(wxString const&, AudacityProject&, unsigned int) ()
#15 0x00007ffff77ecc09 in CommandManager::ExecuteCommand(CommandContext const&, wxEvent const*, CommandManager::CommandListEntry const&) () at /usr/bin/../lib64/audacity/lib-menus.so
#16 0x00007ffff77f678c in CommandManager::HandleCommandEntry(CommandManager::CommandListEntry const*, std::bitset<64ul>, bool, wxEvent const*, CommandContext const*) ()
    at /usr/bin/../lib64/audacity/lib-menus.so
#17 0x000055555574d95b in ProjectWindow::OnMenu(wxCommandEvent&) ()
#18 0x00007ffff694d07f in wxEvtHandler::ProcessEventIfMatchesId (entry=<optimized out>, handler=handler@entry=0x555556ca3d10, event=...) at ../src/common/event.cpp:1482
#19 0x00007ffff694d753 in wxEventHashTable::HandleEvent (this=<optimized out>, event=..., self=self@entry=0x555556ca3d10) at ../src/common/event.cpp:1087
#20 0x00007ffff694ef56 in wxEvtHandler::TryHereOnly (this=0x555556ca3d10, event=...) at ../src/common/event.cpp:1679
#21 0x00007ffff694d24e in wxEvtHandler::DoTryChain (this=<optimized out>, event=...) at ../src/common/event.cpp:1644
#22 0x00007ffff694efff in wxEvtHandler::ProcessEventLocally (this=<optimized out>, event=<optimized out>) at ../src/common/event.cpp:1612
#23 0x00007ffff694f0fa in wxEvtHandler::ProcessEvent (this=0x55555d148800, event=...) at ../src/common/event.cpp:1585
#24 0x00007ffff62a9c4f in wxWindowBase::TryAfter (this=0x555556b622b0, event=...) at ../include/wx/window.h:862
#25 0x00007ffff69500d2 in wxEvtHandler::SafelyProcessEvent (this=<optimized out>, event=<optimized out>) at ../src/common/event.cpp:1701
#26 0x00007ffff6261c6c in wxMenuBase::DoProcessEvent (menu=0x0, event=..., win=0x555556ca3d10) at ../src/common/menucmn.cpp:720
#27 0x00007ffff6261d8a in wxMenuBase::SendEvent (this=0x55555d898db0, itemid=<optimized out>, checked=-1) at ../src/common/menucmn.cpp:683
#28 0x00007ffff6149b7a in menuitem_activate (item=0x55555d951a20) at ../src/gtk/menu.cpp:578
#29 menuitem_activate (item=0x55555d951a20) at ../src/gtk/menu.cpp:544
#30 0x00007ffff78387da in g_closure_invoke (closure=0x55555d952820, return_value=0x0, n_param_values=1, param_values=0x7fffffffcd90, invocation_hint=0x7fffffffcce0) at ../gobject/gclosure.c:833
#31 0x00007ffff78688f3 in signal_emit_unlocked_R.isra.0
    (node=node@entry=0x7fffffffce80, detail=detail@entry=0, instance=instance@entry=0x55555d951c50, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcd90)
    at ../gobject/gsignal.c:3887
#32 0x00007ffff78593e9 in signal_emit_valist_unlocked (instance=instance@entry=0x55555d951c50, signal_id=signal_id@entry=126, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffcff0)
    at ../gobject/gsignal.c:3519
#33 0x00007ffff7859671 in g_signal_emit_valist (instance=0x55555d951c50, signal_id=126, detail=0, var_args=var_args@entry=0x7fffffffcff0) at ../gobject/gsignal.c:3262
#34 0x00007ffff7859733 in g_signal_emit (instance=instance@entry=0x55555d951c50, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3582
#35 0x00007ffff734ae6c in gtk_widget_activate (widget=0x55555d951c50) at ../gtk/gtkwidget.c:7845
#36 0x00007ffff720bb56 in gtk_menu_shell_activate_item (menu_shell=0x55555d89dc00, menu_item=0x55555d951c50, force_deactivate=<optimized out>) at ../gtk/gtkmenushell.c:1375
#37 0x00007ffff720bf94 in gtk_menu_shell_button_release (widget=0x55555d89dc00, event=<optimized out>) at ../gtk/gtkmenushell.c:791
#42 0x00007ffff7859733 in <emit signal '???' on instance ???> (instance=instance@entry=0x55555d89dc00, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3582
    #38 0x00007ffff70888d9 in _gtk_marshal_BOOLEAN__BOXEDv
    (closure=0x5555561ad0c0, return_value=0x7fffffffd380, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x5555561b2990)
    at gtk/gtkmarshalers.c:130
--Type <RET> for more, q to quit, c to continue without paging--
    #39 0x00007ffff785955c in _g_closure_invoke_va (closure=0x5555561ad0c0, return_value=0x7fffffffd380, instance=0x55555d89dc00, args=0x7fffffffd470, n_params=1, param_types=0x5555561b2990)
    at ../gobject/gclosure.c:896
    #40 signal_emit_valist_unlocked (instance=instance@entry=0x55555d89dc00, signal_id=signal_id@entry=79, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd470) at ../gobject/gsignal.c:3423
    #41 0x00007ffff7859671 in g_signal_emit_valist (instance=0x55555d89dc00, signal_id=79, detail=0, var_args=var_args@entry=0x7fffffffd470) at ../gobject/gsignal.c:3262
#43 0x00007ffff735fe3c in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x55555d89dc00, event=0x55555d912ca0) at ../gtk/gtkwidget.c:7812
#44 0x00007ffff71f4328 in propagate_event_up (widget=0x55555d89dc00, event=<optimized out>, topmost=<optimized out>) at ../gtk/gtkmain.c:2588
#45 propagate_event (widget=<optimized out>, event=0x55555d912ca0, captured=<optimized out>, topmost=0x0) at ../gtk/gtkmain.c:2691
#46 0x00007ffff71f50aa in gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1921
#47 gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1691
#48 0x00007ffff78be807 in _gdk_event_emit (event=0x55555d912ca0) at ../gdk/gdkevents.c:73
#49 _gdk_event_emit (event=0x55555d912ca0) at ../gdk/gdkevents.c:67
#50 0x00007ffff78f82ae in gdk_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>) at ../gdk/wayland/gdkeventsource.c:124
#51 0x00007ffff514e28c in g_main_dispatch (context=0x555556150c90) at ../glib/gmain.c:3357
#52 g_main_context_dispatch_unlocked (context=0x555556150c90) at ../glib/gmain.c:4208
#53 0x00007ffff51ae7b8 in g_main_context_iterate_unlocked.isra.0 (context=0x555556150c90, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4273
#54 0x00007ffff5154377 in g_main_loop_run (loop=0x55555e5d7160) at ../glib/gmain.c:4475
#55 0x00007ffff71efb35 in gtk_main () at ../gtk/gtkmain.c:1329
#56 0x00007ffff60c63c5 in wxGUIEventLoop::DoRun (this=0x55555621f0d0) at ../src/gtk/evtloop.cpp:61
#57 0x00007ffff685ee8a in wxEventLoopBase::Run (this=0x55555621f0d0) at ../src/common/evtloopcmn.cpp:87
#58 0x00007ffff683a4fd in wxAppConsoleBase::MainLoop (this=0x55555613a860) at ../src/common/appbase.cpp:381
#59 0x00005555556906fd in AudacityApp::OnRun() ()
#60 0x00007ffff689bc90 in wxEntry (argc=<optimized out>, argv=<optimized out>) at ../src/common/init.cpp:497
#61 0x0000555555603fc5 in main ()
ycollet commented 2 weeks ago

A priori, to reproduce this bug, you must have 2 clips on a track. I selected all the clips and then tried to normalize the volume of the track.