Exemple #1
0
/**
 * ags_recall_find_type:
 * @recall_i a #GList containing recalls
 * @provider a #GObject
 * Returns: a #GList containing recalls, or #NULL if not found
 * 
 * Finds next matching recall for type which has @provider. The @provider may be either an #AgsChannel
 * or an #AgsAudio object. This function tries to find the corresponding #AgsRecallChannel and #AgsRecallAudio
 * objects of a #AgsRecall to find. If these recalls contains the @provider, the function will return.
 */
GList*
ags_recall_find_provider(GList *recall_i, GObject *provider)
{
  AgsRecall *recall;

  while(recall_i != NULL){
    recall = AGS_RECALL(recall_i->data);

    if(AGS_IS_AUDIO(provider)){
      if(AGS_IS_RECALL_AUDIO(recall)){
	if(((GObject *) AGS_RECALL_AUDIO(recall)->audio) == provider)
	  return(recall_i);
      }else if(AGS_IS_RECALL_AUDIO_RUN(recall)){
	AgsRecallAudio *recall_audio;

	recall_audio = AGS_RECALL_AUDIO_RUN(recall)->recall_audio;

	if(recall_audio != NULL &&
	   ((GObject *) recall_audio->audio) == provider){
	  return(recall_i);
	}
      }
    }else if(AGS_IS_CHANNEL(provider)){
      if(AGS_IS_RECALL_CHANNEL(recall)){
	if(((GObject *) AGS_RECALL_CHANNEL(recall)->source) == provider)
	  return(recall_i);
      }else if(AGS_IS_RECALL_CHANNEL_RUN(recall)){
	if(((GObject *) AGS_RECALL_CHANNEL_RUN(recall)->source) == provider){
	  return(recall_i);
	}
      }
    }else if(AGS_IS_RECYCLING(provider)){
      if(AGS_IS_RECALL_RECYCLING(recall)){
	if(((GObject *) AGS_RECALL_RECYCLING(recall)->source) == provider){
	  return(recall_i);
	}
      }
    }else if(AGS_IS_AUDIO_SIGNAL(provider)){
      if(AGS_IS_RECALL_AUDIO_SIGNAL(recall)){
	if(((GObject *) AGS_RECALL_AUDIO_SIGNAL(recall)->source) == provider){
	  return(recall_i);
	}
      }
    }

    recall_i = recall_i->next;
  }

  return(NULL);
}
Exemple #2
0
void
ags_audiorec_map_recall(AgsMachine *machine)
{
  AgsWindow *window;
  
  AgsAudiorec *audiorec;

  AgsAudio *audio;

  AgsPlayWaveAudioRun *play_wave_audio_run;
  AgsCaptureWaveAudioRun *capture_wave_audio_run;

  GList *start_play, *play;

  if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 ||
     (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){
    return;
  }

  audiorec = AGS_AUDIOREC(machine);
  window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) machine,
						 AGS_TYPE_WINDOW);

  audio = machine->audio;

  /* ags-play-wave */
  ags_recall_factory_create(audio,
			    NULL, NULL,
			    "ags-play-wave",
			    0, 0,
			    0, 0,
			    (AGS_RECALL_FACTORY_OUTPUT |
			     AGS_RECALL_FACTORY_ADD |
			     AGS_RECALL_FACTORY_PLAY),
			    0);

  g_object_get(audio,
	       "play", &start_play,
	       NULL);

  play = ags_recall_find_type(start_play,
			      AGS_TYPE_PLAY_WAVE_AUDIO_RUN);

  if(play != NULL){
    GValue value = {0,};
    
    play_wave_audio_run = play->data;
    
    /* wave loop */
    g_value_init(&value, G_TYPE_BOOLEAN);
    
    g_value_set_boolean(&value, gtk_toggle_button_get_active((GtkToggleButton *) window->navigation->loop));
    ags_port_safe_write(AGS_PLAY_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(play_wave_audio_run)->recall_audio)->wave_loop,
			&value);

    g_value_unset(&value);
    g_value_init(&value, G_TYPE_UINT64);

    g_value_set_uint64(&value, 16 * window->navigation->loop_left_tact->adjustment->value);
    ags_port_safe_write(AGS_PLAY_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(play_wave_audio_run)->recall_audio)->wave_loop_start,
			&value);

    g_value_reset(&value);

    g_value_set_uint64(&value, 16 * window->navigation->loop_right_tact->adjustment->value);
    ags_port_safe_write(AGS_PLAY_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(play_wave_audio_run)->recall_audio)->wave_loop_end,
			&value);
  }

  g_list_free_full(start_play,
		   g_object_unref);

  /* ags-capture-wave */
  ags_recall_factory_create(audio,
			    NULL, NULL,
			    "ags-capture-wave",
			    0, 0,
			    0, 0,
			    (AGS_RECALL_FACTORY_OUTPUT |
			     AGS_RECALL_FACTORY_ADD |
			     AGS_RECALL_FACTORY_PLAY),
			    0);

  g_object_get(audio,
	       "play", &start_play,
	       NULL);

  play = ags_recall_find_type(start_play,
			      AGS_TYPE_CAPTURE_WAVE_AUDIO_RUN);

  if(play != NULL){
    GValue value = {0,};
    
    capture_wave_audio_run = play->data;

    /* wave loop */
    g_value_init(&value, G_TYPE_BOOLEAN);
    
    g_value_set_boolean(&value, gtk_toggle_button_get_active((GtkToggleButton *) window->navigation->loop));
    ags_port_safe_write(AGS_CAPTURE_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(capture_wave_audio_run)->recall_audio)->wave_loop,
			&value);

    g_value_unset(&value);
    g_value_init(&value, G_TYPE_UINT64);

    g_value_set_uint64(&value, 16 * window->navigation->loop_left_tact->adjustment->value);
    ags_port_safe_write(AGS_CAPTURE_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(capture_wave_audio_run)->recall_audio)->wave_loop_start,
			&value);

    g_value_reset(&value);

    g_value_set_uint64(&value, 16 * window->navigation->loop_right_tact->adjustment->value);
    ags_port_safe_write(AGS_CAPTURE_WAVE_AUDIO(AGS_RECALL_AUDIO_RUN(capture_wave_audio_run)->recall_audio)->wave_loop_end,
			&value);
  }

  g_list_free_full(start_play,
		   g_object_unref);
  
  /* depending on destination */
  ags_audiorec_input_map_recall(audiorec, 0);

  /* depending on destination */
  ags_audiorec_output_map_recall(audiorec, 0);

  /* call parent */
  AGS_MACHINE_CLASS(ags_audiorec_parent_class)->map_recall(machine);  
}
void
ags_recall_dependency_test_find_dependency_by_provider()
{
  AgsChannel *channel[3];
  AgsAudio *audio[3];
  AgsRecall *recall;
  AgsRecallAudio *recall_audio;
  AgsRecallDependency *recall_dependency[6];
  
  GList *list, *current;

  list = NULL;

  /* dependency #0 */
  audio[0] = g_object_new(AGS_TYPE_AUDIO,
			  NULL);
  recall_audio = g_object_new(AGS_TYPE_RECALL_AUDIO,
			      "audio", audio[0],
			      NULL);
  recall = g_object_new(AGS_TYPE_RECALL_AUDIO_RUN,
			"recall-audio", recall_audio,
			NULL);
  
  recall_dependency[0] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[0]);
  
  /* dependency #1 */
  channel[0] = g_object_new(AGS_TYPE_CHANNEL,
			    NULL);
  recall = g_object_new(AGS_TYPE_RECALL_CHANNEL_RUN,
			"source", channel[0],
			NULL);
  
  recall_dependency[1] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[1]);

  /* dependency #2 */
  channel[1] = g_object_new(AGS_TYPE_CHANNEL,
			    NULL);
  recall = g_object_new(AGS_TYPE_RECALL_CHANNEL_RUN,
			"source", channel[1],
			NULL);
  
  recall_dependency[2] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[2]);

  /* dependency #3 */
  audio[1] = g_object_new(AGS_TYPE_AUDIO,
			  NULL);
  recall_audio = g_object_new(AGS_TYPE_RECALL_AUDIO,
			      "audio", audio[1],
			      NULL);
  recall = g_object_new(AGS_TYPE_RECALL_AUDIO_RUN,
			"recall-audio", recall_audio,
			NULL);
  
  recall_dependency[3] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[3]);

  /* dependency #4 */
  audio[2] = g_object_new(AGS_TYPE_AUDIO,
			  NULL);
  recall_audio = g_object_new(AGS_TYPE_RECALL_AUDIO,
			      "audio", audio[2],
			      NULL);
  recall = g_object_new(AGS_TYPE_RECALL_AUDIO_RUN,
			"recall-audio", recall_audio,
			NULL);
  
  recall_dependency[4] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[4]);

  /* dependency #5 */
  channel[2] = g_object_new(AGS_TYPE_CHANNEL,
			    NULL);
  recall = g_object_new(AGS_TYPE_RECALL_CHANNEL_RUN,
			"source", channel[2],
			NULL);
  
  recall_dependency[5] = g_object_new(AGS_TYPE_RECALL_DEPENDENCY,
				      "dependency", recall,
				      NULL);
  list = g_list_prepend(list,
			recall_dependency[5]);

  /* find and assert - audio */
  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 audio[0])) != NULL &&
	    AGS_RECALL_AUDIO_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->recall_audio->audio == audio[0]);

  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 audio[1])) != NULL &&
	    AGS_RECALL_AUDIO_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->recall_audio->audio == audio[1]);

  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 audio[2])) != NULL &&
	    AGS_RECALL_AUDIO_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->recall_audio->audio == audio[2]);

  /* find and assert - channel */
  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 channel[0])) != NULL &&
	    AGS_RECALL_CHANNEL_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->source == channel[0]);

  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 channel[1])) != NULL &&
	    AGS_RECALL_CHANNEL_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->source == channel[1]);

  CU_ASSERT((current = ags_recall_dependency_find_dependency_by_provider(list,
									 channel[2])) != NULL &&
	    AGS_RECALL_CHANNEL_RUN(AGS_RECALL_DEPENDENCY(current->data)->dependency)->source == channel[2]);
}