/* * Test reading of audio files. */ void test_audio_file() { START_TEST; char* filenames[] = {"data/mono_0:10.wav", "data/stereo_0:10.wav", "data/mono_0:10.mp3", "data/stereo_0:10.mp3", "data/mono_0:10.m4a", "data/stereo_0:10.m4a", "data/mono_0:10.opus", "data/stereo_0:10.opus"}; int i; for(i=0;i<G_N_ELEMENTS(filenames);i++){ WfDecoder f = {{0,}}; char* filename = find_wav(filenames[i]); if(!ad_open(&f, filename)) FAIL_TEST("file open: %s", filenames[i]); if(!g_str_has_suffix(filenames[i], ".opus")){ assert(f.info.sample_rate == 44100, "samplerate: %i (expected 44100)", f.info.sample_rate); }else{ assert(f.info.sample_rate == 48000, "samplerate: %i (expected 48000)", f.info.sample_rate); } int n = 8; int read_len = WF_PEAK_RATIO * n; int16_t data[f.info.channels][read_len]; WfBuf16 buf = { .buf = {data[0], data[1]}, .size = n * WF_PEAK_RATIO }; size_t readcount = 0; size_t total = 0; do { readcount = ad_read_short(&f, &buf); total += readcount; } while (readcount > 0); dbg(1, "diff=%zu", abs((int)total - (int)f.info.frames)); if(g_str_has_suffix(filenames[i], ".wav") || g_str_has_suffix(filenames[i], ".flac")){ assert(total == f.info.frames, "%s: incorrect number of frames read: %"PRIi64, filenames[i], f.info.frames); assert(!(total % 512) || !(total % 100), "%s: bad framecount: %zu", filenames[i], total); // test file sizes are always a round number }else{ // for some file types, f.info.frames is only an estimate assert(abs((int)total - (int)f.info.frames) < 2048, "%s: incorrect number of frames read: %"PRIi64, filenames[i], f.info.frames); } ad_close(&f); g_free(filename); }
int main (int argc, char *argv[]) { set_log_handlers(); wf_debug = 1; gtk_init(&argc, &argv); GdkGLConfig* glconfig; if(!(glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE))){ gerr ("Cannot initialise gtkglext."); return EXIT_FAILURE; } GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); canvas = gtk_drawing_area_new(); gtk_widget_set_can_focus (canvas, true); gtk_widget_set_size_request (canvas, GL_WIDTH + 2 * HBORDER, 128); gtk_widget_set_gl_capability (canvas, glconfig, NULL, 1, GDK_GL_RGBA_TYPE); gtk_widget_add_events (canvas, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_container_add((GtkContainer*)window, (GtkWidget*)canvas); agl = agl_get_instance(); scene = (AGlRootActor*)agl_actor__new_root(canvas); wfc = wf_canvas_new((AGlRootActor*)scene); char* filename = find_wav(WAV); w1 = waveform_load_new(filename); g_free(filename); g_signal_connect((gpointer)canvas, "realize", G_CALLBACK(on_canvas_realise), NULL); g_signal_connect((gpointer)canvas, "size-allocate", G_CALLBACK(on_allocate), NULL); g_signal_connect((gpointer)canvas, "expose-event", G_CALLBACK(agl_actor__on_expose), scene); gtk_widget_show_all(window); add_key_handlers((GtkWindow*)window, NULL, (Key*)&keys); gboolean window_on_delete(GtkWidget* widget, GdkEvent* event, gpointer user_data){ gtk_main_quit(); return false; }
void test_peakgen() { START_TEST; char* filename = find_wav(WAV); assert(filename, "cannot find file %s", WAV); if(!wf_peakgen__sync(filename, WAV ".peak", NULL)){ FAIL_TEST("local peakgen failed"); } // create peakfile in the cache directory Waveform* w = waveform_new(filename); g_free(filename); char* p = waveform_ensure_peakfile__sync(w); assert(p, "cache dir peakgen failed"); FINISH_TEST; }
int main (int argc, char* argv[]) { if(sizeof(off_t) != 8){ gerr("sizeof(off_t)=%zu\n", sizeof(off_t)); return EXIT_FAILURE; } set_log_handlers(); wf_debug = 0; gtk_init(&argc, &argv); GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); #if 0 agl_get_instance()->pref_use_shaders = false; #endif WaveformView* waveform = waveform_view_new(NULL); #if 0 waveform_view_set_show_rms(waveform, false); waveform_view_add_layer(waveform, grid_actor(waveform_view_get_actor(waveform)), 0); #endif gtk_widget_set_size_request((GtkWidget*)waveform, 512, 256); gtk_container_add((GtkContainer*)window, (GtkWidget*)waveform); gtk_widget_show_all(window); char* filename = find_wav(WAV); waveform_view_load_file(waveform, filename); g_free(filename); add_key_handlers((GtkWindow*)window, waveform, (Key*)&keys); gboolean window_on_delete(GtkWidget* widget, GdkEvent* event, gpointer user_data){ gtk_main_quit(); return false; }
int main (int argc, char *argv[]) { if(sizeof(off_t) != 8){ gerr("sizeof(off_t)=%zu\n", sizeof(off_t)); return EXIT_FAILURE; } set_log_handlers(); wf_debug = 1; gtk_init(&argc, &argv); GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); WaveformView* waveform = waveform_view_new(NULL); waveform_view_set_show_rms(waveform, false); #if 0 waveform_view_set_show_grid(waveform, true); #endif gtk_container_add((GtkContainer*)window, (GtkWidget*)waveform); gtk_widget_show_all(window); char* filename = find_wav(); waveform_view_load_file(waveform, filename); g_free(filename); gboolean key_press(GtkWidget* widget, GdkEventKey* event, gpointer user_data) { WaveformView* waveform = user_data; int n_visible_frames = ((float)waveform->waveform->n_frames) / waveform->zoom; switch(event->keyval){ case 61: waveform_view_set_zoom(waveform, waveform->zoom * 1.5); break; case 45: waveform_view_set_zoom(waveform, waveform->zoom / 1.5); break; case KEY_Left: case KEY_KP_Left: dbg(1, "left"); waveform_view_set_start(waveform, waveform->start_frame - n_visible_frames / 10); break; case KEY_Right: case KEY_KP_Right: dbg(1, "right"); waveform_view_set_start(waveform, waveform->start_frame + n_visible_frames / 10); break; case GDK_KP_Enter: break; case (char)'<': break; case '>': break; case 113: exit(EXIT_SUCCESS); break; case GDK_Delete: break; default: dbg(1, "%i", event->keyval); break; } return TRUE; }