From 3e2f374bf81fc9c15f4caa3c5084a615b3b5651e Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Sun, 21 Aug 2011 19:24:33 -0400 Subject: [PATCH] libsaria: created Audio() class This class will be used to control gstreamer functions. So far, it can load a song, play, and pause. --- include/libsaria/audio.h | 24 +++++++++++++++++++ include/libsaria/libsaria.h | 5 +++- libsaria/audio/audio.cpp | 42 +++++++++++++++++++++++++++++++++ libsaria/audio/controls.cpp | 17 ++++++++++++++ libsaria/audio/init.cpp | 47 ------------------------------------- libsaria/controls.cpp | 4 ++-- libsaria/init.cpp | 5 ---- libsaria/libsaria.cpp | 6 ++++- 8 files changed, 94 insertions(+), 56 deletions(-) create mode 100644 libsaria/audio/audio.cpp create mode 100644 libsaria/audio/controls.cpp delete mode 100644 libsaria/audio/init.cpp diff --git a/include/libsaria/audio.h b/include/libsaria/audio.h index 710b50ef..3066449f 100644 --- a/include/libsaria/audio.h +++ b/include/libsaria/audio.h @@ -1,10 +1,34 @@ #ifndef LIBSARIA_AUDIO_H #define LIBSARIA_AUDIO_H +#include +using namespace std; + extern "C" { #include } +class Audio +{ + private: + GstElement *player; + string cur_file; + + void reset(); + void change_state(GstState); + + public: + Audio(); + ~Audio(); + + void init(int, char **); + void load(string); + + /* Control functions */ + void play(); + void pause(); +}; + void audio_init(int, char **); void gst_play(); void gst_pause(); diff --git a/include/libsaria/libsaria.h b/include/libsaria/libsaria.h index 5d22b65e..f469a875 100644 --- a/include/libsaria/libsaria.h +++ b/include/libsaria/libsaria.h @@ -1,10 +1,14 @@ #ifndef LIBSARIA_H #define LIBSARIA_H +#include #include class Libsaria { + private: + Audio audio; + public: Libsaria(int, char**); ~Libsaria(); @@ -12,7 +16,6 @@ class Libsaria /* Control functions */ void play(); void pause(); - }; class Libsaria *libsaria_get(); diff --git a/libsaria/audio/audio.cpp b/libsaria/audio/audio.cpp new file mode 100644 index 00000000..c11cfbfe --- /dev/null +++ b/libsaria/audio/audio.cpp @@ -0,0 +1,42 @@ + +#include +#include + +static bool initialized = false; +static void init_gstreamer(int argc, char **argv) +{ + if (initialized == true) + return; + gst_init(&argc, &argv); + initialized = true; +} + +Audio::Audio() +{ + print("Creating audio driver"); +} + +Audio::~Audio() +{ +} + +void Audio::init(int argc, char **argv) +{ + print("Initializing gstreamer"); + init_gstreamer(argc, argv); + player = gst_element_factory_make("playbin2", "player"); +} + +void Audio::reset() +{ + cur_file = ""; + change_state(GST_STATE_NULL); +} + +void Audio::load(string file) +{ + string uri = "file://" + file; + reset(); + cur_file = file; + g_object_set(G_OBJECT(player), "uri", uri.c_str(), NULL); +} diff --git a/libsaria/audio/controls.cpp b/libsaria/audio/controls.cpp new file mode 100644 index 00000000..ad1be539 --- /dev/null +++ b/libsaria/audio/controls.cpp @@ -0,0 +1,17 @@ + +#include + +void Audio::change_state(GstState new_state) +{ + gst_element_set_state(GST_ELEMENT(player), new_state); +} + +void Audio::play() +{ + change_state(GST_STATE_PLAYING); +} + +void Audio::pause() +{ + change_state(GST_STATE_PAUSED); +} diff --git a/libsaria/audio/init.cpp b/libsaria/audio/init.cpp deleted file mode 100644 index f09247f9..00000000 --- a/libsaria/audio/init.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -#include -#include - -static GstElement *player; -static string cur_file; - -void change_state(GstState new_state) -{ - gst_element_set_state(GST_ELEMENT(player), new_state); -} - -void reset() -{ - cur_file = ""; - change_state(GST_STATE_NULL); -} - -void load_file(string file) -{ - string uri = "file://" + file; - cur_file = file; - g_object_set(G_OBJECT(player), "uri", uri.c_str(), NULL); -} - -void gst_play() -{ - print("Playing!"); - change_state(GST_STATE_PLAYING); -} - -void gst_pause() -{ - print("Paused!"); - change_state(GST_STATE_PAUSED); -} - -void audio_init(int argc, char **argv) -{ - print("Initializing audio..."); - gst_init(&argc, &argv); - - player = gst_element_factory_make("playbin2", "player"); - if (argc > 1) - load_file(argv[1]); - gst_play(); -} diff --git a/libsaria/controls.cpp b/libsaria/controls.cpp index be0cd4c6..f892c04c 100644 --- a/libsaria/controls.cpp +++ b/libsaria/controls.cpp @@ -4,10 +4,10 @@ void Libsaria::play() { - gst_play(); + audio.play(); } void Libsaria::pause() { - gst_pause(); + audio.pause(); } diff --git a/libsaria/init.cpp b/libsaria/init.cpp index e3fdc093..746454b1 100644 --- a/libsaria/init.cpp +++ b/libsaria/init.cpp @@ -1,8 +1,4 @@ -#include -using namespace std; - -#include #include static class Libsaria *libsaria; @@ -16,7 +12,6 @@ void libsaria_init(int argc, char **argv) { print("Initializing libsaria"); libsaria = new Libsaria(argc, argv); - audio_init(argc, argv); } void libsaria_quit() diff --git a/libsaria/libsaria.cpp b/libsaria/libsaria.cpp index 2e7f4c1e..3cc4ebce 100644 --- a/libsaria/libsaria.cpp +++ b/libsaria/libsaria.cpp @@ -3,7 +3,11 @@ Libsaria::Libsaria(int argc, char **argv) { - + audio.init(argc, argv); + if (argc > 1) { + audio.load(argv[1]); + audio.play(); + } } Libsaria::~Libsaria()