GList* ags_copy_pattern_channel_template_find_source_and_destination(GList *recall, AgsChannel *destination, AgsChannel *source) { AgsCopyPatternChannel *copy_pattern_channel; while(recall != NULL){ recall = ags_recall_template_find_type(recall, AGS_TYPE_COPY_PATTERN_CHANNEL); if(recall == NULL) break; copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(recall->data); if(AGS_RECALL_CHANNEL(copy_pattern_channel)->destination == destination && AGS_RECALL_CHANNEL(copy_pattern_channel)->source == source) break; recall = recall->next; } return(recall); }
void ags_panel_input_line_map_recall(AgsLine *line, guint output_pad_start) { AgsPanel *panel; AgsPanelInputLine *panel_input_line; AgsAudio *audio; AgsChannel *source; AgsChannel *current; AgsPlayChannel *play_channel; AgsPlayChannelRunMaster *play_channel_run; GList *list; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } panel_input_line = AGS_PANEL_INPUT_LINE(line); audio = AGS_AUDIO(line->channel->audio); panel = AGS_PANEL(audio->machine_widget); source = line->channel; /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, "ags-play-master\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT, AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); /* set audio channel */ list = source->play; while((list = ags_recall_template_find_type(list, AGS_TYPE_PLAY_CHANNEL)) != NULL){ GValue audio_channel_value = {0,}; play_channel = AGS_PLAY_CHANNEL(list->data); g_value_init(&audio_channel_value, G_TYPE_UINT64); g_value_set_uint64(&audio_channel_value, source->audio_channel); ags_port_safe_write(play_channel->audio_channel, &audio_channel_value); list = list->next; } /* call parent */ AGS_LINE_CLASS(ags_panel_input_line_parent_class)->map_recall(line, output_pad_start); }
void ags_osc_renew_controller_test_set_data() { AgsChannel *channel; AgsOscConnection *osc_connection; AgsOscRenewController *osc_renew_controller; GList *osc_response; unsigned char *message; unsigned char *magnitude_message; gdouble *magnitude_buffer; guint magnitude_message_size; guint cache_buffer_size; guint length; guint padding; guint i, j; gboolean success; GValue value = {0,}; static const unsigned char *mute_message = "/renew\x00\x00,sf\x00/AgsSoundProvider/AgsAudio[\"test-panel\"]/AgsInput[0-1]/AgsMuteChannel[0]/AgsPort[\"./muted[0]\"]:value\x00\x00\x00\x00\x00\x00"; static const unsigned char *magnitude_path = "/AgsSoundProvider/AgsAudio[\"test-spectrometer\"]/AgsInput[0-1]/AgsAnalyseChannel[0]/AgsPort[\"./magnitude-buffer[0]\"]:value"; static const guint mute_message_size = 120; osc_connection = ags_osc_connection_new(NULL); osc_renew_controller = ags_osc_renew_controller_new(); /* panel */ message = (unsigned char *) malloc(mute_message_size * sizeof(unsigned char)); memcpy(message, mute_message, mute_message_size * sizeof(unsigned char)); ags_osc_buffer_util_put_float(message + mute_message_size - 4, 1.0); g_value_init(&value, G_TYPE_FLOAT); g_object_get(panel, "input", &channel, NULL); success = TRUE; for(i = 0; i < 2 && success; i++){ GList *start_play, *play; GList *start_port, *port; g_object_get(channel, "play", &start_play, NULL); play = ags_recall_template_find_type(start_play, AGS_TYPE_MUTE_CHANNEL); g_object_get(play->data, "port", &start_port, NULL); port = ags_port_find_specifier(start_port, "./muted[0]"); ags_port_safe_read(port->data, &value); if(g_value_get_float(&value) == 1.0){ success = FALSE; break; } g_object_get(channel, "next", &channel, NULL); } CU_ASSERT(success); osc_response = ags_osc_renew_controller_set_data(osc_renew_controller, osc_connection, message, mute_message_size); CU_ASSERT(osc_response != NULL); g_object_get(panel, "input", &channel, NULL); success = TRUE; for(i = 0; i < 2 && success; i++){ GList *start_play, *play; GList *start_port, *port; g_object_get(channel, "play", &start_play, NULL); play = ags_recall_template_find_type(start_play, AGS_TYPE_MUTE_CHANNEL); g_object_get(play->data, "port", &start_port, NULL); port = ags_port_find_specifier(start_port, "./muted[0]"); ags_port_safe_read(port->data, &value); if(g_value_get_float(&value) != 1.0){ success = FALSE; break; } g_object_get(channel, "next", &channel, NULL); } CU_ASSERT(success); /* spectrometer */ magnitude_message = (unsigned char *) malloc(AGS_OSC_RESPONSE_DEFAULT_CHUNK_SIZE * sizeof(unsigned char)); cache_buffer_size = ags_soundcard_helper_config_get_buffer_size(ags_config_get_instance()) / 2; memcpy(magnitude_message, "/renew\x00\x00,s[", 11 * sizeof(unsigned char)); magnitude_message_size = 11; for(i = 0; i < cache_buffer_size; i++){ magnitude_message[11 + i] = 'd'; } magnitude_message[11 + i] = ']'; magnitude_message_size += (cache_buffer_size + 1); padding = (4 * (guint) ceil((cache_buffer_size + 5) / 4.0)) - (cache_buffer_size + 4); for(i = 0; i < padding; i++){ magnitude_message[magnitude_message_size + i] = '\x00'; } magnitude_message_size += padding; length = strlen(magnitude_path); memcpy(magnitude_message + magnitude_message_size, magnitude_path, (length) * sizeof(unsigned char)); padding = (4 * (guint) ceil((length + 1) / 4.0)) - length; magnitude_message_size += length; for(i = 0; i < padding; i++){ magnitude_message[magnitude_message_size + i] = '\x00'; } magnitude_message_size += padding; for(i = 0; i < cache_buffer_size; i++){ ags_osc_buffer_util_put_double(magnitude_message + magnitude_message_size + (i * 8), 4.0); } magnitude_message_size += (cache_buffer_size * 8); g_value_unset(&value); g_value_init(&value, G_TYPE_POINTER); magnitude_buffer = (gdouble *) malloc(cache_buffer_size * sizeof(gdouble)); g_value_set_pointer(&value, magnitude_buffer); g_object_get(spectrometer, "input", &channel, NULL); success = TRUE; for(i = 0; i < 2 && success; i++){ GList *start_play, *play; GList *start_port, *port; g_object_get(channel, "play", &start_play, NULL); play = ags_recall_template_find_type(start_play, AGS_TYPE_ANALYSE_CHANNEL); g_object_get(play->data, "port", &start_port, NULL); port = ags_port_find_specifier(start_port, "./magnitude-buffer[0]"); ags_port_safe_read(port->data, &value); for(j = 0; j < cache_buffer_size; j++){ if(magnitude_buffer[j] != 0.0){ success = FALSE; break; } } g_object_get(channel, "next", &channel, NULL); } CU_ASSERT(success); osc_response = ags_osc_renew_controller_set_data(osc_renew_controller, osc_connection, magnitude_message, magnitude_message_size); g_object_get(spectrometer, "input", &channel, NULL); success = TRUE; for(i = 0; i < 2 && success; i++){ GList *start_play, *play; GList *start_port, *port; g_object_get(channel, "play", &start_play, NULL); play = ags_recall_template_find_type(start_play, AGS_TYPE_ANALYSE_CHANNEL); g_object_get(play->data, "port", &start_port, NULL); port = ags_port_find_specifier(start_port, "./magnitude-buffer[0]"); ags_port_safe_read(port->data, &value); for(j = 0; j < cache_buffer_size; j++){ if(magnitude_buffer[j] != 4.0){ success = FALSE; break; } } g_object_get(channel, "next", &channel, NULL); } CU_ASSERT(success); }
void ags_matrix_map_recall(AgsMachine *machine) { AgsMatrix *matrix; AgsAudio *audio; AgsChannel *channel; AgsPattern *pattern; AgsDelayAudio *play_delay_audio; AgsDelayAudioRun *play_delay_audio_run; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsCopyPatternAudio *recall_copy_pattern_audio; AgsCopyPatternAudioRun *recall_copy_pattern_audio_run; AgsPlayNotationAudio *play_notation; AgsCopyPatternChannel *copy_pattern_channel; GList *notation; GList *list; guint i, j; GValue value = {0,}; if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 || (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){ return; } audio = machine->audio; matrix = AGS_MATRIX(machine); /* ags-delay */ ags_recall_factory_create(audio, NULL, NULL, "ags-delay\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_DELAY_AUDIO_RUN); if(list != NULL){ play_delay_audio_run = AGS_DELAY_AUDIO_RUN(list->data); // AGS_RECALL(play_delay_audio_run)->flags |= AGS_RECALL_PERSISTENT; } /* ags-count-beats */ ags_recall_factory_create(audio, NULL, NULL, "ags-count-beats\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(play_count_beats_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); } /* ags-copy-pattern */ ags_recall_factory_create(audio, NULL, NULL, "ags-copy-pattern\0", 0, audio->audio_channels, 0, audio->input_lines, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO_RUN); if(list != NULL){ recall_copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_copy_pattern_audio_run), "delay-audio-run\0", play_delay_audio_run, "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } /* set pattern object on port */ channel = ags_channel_pad_nth(audio->input, 0); for(i = 0; i < audio->input_pads; i++){ for(j = 0; j < audio->audio_channels; j++){ list = ags_recall_template_find_type(channel->recall, AGS_TYPE_COPY_PATTERN_CHANNEL); copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(list->data); list = channel->pattern; pattern = AGS_PATTERN(list->data); copy_pattern_channel->pattern->port_value.ags_port_object = (GObject *) pattern; ags_portlet_set_port(AGS_PORTLET(pattern), copy_pattern_channel->pattern); channel = channel->next; } } /* */ list = audio->recall; while((list = ags_recall_find_type(list, AGS_TYPE_PLAY_NOTATION_AUDIO)) != NULL){ play_notation = AGS_PLAY_NOTATION_AUDIO(list->data); ags_port_safe_read(play_notation->notation, &value); if(g_value_get_object(&value) == NULL){ notation = audio->notation; while(notation != NULL){ g_object_set(G_OBJECT(play_notation), "notation\0", notation->data, NULL); notation = notation->next; } } list = list->next; } /* depending on destination */ ags_matrix_input_map_recall(matrix, 0); /* depending on destination */ ags_matrix_output_map_recall(matrix, 0); AGS_MACHINE_CLASS(ags_matrix_parent_class)->map_recall(machine); }