summaryrefslogtreecommitdiffstats
path: root/player.c
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2021-12-04 13:48:01 +0100
committerLouis Burda <quent.burda@gmail.com>2021-12-20 15:31:16 +0100
commit9fe644f0d99375ffd3011d8828f7dbd0fb103af0 (patch)
tree71ed89f1c7316dba818bc921d772aaa1fc957dab /player.c
parentd68d0f39ab7675745e7d177f6774736f7ec58783 (diff)
downloadtmus-9fe644f0d99375ffd3011d8828f7dbd0fb103af0.tar.gz
tmus-9fe644f0d99375ffd3011d8828f7dbd0fb103af0.zip
Added more gui interaction
Diffstat (limited to 'player.c')
-rw-r--r--player.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/player.c b/player.c
new file mode 100644
index 0000000..c5724ab
--- /dev/null
+++ b/player.c
@@ -0,0 +1,113 @@
+#include "player.h"
+
+#include "portaudio.h"
+#include "sndfile.h"
+
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+static struct player player_static;
+struct player *player;
+
+struct player *
+player_thread()
+{
+ struct player *player;
+ pid_t pid;
+
+ player = mmap(&player_static, sizeof(struct player),
+ PROT_READ | PROT_WRITE, MAP_SHARED, -1, 0);
+ player->action = PLAYER_NONE;
+ player->resp = PLAYER_NOTSET;
+ player->alive = 1;
+
+ pid = fork();
+ if (!pid) {
+ player_main();
+ player->alive = 0;
+ exit(0);
+ }
+
+ player->pid = pid;
+
+ return player;
+}
+
+void
+player_main(void)
+{
+ PaStream *stream;
+ int status;
+
+ if (Pa_Initialize() != paNoError)
+ return;
+
+ while (player->action != PLAYER_EXIT) {
+ player->resp = PLAYER_NOTSET;
+ switch (player->action) {
+ case PLAYER_PLAY:
+ player->resp = player_play();
+ break;
+ case PLAYER_PAUSE:
+ player->resp = player_pause();
+ break;
+ case PLAYER_SKIP:
+ player->resp = player_skip();
+ break;
+ case PLAYER_PREV:
+ player->resp = player_prev();
+ break;
+ }
+ Pa_Sleep(100);
+ }
+
+ Pa_Terminate();
+}
+
+int
+player_alive(void)
+{
+ return player->alive && !kill(player->pid, 0);
+}
+
+void
+player_loadfile(const char *file)
+{
+ ASSERT(player_alive());
+ player_action(PLAYER_STOP);
+}
+
+void
+player_action(int action)
+{
+ ASSERT(player_alive());
+ player->action = action;
+}
+
+int
+player_play(void)
+{
+ return PLAYER_OK;
+}
+
+int
+player_pause(void)
+{
+ return PLAYER_OK;
+}
+
+int
+player_skip(void)
+{
+ return PLAYER_OK;
+}
+
+int
+player_prev(void)
+{
+ return PLAYER_OK;
+}
+
+
+