void krad_mixer_portgroup_destroy (krad_mixer_t *krad_mixer, krad_mixer_portgroup_t *portgroup) { int c; if (portgroup == NULL) { return; } if (portgroup->crossfade_group != NULL) { krad_mixer_crossfade_group_destroy (krad_mixer, portgroup->crossfade_group); } krad_mixer_portgroup_mark_destroy (krad_mixer, portgroup); while (portgroup->active != 4) { usleep (1000); } portgroup->delay = 0; portgroup->delay_actual = 0; printkd("Krad Mixer: Removing %d channel Portgroup %s", portgroup->channels, portgroup->sysname); for (c = 0; c < KRAD_MIXER_MAX_CHANNELS; c++) { switch ( portgroup->io_type ) { case KRAD_TONE: free ( portgroup->samples[c] ); break; case MIXBUS: free ( portgroup->samples[c] ); break; case KRAD_AUDIO: break; case KRAD_LINK: free ( portgroup->samples[c] ); break; case KLOCALSHM: break; } } switch ( portgroup->io_type ) { case KRAD_TONE: krad_tone_destroy (portgroup->io_ptr); case MIXBUS: break; case KRAD_AUDIO: krad_audio_portgroup_destroy (portgroup->io_ptr); break; case KRAD_LINK: break; case KLOCALSHM: krad_mixer_local_portgroup_destroy (portgroup->io_ptr); break; } if (portgroup->krad_xmms != NULL) { krad_xmms_destroy (portgroup->krad_xmms); portgroup->krad_xmms = NULL; } if (portgroup->io_type != KRAD_LINK) { krad_tags_destroy (portgroup->krad_tags); } if (portgroup->effects != NULL) { kr_effects_destroy (portgroup->effects); portgroup->effects = NULL; } portgroup->destroy_mark = 0; portgroup->active = 0; }
int main (int argc, char *argv[]) { int i; int ret; kr_client_t *client; kr_audioport_t *audioport; krad_mixer_portgroup_direction_t direction; uint32_t sample_rate; ret = 0; direction = INPUT; if (argc != 2) { if (argc > 2) { fprintf (stderr, "Only takes station argument.\n"); } else { fprintf (stderr, "No station specified.\n"); } return 1; } client = kr_client_create ("krad audioport client"); if (client == NULL) { fprintf (stderr, "Could not create KR client.\n"); return 1; } kr_connect (client, argv[1]); if (!kr_connected (client)) { fprintf (stderr, "Could not connect to %s krad radio daemon.\n", argv[1]); kr_client_destroy (&client); return 1; } if (kr_mixer_get_info_wait (client, &sample_rate, NULL) != 1) { fprintf (stderr, "Could not get mixer info!\n"); kr_client_destroy (&client); return 1; } if (direction == INPUT) { krad_tone = krad_tone_create (sample_rate); krad_tone_add_preset (krad_tone, "3"); krad_tone2 = krad_tone_create (sample_rate); krad_tone_add_preset (krad_tone2, "3"); } audioport = kr_audioport_create (client, direction); if (audioport == NULL) { fprintf (stderr, "Could not make audioport.\n"); kr_client_destroy (&client); return 1; } else { printf ("Working!\n"); } kr_audioport_set_callback (audioport, audioport_process, audioport); signal (SIGINT, signal_recv); signal (SIGTERM, signal_recv); kr_audioport_activate (audioport); for (i = 0; i < 40; i++) { usleep (30000); if (destroy == 1) { printf ("Got signal!\n"); break; } if (kr_audioport_error (audioport)) { printf ("Error: %s\n", "Audioport Error"); ret = 1; break; } } kr_audioport_deactivate (audioport); kr_audioport_destroy (audioport); if (direction == INPUT) { krad_tone_destroy (krad_tone); krad_tone_destroy (krad_tone2); } kr_client_destroy (&client); if (ret == 0) { printf ("Worked!\n"); } return ret; }