|
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 |
}
|