Added threading
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -53,3 +53,5 @@ dkms.conf
|
|||||||
|
|
||||||
*.mp3
|
*.mp3
|
||||||
/csoundbox
|
/csoundbox
|
||||||
|
/sounds
|
||||||
|
/csoundbox.cfg
|
||||||
|
23
csoundbox.c
23
csoundbox.c
@@ -3,6 +3,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#include <ao/ao.h>
|
||||||
|
|
||||||
#include "csoundbox.h"
|
#include "csoundbox.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@@ -50,6 +51,7 @@ int main(int argc, char *argv[]) {
|
|||||||
inputLocal();
|
inputLocal();
|
||||||
}
|
}
|
||||||
cfgdestroy();
|
cfgdestroy();
|
||||||
|
ao_shutdown();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,13 +59,15 @@ void inputLocal(void) {
|
|||||||
initscr();
|
initscr();
|
||||||
nonl(); //no newline
|
nonl(); //no newline
|
||||||
noecho();
|
noecho();
|
||||||
keypad(stdscr, FALSE); //Disable the F1-12 keypad
|
keypad(stdscr, TRUE); //Disable the F1-12 keypad
|
||||||
curs_set(0); //Disable the cursor
|
curs_set(0); //Disable the cursor
|
||||||
|
|
||||||
printCursesWelcome();
|
printCursesWelcome();
|
||||||
|
|
||||||
char input;
|
int input;
|
||||||
while ((input = getch()) != 13) {
|
//Key 13 --> ENTER
|
||||||
|
//Key 265 --> F1
|
||||||
|
while ((input = getch()) != 13 && input != 265) {
|
||||||
playSound(lookupSounds(input));
|
playSound(lookupSounds(input));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,17 +78,22 @@ void inputNetwork(char *server) {
|
|||||||
initscr();
|
initscr();
|
||||||
nonl(); //no newline
|
nonl(); //no newline
|
||||||
noecho();
|
noecho();
|
||||||
keypad(stdscr, FALSE); //Disable the F1-12 keypad
|
keypad(stdscr, TRUE); //Disable the F1-12 keypad
|
||||||
curs_set(0); //Disable the cursor
|
curs_set(0); //Disable the cursor
|
||||||
|
|
||||||
printCursesWelcome();
|
printCursesWelcome();
|
||||||
|
|
||||||
char input[2];
|
char input[2];
|
||||||
while ((input[0] = getch()) != 13) {
|
int inp;
|
||||||
|
//Key 13 --> ENTER
|
||||||
|
//Key 265 --> F1
|
||||||
|
while ((input[0] = inp = getch()) != 13 && inp != 265) {
|
||||||
input[1] = '\0';
|
input[1] = '\0';
|
||||||
sendKeyUDP(server, input);
|
sendKeyUDP(server, input);
|
||||||
}
|
}
|
||||||
|
if (inp == 265) {
|
||||||
|
sendKeyUDP(server, "exit");
|
||||||
|
}
|
||||||
endwin();
|
endwin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +104,9 @@ void printCursesWelcome(void) {
|
|||||||
y /= 2;
|
y /= 2;
|
||||||
x /= 2;
|
x /= 2;
|
||||||
const char *msg = "Press enter to exit.";
|
const char *msg = "Press enter to exit.";
|
||||||
|
const char *msg2 = "Press F1 to kill the server + client";
|
||||||
mvprintw(y, x - (strlen(msg) / 2), msg);
|
mvprintw(y, x - (strlen(msg) / 2), msg);
|
||||||
|
mvprintw(y + 1, x - (strlen(msg2) / 2), msg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
10
csoundbox.cfg.example
Normal file
10
csoundbox.cfg.example
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
soundmap = {
|
||||||
|
sounds = ( {path = "ballsofsteel.mp3";
|
||||||
|
key = "a"},
|
||||||
|
{path = "neck.mp3";
|
||||||
|
key = "b"}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
udpport = 8888;
|
4
makefile
4
makefile
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
VERSION = 1.0
|
VERSION = 1.0
|
||||||
CC = cc
|
CC = cc
|
||||||
CFLAGS = -Wall -O3 -DVERSION=\"$(VERSION)\"
|
CFLAGS = -Wall -g -O3 -DVERSION=\"$(VERSION)\"
|
||||||
#LDFLAGS = -lm -lpthread `gtk-config --cflags` `gtk-config --libs` -lgthread
|
#LDFLAGS = -lm -lpthread `gtk-config --cflags` `gtk-config --libs` -lgthread
|
||||||
LDFLAGS = -lmpg123 -lao -lconfig -lncurses
|
LDFLAGS = -lmpg123 -lao -lconfig -lncurses -lpthread
|
||||||
|
|
||||||
OBJ = csoundbox.o config.o sound.o udpserver.o
|
OBJ = csoundbox.o config.o sound.o udpserver.o
|
||||||
|
|
||||||
|
24
sound.c
24
sound.c
@@ -1,12 +1,26 @@
|
|||||||
#include <ao/ao.h>
|
#include <ao/ao.h>
|
||||||
#include <mpg123.h>
|
#include <mpg123.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <error.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ncurses.h>
|
||||||
|
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
#include "config.h"
|
||||||
#define BITS 8
|
#define BITS 8
|
||||||
|
|
||||||
|
|
||||||
void playSound(const char *path) {
|
void playSound(const char *path) {
|
||||||
|
pthread_t pth; //thread identifier
|
||||||
|
//Create thread
|
||||||
|
pthread_create(&pth, NULL, playThreadFunc, (void *) path);
|
||||||
|
pthread_detach(pth); //detach to call this function multiple times
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void *playThreadFunc(void *arg) {
|
||||||
|
const char *path = (const char *) arg;
|
||||||
|
|
||||||
mpg123_handle *mh;
|
mpg123_handle *mh;
|
||||||
unsigned char *buffer;
|
unsigned char *buffer;
|
||||||
size_t buffer_size;
|
size_t buffer_size;
|
||||||
@@ -50,5 +64,9 @@ void playSound(const char *path) {
|
|||||||
mpg123_close(mh);
|
mpg123_close(mh);
|
||||||
mpg123_delete(mh);
|
mpg123_delete(mh);
|
||||||
mpg123_exit();
|
mpg123_exit();
|
||||||
ao_shutdown();
|
//ao_shutdown(); //don't call inside a thread
|
||||||
|
|
||||||
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user