Blame platform-demos/C/audio-player/audio-player.vala

Packit 1470ea
/*
Packit 1470ea
 * Compile using:
Packit 1470ea
 * valac --pkg gtk+-2.0 --pkg gstreamer-0.10 audio-player.vala
Packit 1470ea
 *
Packit 1470ea
 */
Packit 1470ea
Packit 1470ea
using Gtk;
Packit 1470ea
using Gst;
Packit 1470ea
Packit 1470ea
public class AudioPlayer : Gtk.Window
Packit 1470ea
{
Packit 1470ea
  private Gst.Element playbin;
Packit 1470ea
  private string[] files;
Packit 1470ea
  private Gtk.Label label;
Packit 1470ea
  private int song = 0;
Packit 1470ea
  private bool playing;
Packit 1470ea
  private Gtk.Button play_pause_button;
Packit 1470ea
Packit 1470ea
  public AudioPlayer ()
Packit 1470ea
  {
Packit 1470ea
    this.set_size_request (600, 200);
Packit 1470ea
    this.destroy.connect (Gtk.main_quit);
Packit 1470ea
    var vbox = new Gtk.VBox (false, 0);
Packit 1470ea
    this.label = new Gtk.Label ("Audio Player");
Packit 1470ea
    vbox.pack_start (this.label, true, true, 0);
Packit 1470ea
Packit 1470ea
    this.play_pause_button = new Gtk.Button.from_stock (Gtk.STOCK_MEDIA_PLAY);
Packit 1470ea
    this.play_pause_button.clicked.connect (on_play_pause);
Packit 1470ea
    var next_button = new Gtk.Button.from_stock (Gtk.STOCK_MEDIA_NEXT);
Packit 1470ea
    next_button.clicked.connect (on_next);
Packit 1470ea
Packit 1470ea
    var button_box = new Gtk.HButtonBox ();
Packit 1470ea
    button_box.add (this.play_pause_button);
Packit 1470ea
    button_box.add (next_button);
Packit 1470ea
    vbox.pack_start (button_box, false, true, 0);
Packit 1470ea
Packit 1470ea
    this.add (vbox);
Packit 1470ea
Packit 1470ea
    this.playbin = Gst.ElementFactory.make ("playbin", "play");
Packit 1470ea
  }
Packit 1470ea
Packit 1470ea
  private void on_play_pause ()
Packit 1470ea
  {
Packit 1470ea
    if (this.playing)
Packit 1470ea
    {
Packit 1470ea
      this.playbin.set_state (Gst.State.PAUSED);
Packit 1470ea
      this.play_pause_button.set_label (Gtk.STOCK_MEDIA_PAUSE);
Packit 1470ea
    }
Packit 1470ea
    else
Packit 1470ea
    {
Packit 1470ea
      this.playbin.set_state (Gst.State.PLAYING);
Packit 1470ea
      this.play_pause_button.set_label (Gtk.STOCK_MEDIA_PLAY);
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    this.playing = !this.playing;
Packit 1470ea
  }
Packit 1470ea
Packit 1470ea
  private void on_next ()
Packit 1470ea
  {
Packit 1470ea
    this.playbin.set_state (Gst.State.NULL);
Packit 1470ea
    this.playbin.set ("uri", "file://" + this.files[song]);
Packit 1470ea
    this.label.set_text (this.files[song]);
Packit 1470ea
    this.song++;
Packit 1470ea
    if (this.files.length <= this.song)
Packit 1470ea
    {
Packit 1470ea
      this.song = 0;
Packit 1470ea
    }
Packit 1470ea
    this.playbin.set_state (Gst.State.PLAYING);
Packit 1470ea
    this.play_pause_button.set_label (Gtk.STOCK_MEDIA_PLAY);
Packit 1470ea
    this.playing = true;
Packit 1470ea
  }
Packit 1470ea
Packit 1470ea
  public static int main (string[] args)
Packit 1470ea
  {
Packit 1470ea
    Gst.init (ref args);
Packit 1470ea
    Gtk.init (ref args);
Packit 1470ea
Packit 1470ea
    if (args.length < 2)
Packit 1470ea
    {
Packit 1470ea
      print ("usage: audio-player [files...]\n");
Packit 1470ea
      return 1;
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    var audio_player = new AudioPlayer ();
Packit 1470ea
    audio_player.files = args[1:args.length];
Packit 1470ea
    audio_player.show_all ();
Packit 1470ea
    audio_player.on_next ();
Packit 1470ea
    Gtk.main ();
Packit 1470ea
Packit 1470ea
    return 0;
Packit 1470ea
  }
Packit 1470ea
}