diff --git a/test_audio_routing.c b/test_audio_routing.c index 9fc8668..fe8e93e 100644 --- a/test_audio_routing.c +++ b/test_audio_routing.c @@ -330,11 +330,22 @@ static void test_basic_audio_routing(void) { clear_output_buffers(); - // Send sine wave to channel 0 - send_sine_wave(0, 440.0, 0.5, 500); - usleep(200000); // Wait for processing + // Step 1: Start recording on clip 0 (note 0 triggers clip 0) + send_midi_note(0, 100); + usleep(100000); + + // Step 2: Send audio to channel 0 while recording + send_sine_wave(0, 440.0, 0.5, 500); + usleep(200000); + + // Step 3: Stop recording (toggle to looping) + send_midi_note(0, 100); + usleep(100000); + + // Step 4: Clear output and check that looped audio appears + clear_output_buffers(); + usleep(300000); - // Check that audio appears on channel 0 output float rms_0 = get_channel_rms(0); float rms_1 = get_channel_rms(1); @@ -347,11 +358,19 @@ static void test_multi_channel_routing(void) { clear_output_buffers(); - // Send different frequencies to different channels - send_sine_wave(0, 440.0, 0.5, 300); - send_sine_wave(1, 880.0, 0.5, 300); - send_sine_wave(2, 1760.0, 0.5, 300); - usleep(200000); + // Record clips on channels 0, 1, 2 + for (int ch = 0; ch < 3; ch++) { + // Note ch triggers clip ch (since note % MAX_CLIPS = ch for ch < 512) + send_midi_note(ch, 100); + usleep(50000); + send_sine_wave(ch, 440.0 * (ch + 1), 0.5, 300); + usleep(50000); + send_midi_note(ch, 100); // Toggle to looping + usleep(50000); + } + + clear_output_buffers(); + usleep(300000); float rms[3]; for (int ch = 0; ch < 3; ch++) { @@ -369,21 +388,21 @@ static void test_midi_clip_trigger(void) { clear_output_buffers(); - // Send MIDI note to trigger clip recording - send_midi_note(60, 100); // Middle C, velocity 100 + // Send MIDI note to trigger clip recording (note 0 triggers clip 0) + send_midi_note(0, 100); usleep(100000); // Send audio to channel 0 while clip is recording send_sine_wave(0, 440.0, 0.5, 500); usleep(200000); - // Send another MIDI note to stop recording (toggle) - send_midi_note(60, 100); + // Send another MIDI note to stop recording (toggle to looping) + send_midi_note(0, 100); usleep(100000); - // Now the clip should be looping - send no audio input + // Now the clip should be looping - clear output and check clear_output_buffers(); - usleep(200000); + usleep(300000); // Check that audio is still coming out (from the looped clip) float rms = get_channel_rms(0); @@ -395,18 +414,18 @@ static void test_midi_scene_launch(void) { clear_output_buffers(); - // Record clips on multiple channels for scene 0 + // Record clips on channels 0-3 using notes 0-3 for (int ch = 0; ch < 4; ch++) { - send_midi_note(60 + ch, 100); // Start recording + send_midi_note(ch, 100); // Start recording usleep(50000); send_sine_wave(ch, 440.0 * (ch + 1), 0.3, 200); usleep(50000); - send_midi_note(60 + ch, 100); // Stop recording + send_midi_note(ch, 100); // Toggle to looping usleep(50000); } clear_output_buffers(); - usleep(200000); + usleep(300000); // All 4 channels should have audio from their looped clips for (int ch = 0; ch < 4; ch++) { @@ -422,9 +441,16 @@ static void test_channel_independence(void) { clear_output_buffers(); - // Send audio only to channel 0 + // Record on channel 0 only + send_midi_note(0, 100); + usleep(50000); send_sine_wave(0, 440.0, 0.8, 500); - usleep(200000); + usleep(50000); + send_midi_note(0, 100); // Toggle to looping + usleep(50000); + + clear_output_buffers(); + usleep(300000); float rms_0 = get_channel_rms(0); float rms_1 = get_channel_rms(1); @@ -438,12 +464,18 @@ static void test_channel_independence(void) { static void test_volume_control(void) { printf("\nTest: Volume Control\n"); - // Note: Volume control would need to be set via CLI commands - // For now, test that audio passes through at default volume clear_output_buffers(); + // Record on channel 0 + send_midi_note(0, 100); + usleep(50000); send_sine_wave(0, 440.0, 0.5, 500); - usleep(200000); + usleep(50000); + send_midi_note(0, 100); // Toggle to looping + usleep(50000); + + clear_output_buffers(); + usleep(300000); float rms = get_channel_rms(0); TEST("Audio passes through at default volume", rms > 0.01f);