<< Test1 >>

#include <math.h>
#include <gtk/gtk.h>
#include <gtkwaveform.h>

/* Quit callback. */
static void
quit (GtkWidget *widget, gpointer user_data)
{
  gtk_main_quit ();
}

/* Button press event. */
static void
press (GtkWidget *widget, GdkEventButton *event, gpointer user_data) 
{
  /* Right click causes the ruler metric to switch between frames and time. */
  if (event->button == 3)
    {
      GtkWaveMetric metric;

      if (gtk_wave_get_metric (GTK_WAVE (widget)) == GTK_WAVE_METRIC_TIME)
        metric = GTK_WAVE_METRIC_FRAMES;
      else
        metric = GTK_WAVE_METRIC_TIME;

      gtk_wave_set_metric (GTK_WAVE (widget), metric);
    }
}

int
main (int   argc,
      char *argv[])
{
  GtkWidget   *window, *wave;
  GtkWaveView *waveview;
  GtkObject   *wavebuffer;

  /* Initialize Gtk+. */
  gtk_init (&argc, &argv);

  if (argc != 2)
    {
      g_print ("Usage: %s audio_file_name.wavn", argv[0]);
      exit (-1);
    }

  /* Create a Gtk+ window. */
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  /* Create a GtkWave widget. */
  wave = gtk_wave_new ();
  gtk_widget_set_usize (wave, 600, 200);
  waveview = gtk_wave_get_view (GTK_WAVE (wave));
  gtk_wave_view_set_select_channels (GTK_WAVE_VIEW (waveview), 0x03);

  /* Set the cache size to hold 8192 pixel columns of data.  This means
     the user can scroll the widget's contents back and forth and we
     will cache the most recently displayed 8192 columns of data. */
  gtk_wave_view_set_cache_size (waveview, 8192);

  /* Create a data source object. */
  wavebuffer = gtk_wavefile_buffer_new (argv[1]);
  if (wavebuffer == NULL)
    {
      g_print ("Cannot open file '%s'n", argv[1]);
      exit (-1);
    }
  gtk_window_set_title (GTK_WINDOW (window), argv[1]);

  /* Add GtkWave to the main window. */
  gtk_container_add (GTK_CONTAINER (window), wave);

  /* Call the usual Gtk+ cruft. */
  gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                      (GtkSignalFunc) quit, NULL);
  gtk_signal_connect_object (GTK_OBJECT (waveview), "button_press_event",
                             (GtkSignalFunc) press, GTK_OBJECT (wave));

  /* Set the Waveform widget's data stream to point to our wavebuffer. */
  gtk_wave_view_set_buffer (waveview, GTK_WAVE_BUFFER (wavebuffer));
  gtk_wave_view_enable_selection (waveview, TRUE);
  gtk_wave_view_enable_marker (GTK_WAVE_VIEW (waveview), TRUE);

  gtk_widget_show_all (window);
  /* gtk_wave_view_set_zoom_all (waveview); */
  gtk_wave_view_set_zoom (waveview, 10000.0);

  gtk_main ();

  return 0;
}

Test1