diff options
author | Sebastian Reichel <sre@ring0.de> | 2013-03-26 15:52:57 +0100 |
---|---|---|
committer | Sebastian Reichel <sre@ring0.de> | 2013-03-26 15:52:57 +0100 |
commit | 7bfb48ef84384ff0460f273ea5841fba628d2a46 (patch) | |
tree | 898d019f33a554f03cac91495adcb7165344382e /src/audio | |
parent | 03a4e9f901cd36792de2172b4ebb8f6e852fe1cd (diff) | |
download | serial-barcode-scanner-7bfb48ef84384ff0460f273ea5841fba628d2a46.tar.bz2 |
code restructure
Diffstat (limited to 'src/audio')
-rw-r--r-- | src/audio/Makefile | 9 | ||||
-rw-r--r-- | src/audio/audio-interface.vala | 23 | ||||
-rw-r--r-- | src/audio/audio.vala | 83 | ||||
-rw-r--r-- | src/audio/main.vala | 38 |
4 files changed, 153 insertions, 0 deletions
diff --git a/src/audio/Makefile b/src/audio/Makefile new file mode 100644 index 0000000..a6fd629 --- /dev/null +++ b/src/audio/Makefile @@ -0,0 +1,9 @@ +all: audio + +audio: main.vala audio.vala audio-interface.vala + valac -o $@ --pkg gstreamer-0.10 --pkg gio-2.0 $^ + +clean: + rm -rf audio + +.PHONY: all clean diff --git a/src/audio/audio-interface.vala b/src/audio/audio-interface.vala new file mode 100644 index 0000000..89d4a6f --- /dev/null +++ b/src/audio/audio-interface.vala @@ -0,0 +1,23 @@ +/* Copyright 2013, Sebastian Reichel <sre@ring0.de> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +[DBus (name = "io.mainframe.shopsystem.AudioPlayer")] +public interface AudioPlayer : Object { + public abstract signal void end_of_stream(); + + public abstract void play_system(string file) throws IOError; + public abstract string get_random_user_theme() throws IOError; + public abstract void play_user(string theme, string type) throws IOError; +} diff --git a/src/audio/audio.vala b/src/audio/audio.vala new file mode 100644 index 0000000..0225c01 --- /dev/null +++ b/src/audio/audio.vala @@ -0,0 +1,83 @@ +/* Copyright 2012-2013, Sebastian Reichel <sre@ring0.de> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +[DBus (name = "io.mainframe.shopsystem.AudioPlayer")] +public class AudioPlayerImplementation { + private dynamic Gst.Element p; + string path; + + public signal void end_of_stream(); + + private bool bus_callback(Gst.Bus bus, Gst.Message message) { + switch(message.type) { + case Gst.MessageType.EOS: + end_of_stream(); + break; + } + + return true; + } + + public AudioPlayerImplementation() { + path = Environment.get_current_dir()+"/sounds/"; + + var alsa = Gst.ElementFactory.make("alsasink", "alsa"); + p = Gst.ElementFactory.make("playbin2", "play"); + p.set("audio-sink", alsa); + p.get_bus().add_watch(bus_callback); + } + + public void play_system(string file) { + p.set_state(Gst.State.NULL); + p.uri = "file://" + path + "system/"+file; + p.set_state(Gst.State.PLAYING); + } + + private string[] get_files(string dir) { + try { + var directory = File.new_for_path(dir); + var enumerator = directory.enumerate_children(FileAttribute.STANDARD_NAME, 0); + string[] result = {}; + + FileInfo file_info; + while ((file_info = enumerator.next_file ()) != null) { + result += file_info.get_name(); + } + + return result; + } catch (Error e) { + // TODO + //write_to_log("Error: %s\n", e.message); + return {}; + } + } + + private string get_random_file(string dir) { + var files = get_files(dir); + var index = Random.int_range(0, files.length); + return files[index]; + } + + public string get_random_user_theme() { + return get_random_file(path + "user/"); + } + + public void play_user(string theme, string type) { + p.set_state(Gst.State.NULL); + var file = get_random_file(path + "user/" + theme+ "/" + type); + p.uri = "file://" + path + "user/" + theme+ "/" + type + "/" + file; + p.set_state(Gst.State.PLAYING); + } +} diff --git a/src/audio/main.vala b/src/audio/main.vala new file mode 100644 index 0000000..f3f64f4 --- /dev/null +++ b/src/audio/main.vala @@ -0,0 +1,38 @@ +/* Copyright 2013, Sebastian Reichel <sre@ring0.de> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +AudioPlayerImplementation player; + +public static int main(string[] args) { + Bus.own_name( + BusType.SESSION, + "io.mainframe.shopsystem.AudioPlayer", + BusNameOwnerFlags.NONE, + on_bus_aquired, + () => {}, + () => stderr.printf("Could not aquire name\n")); + + new MainLoop().run(); + + return 0; +} + +void on_bus_aquired(DBusConnection con) { + try { + con.register_object("/io/mainframe/shopsystem/audio", player); + } catch(IOError e) { + stderr.printf("Could not register service\n"); + } +} |