static void JACKclose() { if(thread_run) { thread_run = 0; if(pthread_mutex_trylock(&player_thread_lock) == 0) { pthread_cond_signal(&buffer_ready); pthread_mutex_unlock(&player_thread_lock); } pthread_join(player_thread_id, NULL); } player_active = 0; if(j_output_port) { int i; for(i=0;i<myplayer->info.channels;i++) { jack_port_unregister(j_client, j_output_port[i]); } free(j_output_port); j_output_port = NULL; } if(j_out) { free(j_out); j_out = NULL; } if(rb) { jack_ringbuffer_free(rb); rb = NULL; } if (myplugin) { int i; for(i=0;i<myplayer->info.channels;i++) ladspah_free(myplugin[i]); free(myplugin); } if (myplayer){ ad_close(myplayer); ad_free_nfo(&myplayer->info); g_free0(myplayer); } myplugin = NULL; };
double ad_maxsignal(const char *fn) { struct adinfo nfo; void * sf = ad_open(fn, &nfo); if (!sf) return 0.0; int read_len = 1024 * nfo.channels; float* sf_data = malloc(sizeof(float) * read_len); int readcount; float max_val = 0.0; do { readcount = ad_read(sf, sf_data, read_len); int k; for (k = 0; k < readcount; k++){ const float temp = fabs (sf_data [k]); max_val = temp > max_val ? temp : max_val; }; } while (readcount > 0); ad_close(sf); free(sf_data); ad_free_nfo(&nfo); return max_val; }