Browse Source

add test for audio region actions

cairo_optimizations
Alexandros Theodotou 3 years ago
parent
commit
968de39d52
Signed by: alex
GPG Key ID: 022EAE42313D70F3
  1. 3
      inc/audio/audio_region.h
  2. 5
      src/audio/audio_region.c
  3. 3
      src/audio/mixer.c
  4. 15
      src/gui/backend/piano_roll.c
  5. 25
      src/project.c
  6. 107
      tests/actions/arranger_selections.c
  7. 43
      tests/helpers/zrythm.h
  8. 10
      tests/meson.build
  9. BIN
      tests/test.mp3
  10. BIN
      tests/test.wav

3
inc/audio/audio_region.h

@ -51,7 +51,8 @@ typedef struct AudioClip AudioClip; @@ -51,7 +51,8 @@ typedef struct AudioClip AudioClip;
* audio on the pool and then pass the pool id here.
*
* @param pool_id The pool ID. This is used when
* creating clone regions (non-main).
* creating clone regions (non-main) and must be
* -1 when creating a new clip.
* @param filename Filename, if loading from
* file, otherwise NULL.
* @param frames Float array, if loading from

5
src/audio/audio_region.c

@ -35,8 +35,9 @@ @@ -35,8 +35,9 @@
* FIXME First create the
* audio on the pool and then pass the pool id here.
*
* @param pool_id The pool ID. This is used if not
* -1.
* @param pool_id The pool ID. This is used when
* creating clone regions (non-main) and must be
* -1 when creating a new clip.
* @param filename Filename, if loading from
* file, otherwise NULL.
* @param frames Float array, if loading from

3
src/audio/mixer.c

@ -61,6 +61,9 @@ void @@ -61,6 +61,9 @@ void
mixer_recalc_graph (
Mixer * mixer)
{
if (ZRYTHM_TESTING)
return;
Router * router = &mixer->router;
if (!router->graph)
{

15
src/gui/backend/piano_roll.c

@ -328,12 +328,15 @@ piano_roll_init (PianoRoll * self) @@ -328,12 +328,15 @@ piano_roll_init (PianoRoll * self)
self->midi_modifier = MIDI_MODIFIER_VELOCITY;
self->highlighting =
g_settings_get_enum (
S_UI, "piano-roll-highlight");
self->midi_modifier =
g_settings_get_enum (
S_UI, "piano-roll-midi-modifier");
if (!ZRYTHM_TESTING)
{
self->highlighting =
g_settings_get_enum (
S_UI, "piano-roll-highlight");
self->midi_modifier =
g_settings_get_enum (
S_UI, "piano-roll-midi-modifier");
}
init_descriptors (self);
}

25
src/project.c

@ -424,9 +424,12 @@ create_default (Project * self) @@ -424,9 +424,12 @@ create_default (Project * self)
g_atomic_int_set (&AUDIO_ENGINE->run, 1);
}
header_notebook_widget_set_subtitle (
MW_HEADER_NOTEBOOK,
PROJECT->title);
if (ZRYTHM_HAVE_UI)
{
header_notebook_widget_set_subtitle (
MW_HEADER_NOTEBOOK,
PROJECT->title);
}
}
/**
@ -997,16 +1000,22 @@ project_save ( @@ -997,16 +1000,22 @@ project_save (
}
else
{
zrythm_add_to_recent_projects (
ZRYTHM, project_file_path);
if (!ZRYTHM_TESTING)
{
zrythm_add_to_recent_projects (
ZRYTHM, project_file_path);
}
if (show_notification)
ui_show_notification (_("Project saved."));
}
g_free (project_file_path);
header_notebook_widget_set_subtitle (
MW_HEADER_NOTEBOOK,
PROJECT->title);
if (ZRYTHM_HAVE_UI)
{
header_notebook_widget_set_subtitle (
MW_HEADER_NOTEBOOK,
PROJECT->title);
}
g_free (dir);

107
tests/actions/arranger_selections.c

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
#include "actions/arranger_selections.h"
#include "actions/undoable_action.h"
#include "audio/audio_region.h"
#include "audio/automation_region.h"
#include "audio/chord_region.h"
#include "audio/master_track.h"
@ -50,11 +51,13 @@ @@ -50,11 +51,13 @@
#define MOVE_TICKS 400
#define TOTAL_TL_SELECTIONS 5
#define TOTAL_TL_SELECTIONS 6
#define MIDI_TRACK_NAME "Midi track"
#define AUDIO_TRACK_NAME "Audio track"
#define MIDI_REGION_LANE 2
#define AUDIO_REGION_LANE 3
Position p1, p2;
@ -148,7 +151,7 @@ bootstrap_timeline () @@ -148,7 +151,7 @@ bootstrap_timeline ()
(ArrangerSelections *) TL_SELECTIONS,
(ArrangerObject *) r);
/* add 2 chorsd to the region */
/* add 2 chords to the region */
ChordObject * c =
chord_object_new (&r->id, 0, 1);
chord_region_add_chord_object (
@ -193,6 +196,35 @@ bootstrap_timeline () @@ -193,6 +196,35 @@ bootstrap_timeline ()
(ArrangerObject *) s);
arranger_object_pos_setter (
(ArrangerObject *) s, &p1);
/* Create and add an audio region */
position_set_to_bar (&p1, 2);
track =
track_new (
TRACK_TYPE_AUDIO, TRACKLIST->num_tracks,
AUDIO_TRACK_NAME, 1);
tracklist_append_track (
TRACKLIST, track, F_NO_PUBLISH_EVENTS,
F_NO_RECALC_GRAPH);
char audio_file_path[2000];
sprintf (
audio_file_path, "%s%s%s",
TESTS_SRCDIR, G_DIR_SEPARATOR_S,
"test.wav");
r =
audio_region_new (
-1, audio_file_path, NULL, 0, 0,
&p1, track->pos, AUDIO_REGION_LANE, 0);
track_add_region (
track, r, NULL, AUDIO_REGION_LANE, 1, 0);
g_assert_cmpint (r->id.track_pos, ==, track->pos);
g_assert_cmpint (
r->id.lane_pos, ==, AUDIO_REGION_LANE);
g_assert_cmpint (
r->id.type, ==, REGION_TYPE_AUDIO);
arranger_selections_add_object (
(ArrangerSelections *) TL_SELECTIONS,
(ArrangerObject *) r);
}
/**
@ -209,7 +241,7 @@ check_timeline_objects_vs_original_state ( @@ -209,7 +241,7 @@ check_timeline_objects_vs_original_state (
if (check_selections)
{
g_assert_cmpint (
TL_SELECTIONS->num_regions, ==, 3);
TL_SELECTIONS->num_regions, ==, 4);
g_assert_cmpint (
TL_SELECTIONS->num_markers, ==, 1);
g_assert_cmpint (
@ -220,12 +252,18 @@ check_timeline_objects_vs_original_state ( @@ -220,12 +252,18 @@ check_timeline_objects_vs_original_state (
tracklist_find_track_by_name (
TRACKLIST, MIDI_TRACK_NAME);
g_assert_nonnull (midi_track);
Track * audio_track =
tracklist_find_track_by_name (
TRACKLIST, AUDIO_TRACK_NAME);
g_assert_nonnull (audio_track);
Position p1_before_move, p2_before_move;
p1_before_move = p1;
p2_before_move = p2;
position_add_ticks (&p1_before_move, - MOVE_TICKS);
position_add_ticks (&p2_before_move, - MOVE_TICKS);
position_add_ticks (
&p1_before_move, - MOVE_TICKS);
position_add_ticks (
&p2_before_move, - MOVE_TICKS);
/* check midi region */
g_assert_cmpint (
@ -245,13 +283,10 @@ check_timeline_objects_vs_original_state ( @@ -245,13 +283,10 @@ check_timeline_objects_vs_original_state (
g_assert_cmppos (&obj->pos, &p1);
g_assert_cmppos (&obj->end_pos, &p2);
}
ZRegion * r =
(ZRegion *) obj;
ZRegion * r = (ZRegion *) obj;
g_assert_cmpint (r->num_midi_notes, ==, 1);
MidiNote * mn =
r->midi_notes[0];
obj =
(ArrangerObject *) mn;
MidiNote * mn = r->midi_notes[0];
obj = (ArrangerObject *) mn;
g_assert_cmpuint (mn->val, ==, MN_VAL);
g_assert_cmpuint (mn->vel->vel, ==, MN_VEL);
g_assert_cmppos (&obj->pos, &p1);
@ -260,6 +295,23 @@ check_timeline_objects_vs_original_state ( @@ -260,6 +295,23 @@ check_timeline_objects_vs_original_state (
region_identifier_is_equal (
&mn->region_id, &r->id));
/* check audio region */
g_assert_cmpint (
audio_track->lanes[AUDIO_REGION_LANE]->
num_regions, ==, 1);
obj =
(ArrangerObject *)
audio_track->lanes[AUDIO_REGION_LANE]->
regions[0];
if (is_duplicate_action)
{
g_assert_cmppos (&obj->pos, &p1_before_move);
}
else
{
g_assert_cmppos (&obj->pos, &p1);
}
/* check automation region */
AutomationTracklist * atl =
track_get_automation_tracklist (P_MASTER_TRACK);
@ -349,12 +401,21 @@ check_timeline_objects_deleted () @@ -349,12 +401,21 @@ check_timeline_objects_deleted ()
tracklist_find_track_by_name (
TRACKLIST, MIDI_TRACK_NAME);
g_assert_nonnull (midi_track);
Track * audio_track =
tracklist_find_track_by_name (
TRACKLIST, AUDIO_TRACK_NAME);
g_assert_nonnull (audio_track);
/* check midi region */
g_assert_cmpint (
midi_track->lanes[MIDI_REGION_LANE]->
num_regions, ==, 0);
/* check audio region */
g_assert_cmpint (
audio_track->lanes[AUDIO_REGION_LANE]->
num_regions, ==, 0);
/* check automation region */
AutomationTracklist * atl =
track_get_automation_tracklist (P_MASTER_TRACK);
@ -502,6 +563,13 @@ check_after_move_timeline () @@ -502,6 +563,13 @@ check_after_move_timeline ()
region_identifier_is_equal (
&mn->region_id, &r->id));
/* check audio region */
obj =
(ArrangerObject *) TL_SELECTIONS->regions[3];
p1_after_move = p1;
position_add_ticks (&p1_after_move, MOVE_TICKS);
g_assert_cmppos (&obj->pos, &p1_after_move);
/* check automation region */
obj =
(ArrangerObject *) TL_SELECTIONS->regions[1];
@ -597,6 +665,10 @@ check_after_duplicate_timeline () @@ -597,6 +665,10 @@ check_after_duplicate_timeline ()
tracklist_find_track_by_name (
TRACKLIST, MIDI_TRACK_NAME);
g_assert_nonnull (midi_track);
Track * audio_track =
tracklist_find_track_by_name (
TRACKLIST, AUDIO_TRACK_NAME);
g_assert_nonnull (audio_track);
/* check midi region */
g_assert_cmpint (
@ -646,6 +718,19 @@ check_after_duplicate_timeline () @@ -646,6 +718,19 @@ check_after_duplicate_timeline ()
g_assert_cmppos (&obj->pos, &p1);
g_assert_cmppos (&obj->end_pos, &p2);
/* check audio region */
g_assert_cmpint (
audio_track->lanes[AUDIO_REGION_LANE]->
num_regions, ==, 2);
obj =
(ArrangerObject *)
audio_track->lanes[AUDIO_REGION_LANE]->
regions[0];
p1_before_move = p1;
position_add_ticks (
&p1_before_move, - MOVE_TICKS);
g_assert_cmppos (&obj->pos, &p1_before_move);
/* check automation region */
AutomationTracklist * atl =
track_get_automation_tracklist (P_MASTER_TRACK);

43
tests/helpers/zrythm.h

@ -84,45 +84,10 @@ test_helper_zrythm_init () @@ -84,45 +84,10 @@ test_helper_zrythm_init ()
ZRYTHM->testing = 1;
ZRYTHM->have_ui = 0;
PROJECT = calloc (1, sizeof (Project));
AUDIO_ENGINE->block_length = 256;
project_init_selections (PROJECT);
AUDIO_ENGINE->audio_backend =
AUDIO_BACKEND_DUMMY;
AUDIO_ENGINE->midi_backend =
MIDI_BACKEND_DUMMY;
engine_init (AUDIO_ENGINE, 0);
engine_update_frames_per_tick (
AUDIO_ENGINE, 4, 140, 44000);
undo_manager_init (&PROJECT->undo_manager);
/* init pinned tracks */
Track * track = chord_track_new (0);
tracklist_append_track (
TRACKLIST, track, F_NO_PUBLISH_EVENTS,
F_NO_RECALC_GRAPH);
track->pinned = 1;
TRACKLIST->chord_track = track;
track =
marker_track_default (1);
tracklist_append_track (
TRACKLIST, track, F_NO_PUBLISH_EVENTS,
F_NO_RECALC_GRAPH);
track->pinned = 1;
TRACKLIST->marker_track = track;
/* add master channel to mixer and tracklist */
track =
track_new (
TRACK_TYPE_MASTER, 2, "Master",
F_WITHOUT_LANE);
tracklist_append_track (
TRACKLIST, track, F_NO_PUBLISH_EVENTS,
F_NO_RECALC_GRAPH);
TRACKLIST->master_track = track;
tracklist_selections_add_track (
TRACKLIST_SELECTIONS, track, 0);
ZRYTHM->create_project_path =
g_dir_make_tmp (
"zrythm_test_project_XXXXXX", NULL);
project_load (NULL, 0);
}
/**

10
tests/meson.build

@ -27,6 +27,15 @@ if get_option ('enable_tests') @@ -27,6 +27,15 @@ if get_option ('enable_tests')
test_env.set ('G_DEBUG', 'gc-friendly')
test_env.set ('MALLOC_CHECK', '2')
test_cflags = [
'-DTESTS_SRCDIR="' +
meson.current_source_dir () +
'"',
'-DTESTS_BUILDDIR="' +
meson.current_build_dir () +
'"',
]
test_link_args = [
'-fPIC',
]
@ -64,6 +73,7 @@ if get_option ('enable_tests') @@ -64,6 +73,7 @@ if get_option ('enable_tests')
],
c_args : [
common_cflags,
test_cflags,
],
dependencies : [
zrythm_deps,

BIN
tests/test.mp3

Binary file not shown.

BIN
tests/test.wav

Binary file not shown.
Loading…
Cancel
Save