[quadrapassel/play_music] Initial code for GStreamer music
- From: John Ward <jward src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [quadrapassel/play_music] Initial code for GStreamer music
- Date: Tue, 26 Jan 2021 08:15:16 +0000 (UTC)
commit 943f52306741c267bd4ea46f9a823c29bfa23b14
Author: John Ward <john johnward net>
Date: Tue Jan 26 08:14:52 2021 +0000
Initial code for GStreamer music
meson.build | 2 ++
src/game-view.vala | 37 ++++++++++++++++++++++
src/meson.build | 6 ++--
src/stream-player.vala | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 126 insertions(+), 2 deletions(-)
---
diff --git a/meson.build b/meson.build
index 0098583..c57934d 100644
--- a/meson.build
+++ b/meson.build
@@ -23,6 +23,8 @@ pango_cairo_dependency = dependency('pangocairo')
posix_dependency = meson.get_compiler('vala').find_library('posix')
rsvg_dependency = dependency('librsvg-2.0', version: '>= 2.32.0')
libm_dependency = cc.find_library('m', required : true)
+gstreamer_dependency = dependency('gstreamer-1.0', version: '>= 1.0')
+
# Set gettext package name
add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format (meson.project_name()), language: 'c')
diff --git a/src/game-view.vala b/src/game-view.vala
index 0564b01..a241ad8 100644
--- a/src/game-view.vala
+++ b/src/game-view.vala
@@ -396,6 +396,43 @@ public class GameView : GtkClutter.Embed
warning (e.message);
}
}
+
+
+ /* Play Music */
+
+ private StreamPlayer streamPlayer;
+
+ public void play_game_music()
+ {
+ if (streamPlayer == null)
+ streamPlayer = new StreamPlayer();
+
+ streamPlayer.stop();
+
+ streamPlayer.play("play.mp3");
+ }
+
+ public void play_menu_music()
+ {
+ if (streamPlayer == null)
+ streamPlayer = new StreamPlayer();
+
+ streamPlayer.stop();
+
+ streamPlayer.play("menu.mp3");
+ }
+
+ public void stop_music()
+ {
+ streamPlayer.stop();
+ }
+
+
+ // private static void _play_music (string _name, StreamPlayer streamPlayer)
+ // {
+ // streamPlayer.play("play.mp3");
+ // //_controller.didUpdatePlayerState.connect( play_callback );
+ // }
}
private class BlockActor : Clutter.Clone
diff --git a/src/meson.build b/src/meson.build
index 0ab019f..6ab8437 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -7,7 +7,8 @@ executable(meson.project_name(),
'history.vala',
'preview.vala',
'quadrapassel.vala',
- 'score-dialog.vala'
+ 'score-dialog.vala',
+ 'stream-player.vala'
],
install: true,
c_args: [
@@ -28,6 +29,7 @@ executable(meson.project_name(),
pango_cairo_dependency,
posix_dependency,
rsvg_dependency,
- libm_dependency
+ libm_dependency,
+ gstreamer_dependency
]
)
diff --git a/src/stream-player.vala b/src/stream-player.vala
new file mode 100644
index 0000000..5fc26fa
--- /dev/null
+++ b/src/stream-player.vala
@@ -0,0 +1,83 @@
+using Gst;
+
+public class StreamPlayer {
+
+ // thread to play the music
+ private MainLoop loop = new MainLoop ();
+
+ // Player element
+ private dynamic Element player;
+
+
+ private void foreach_tag (Gst.TagList list, string tag) {
+ switch (tag) {
+ case "title":
+ string tag_string;
+ list.get_string (tag, out tag_string);
+ stdout.printf ("tag: %s = %s\n", tag, tag_string);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private bool bus_callback (Gst.Bus bus, Gst.Message message) {
+ switch (message.type) {
+ case MessageType.ERROR:
+ GLib.Error err;
+ string debug;
+ message.parse_error (out err, out debug);
+ stdout.printf ("Error: %s\n", err.message);
+ loop.quit ();
+ break;
+ case MessageType.EOS:
+ stdout.printf ("end of stream\n");
+ break;
+ case MessageType.STATE_CHANGED:
+ Gst.State oldstate;
+ Gst.State newstate;
+ Gst.State pending;
+ message.parse_state_changed (out oldstate, out newstate,
+ out pending);
+ stdout.printf ("state changed: %s->%s:%s\n",
+ oldstate.to_string (), newstate.to_string (),
+ pending.to_string ());
+ break;
+ case MessageType.TAG:
+ Gst.TagList tag_list;
+ stdout.printf ("taglist found\n");
+ message.parse_tag (out tag_list);
+ tag_list.foreach ((TagForeachFunc) foreach_tag);
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ public void stop() {
+ player.set_state(State.READY);
+ loop.quit();
+ }
+
+ public void play (string filename) {
+
+ var path = GLib.Path.build_filename (SOUND_DIRECTORY, filename);
+ path = "file:" + path;
+ stdout.printf ("Path: %s\n", path);
+
+ player = ElementFactory.make ("playbin", "play");
+
+ //string cur_dir = GLib.Environment.get_current_dir();
+
+ player.uri = path;
+
+ Gst.Bus bus = player.get_bus ();
+ bus.add_watch (0, bus_callback);
+
+ player.set_state (State.PLAYING);
+
+ loop.run ();
+ }
+}
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]