View Issue Details

IDProjectCategoryView StatusLast Update
0010111ardourbugspublic2026-01-10 01:01
Reportertnaugle Assigned Topaul  
PrioritynormalSeveritycrashReproducibilityalways
Status resolvedResolutionfixed 
PlatformMicrosoftOSWindowsOS Version11
Product Version9.0-rc 
Summary0010111: Importing a MIDI file that only contains a Tempo map, crashes the program
DescriptionImporting a MIDI file that only contains a Tempo map, crashes the program
Steps To ReproduceNew session
import
select the attached midi file and click the "Use MIDI Tempo Map" check box
click the import button
boom
Additional Information** (ardour-9.0.rc1.8.exe:175552): WARNING **: 13:34:49.251: SMF warning: The track did not finish with the End of Track event.
[Thread 175552.0x2aabc exited with code 0]
[Thread 175552.0x2867c exited with code 0]
#0 0x00007ffbf6399483 in KERNELBASE!DebugBreak () from C:\WINDOWS\System32\KernelBase.dll
0000001 0x00007ffbf7e6f961 in msvcrt!_assert () from C:\WINDOWS\System32\msvcrt.dll
#2 0x00007ffa9131b80c in _assert (
    message=0x7ffa9132d910 <Temporal::ticks_per_beat+1496> "_tempos.empty() || _tempos.back().sclock() < tp.sclock()", file=0x7ffa9132d4fd <Temporal::ticks_per_beat+453> "../libs/temporal/tempo.cc",
    line=1577) from C:\Users\ToddNaugle\src\ardour\build\libs\temporal\temporal.dll
#3 0x00007ffa912e5f7e in Temporal::TempoMap::smf_add (this=0x3ef19690, tp=...)
    at ../libs/temporal/tempo.cc:1577
0000004 0x00007ffb09a14f16 in Evoral::SMF::tempo_map (this=0x14daa0, provided=@0x14d95f: false)
    at ../libs/evoral/SMF.cc:882
0000005 0x00007ff60ecde044 in Editor::import_smf_tempo_map (this=0x13c02dd0, smf=..., pos=...)
    at ../gtk2_ardour/editor_audio_import.cc:272
#6 0x00007ff60ecde450 in Editor::do_import (this=0x13c02dd0,
    paths=std::vector of length 1, capacity 1 = {...}, disposition=Editing::ImportDistinctFiles,
    mode=Editing::ImportAsTrack, quality=ARDOUR::SrcBest,
    midi_track_name_source=ARDOUR::SMFTrackNumber, smf_tempo_disposition=ARDOUR::SMFTempoUse,
    pos=..., instrument=std::shared_ptr<ARDOUR::PluginInfo> (use count 10, weak count 1) = {...},
    track=std::shared_ptr<ARDOUR::Track> (empty) = {...}, with_markers=false)
    at ../gtk2_ardour/editor_audio_import.cc:344
#7 0x00007ff60f80fbac in SoundFileOmega::do_something (this=0x3ec297c0, action=-5)
    at ../gtk2_ardour/sfdb_ui.cc:2265
0000008 0x00007ff60f81ad06 in sigc::bound_mem_functor1<void, SoundFileBrowser, int>::operator() (
    this=0x3e353450, _A_a1=@0x14e15c: -5)
    at C:/msys64/mingw64/include/sigc++-2.0/sigc++/functors/mem_fun.h:2066
0000009 0x00007ff60f819e2d in sigc::adaptor_functor<sigc::bound_mem_functor1<void, SoundFileBrowser, int> >::operator()<Gtk::ResponseType&> (this=0x3e353448, _A_arg1=@0x3e353470: Gtk::RESPONSE_OK)
    at C:/msys64/mingw64/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
--Type <RET> for more, q to quit, c to continue without paging--
0000010 0x00007ff60f818e62 in sigc::bind_functor<-1, sigc::bound_mem_functor1<void, SoundFileBrowser, int>, Gtk::ResponseType, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator() (
    this=0x3e353440) at C:/msys64/mingw64/include/sigc++-2.0/sigc++/adaptors/bind.h:1124
0000011 0x00007ff60f817494 in sigc::internal::slot_call0<sigc::bind_functor<-1, sigc::bound_mem_functor1<void, SoundFileBrowser, int>, Gtk::ResponseType, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, void>::call_it (rep=0x3e353410)
    at C:/msys64/mingw64/include/sigc++-2.0/sigc++/functors/slot.h:136
0000012 0x00007ffb823c352c in ?? () from C:\msys64\mingw64\bin\libglibmm-2.4-1.dll
0000013 0x00007ffb731a9db6 in g_cclosure_marshal_VOID__VOID (closure=0x3e3535e0,
    return_value=<optimized out>, n_param_values=<optimized out>, param_values=<optimized out>,
    invocation_hint=0x14e3e0, marshal_data=<optimized out>) at ../glib-2.86.3/gobject/gmarshal.c:117
0000014 0x00007ffb731a80e2 in g_closure_invoke (closure=0x3e3535e0, return_value=0x0,
    n_param_values=n_param_values@entry=1, param_values=param_values@entry=0x14e4d0,
    invocation_hint=invocation_hint@entry=0x14e3e0) at ../glib-2.86.3/gobject/gclosure.c:916
#15 0x00007ffb731b970c in signal_emit_unlocked_R (node=node@entry=0x14e540, detail=<optimized out>,
    detail@entry=0, instance=instance@entry=0x3ec61b20, emission_return=emission_return@entry=0x0,
    instance_and_params=<optimized out>) at ../glib-2.86.3/gobject/gsignal.c:3976
0000016 0x00007ffb731ba47b in signal_emit_valist_unlocked (instance=instance@entry=0x3ec61b20,
    signal_id=signal_id@entry=128, detail=detail@entry=0, var_args=<optimized out>,
    var_args@entry=0x14e708 "") at ../glib-2.86.3/gobject/gsignal.c:3535
#17 0x00007ffb731be12d in g_signal_emit_valist (instance=0x3ec61b20, signal_id=128, detail=0,
    var_args=var_args@entry=0x14e708 "") at ../glib-2.86.3/gobject/gsignal.c:3278
0000018 0x00007ffb731be16e in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>,
    detail=<optimized out>) at ../glib-2.86.3/gobject/gsignal.c:3598
0000019 0x00007ffa618e7173 in gtk_button_clicked (button=0x3ec61b20) at ../libs/tk/ytk/gtkbutton.c:1115
0000020 0x00007ffa618e8721 in gtk_real_button_released (button=0x3ec61b20)
    at ../libs/tk/ytk/gtkbutton.c:1712
0000021 0x00007ffa62658f12 in Gtk::Button_Class::released_callback (self=0x3ec61b20)
    at ../libs/tk/ytkmm/button.cc:238
0000022 0x00007ffb731a9db6 in g_cclosure_marshal_VOID__VOID (closure=0x393e7d0,
    return_value=<optimized out>, n_param_values=<optimized out>, param_values=<optimized out>,
    invocation_hint=0x14e9d0, marshal_data=<optimized out>) at ../glib-2.86.3/gobject/gmarshal.c:117
0000023 0x00007ffb731a67a4 in g_type_class_meta_marshal (closure=0x393e7d0, return_value=0x0,
    n_param_values=1, param_values=0x14eac0, invocation_hint=0x14e9d0, marshal_data=0x358)
    at ../glib-2.86.3/gobject/gclosure.c:1118
#24 0x00007ffb731a80e2 in g_closure_invoke (closure=closure@entry=0x393e7d0, return_value=0x0,
    n_param_values=n_param_values@entry=1, param_values=param_values@entry=0x14eac0,
    invocation_hint=invocation_hint@entry=0x14e9d0) at ../glib-2.86.3/gobject/gclosure.c:916
0000025 0x00007ffb731b9554 in signal_emit_unlocked_R (node=node@entry=0x14eb30, detail=<optimized out>,
    detail@entry=0, instance=instance@entry=0x3ec61b20, emission_return=emission_return@entry=0x0,
    instance_and_params=<optimized out>) at ../glib-2.86.3/gobject/gsignal.c:3736
0000026 0x00007ffb731ba47b in signal_emit_valist_unlocked (instance=instance@entry=0x3ec61b20,
    signal_id=signal_id@entry=127, detail=detail@entry=0, var_args=<optimized out>,
    var_args@entry=0x14ecf8 "") at ../glib-2.86.3/gobject/gsignal.c:3535
0000027 0x00007ffb731be12d in g_signal_emit_valist (instance=0x3ec61b20, signal_id=127, detail=0,
    var_args=var_args@entry=0x14ecf8 "") at ../glib-2.86.3/gobject/gsignal.c:3278
0000028 0x00007ffb731be16e in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>,
    detail=<optimized out>) at ../glib-2.86.3/gobject/gsignal.c:3598
0000029 0x00007ffa618e70ba in gtk_button_released (button=0x3ec61b20) at ../libs/tk/ytk/gtkbutton.c:1107
0000030 0x00007ffa618e8468 in gtk_button_button_release (widget=0x3ec61b20, event=0x3e380120)
    at ../libs/tk/ytk/gtkbutton.c:1604
0000031 0x00007ffa62740c2f in Gtk::Widget_Class::button_release_event_callback (self=0x3ec61b20,
    p0=0x3e380120) at ../libs/tk/ytkmm/widget.cc:4345
0000032 0x00007ffa619d6fc5 in _gtk_marshal_BOOLEAN__BOXED (closure=0x38b73e0, return_value=0x14f010,
    n_param_values=2, param_values=0x14f0e0, invocation_hint=0x14eff0,
    marshal_data=0x7ffa62740b3e <Gtk::Widget_Class::button_release_event_callback(_GtkWidget*, _GdkEventButton*)>) at ../libs/tk/ytk/gtkmarshalers.c:84
0000033 0x00007ffb731a67a4 in g_type_class_meta_marshal (closure=0x38b73e0, return_value=0x14f010,
    n_param_values=2, param_values=0x14f0e0, invocation_hint=0x14eff0, marshal_data=0x160)
    at ../glib-2.86.3/gobject/gclosure.c:1118
0000034 0x00007ffb731a80e2 in g_closure_invoke (closure=closure@entry=0x38b73e0, return_value=0x14f010,
    n_param_values=n_param_values@entry=2, param_values=param_values@entry=0x14f0e0,
    invocation_hint=invocation_hint@entry=0x14eff0) at ../glib-2.86.3/gobject/gclosure.c:916
0000035 0x00007ffb731b9637 in signal_emit_unlocked_R (node=node@entry=0x14f160, detail=<optimized out>,
    detail@entry=0, instance=instance@entry=0x3ec61b20,
    emission_return=emission_return@entry=0x14f1e0, instance_and_params=<optimized out>)
    at ../glib-2.86.3/gobject/gsignal.c:3943
0000036 0x00007ffb731ba402 in signal_emit_valist_unlocked (instance=instance@entry=0x3ec61b20,
    signal_id=signal_id@entry=36, detail=detail@entry=0, var_args=<optimized out>,
    var_args@entry=0x14f328 " \0018>") at ../glib-2.86.3/gobject/gsignal.c:3548
0000037 0x00007ffb731be12d in g_signal_emit_valist (instance=0x3ec61b20, signal_id=36, detail=0,
    var_args=var_args@entry=0x14f328 " \0018>") at ../glib-2.86.3/gobject/gsignal.c:3278
0000038 0x00007ffb731be16e in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>,
    detail=<optimized out>) at ../glib-2.86.3/gobject/gsignal.c:3598
0000039 0x00007ffa61b6f801 in gtk_widget_event_internal (widget=0x3ec61b20, event=0x3e380120)
    at ../libs/tk/ytk/gtkwidget.c:5058
0000040 0x00007ffa61b6f0dc in gtk_widget_event (widget=0x3ec61b20, event=0x3e380120)
    at ../libs/tk/ytk/gtkwidget.c:4846
0000041 0x00007ffa619d4cd9 in gtk_propagate_event (widget=0x3ec61b20, event=0x3e380120)
    at ../libs/tk/ytk/gtkmain.c:2457
0000042 0x00007ffa619d35a5 in gtk_main_do_event (event=0x3e380120) at ../libs/tk/ytk/gtkmain.c:1646
0000043 0x00007ffae6e1dfd0 in gdk_event_dispatch (source=0x3c084c0, callback=0x0, user_data=0x0)
    at ../libs/tk/ydk/win32/gdkevents-win32.c:3990
0000044 0x00007ffb0a1cb453 in g_main_dispatch (context=0x310e090) at ../glib-2.86.3/glib/gmain.c:3565
0000045 0x00007ffb0a1cb51e in g_main_context_dispatch_unlocked (context=context@entry=0x310e090)
    at ../glib-2.86.3/glib/gmain.c:4425
0000046 0x00007ffb0a1cdc24 in g_main_context_iterate_unlocked (context=0x310e090, block=block@entry=1,
    dispatch=dispatch@entry=1, self=self@entry=0xf8b2d20) at ../glib-2.86.3/glib/gmain.c:4490
0000047 0x00007ffb0a1ce47f in g_main_loop_run (loop=0xdbc4550) at ../glib-2.86.3/glib/gmain.c:4695
0000048 0x00007ffa619d2961 in gtk_main () at ../libs/tk/ytk/gtkmain.c:1213
0000049 0x00007ffa626b209b in Gtk::Main::run_impl (this=0x33337f0) at ../libs/tk/ytkmm/main.cc:537
0000050 0x00007ffa626b1e97 in Gtk::Main::run () at ../libs/tk/ytkmm/main.cc:480
0000051 0x00007ffa65726357 in Gtkmm2ext::UI::run (this=0x31b5740, old_receiver=...)
    at ../libs/gtkmm2ext/gtk_ui.cc:319
0000052 0x00007ff60f137844 in main (argc=1, argv=0x22a30f0) at ../gtk2_ardour/main.cc:467
TagsNo tags attached.

Activities

tnaugle

2026-01-09 20:01

developer  

paul

2026-01-10 00:36

administrator   ~0029700

This file is illegal ... the Time Signature SMF events have zero for both the number of MIDI clocks per metronome tick and the number of 32nd notes per quarter note.

The specification does not mention the possibility of zero for either value.

I will fix things so that we do not crash, but the tempo map is not suitable for import. What is its origin?

paul

2026-01-10 01:01

administrator   ~0029701

fixed in commit c207080229 with successful import (used the meter denominator if the 32nds-per-quarter note field is zero.

Issue History

Date Modified Username Field Change
2026-01-09 20:01 tnaugle New Issue
2026-01-09 20:01 tnaugle File Added: Virginia Plain - Tempo Map.mid
2026-01-10 00:36 paul Note Added: 0029700
2026-01-10 01:01 paul Assigned To => paul
2026-01-10 01:01 paul Status new => resolved
2026-01-10 01:01 paul Resolution open => fixed
2026-01-10 01:01 paul Note Added: 0029701