diff options
| author | Louis Burda <quent.burda@gmail.com> | 2021-12-04 13:48:01 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2021-12-20 15:31:16 +0100 |
| commit | 9fe644f0d99375ffd3011d8828f7dbd0fb103af0 (patch) | |
| tree | 71ed89f1c7316dba818bc921d772aaa1fc957dab /player.c | |
| parent | d68d0f39ab7675745e7d177f6774736f7ec58783 (diff) | |
| download | tmus-9fe644f0d99375ffd3011d8828f7dbd0fb103af0.tar.gz tmus-9fe644f0d99375ffd3011d8828f7dbd0fb103af0.zip | |
Added more gui interaction
Diffstat (limited to 'player.c')
| -rw-r--r-- | player.c | 113 |
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; +} + + + |
