aboutsummaryrefslogtreecommitdiff
path: root/musw.c
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2023-05-23 15:45:13 +0000
committerrodri <rgl@antares-labs.eu>2023-05-23 15:45:13 +0000
commit29c02c33749f9ca21ffa1c22cc2cc37f58584467 (patch)
tree8b3a096c858f7f8ae48b99009740b62de5a38b29 /musw.c
parent5a725b7c6a1c22800656f218e46b5b16b0d21884 (diff)
downloadmusw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.tar.gz
musw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.tar.bz2
musw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.zip
integrated cmixer for sound and sfx.
fixed the vfx drawing procedure so that it treats p as the center when rendering the sprite.
Diffstat (limited to 'musw.c')
-rw-r--r--musw.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/musw.c b/musw.c
index ef5d331..ef75c9f 100644
--- a/musw.c
+++ b/musw.c
@@ -11,6 +11,7 @@
#include <geometry.h>
#include "dat.h"
#include "fns.h"
+#include "cmixer.h"
enum {
GSIntro,
@@ -676,6 +677,24 @@ State *playing_δ(State *s, void*)
}
void
+soundproc(void *)
+{
+ Biobuf *aout;
+ uchar adata[512];
+
+ threadsetname("soundproc");
+
+ aout = Bopen("/dev/audio", OWRITE);
+ if(aout == nil)
+ sysfatal("Bopen: %r");
+
+ for(;;){
+ cm_process((void *)adata, sizeof(adata)/2);
+ Bwrite(aout, adata, sizeof adata);
+ }
+}
+
+void
usage(void)
{
fprint(2, "usage: %s [-dg] server\n", argv0);
@@ -690,6 +709,7 @@ threadmain(int argc, char *argv[])
char *server;
int fd;
Vfx *vfx;
+ cm_Source *bgsound;
Mousectl *mc;
Ioproc *io;
@@ -717,6 +737,9 @@ threadmain(int argc, char *argv[])
sysfatal("initdraw: %r");
if((mc = initmouse(nil, screen)) == nil)
sysfatal("initmouse: %r");
+ cm_init(44100);
+ cm_set_master_gain(0.5);
+
display->locking = 1;
unlockdisplay(display);
@@ -751,6 +774,13 @@ threadmain(int argc, char *argv[])
vfxtab[VFX_BULLET_EXPLOSION] = readpngsprite("assets/vfx/bullet.explosion.png", ZP, Rect(0, 0, 32, 32), 12, 100);
initvfx(&vfxqueue);
+ bgsound = cm_new_source_from_file("assets/sfx/intro.wav");
+ if(bgsound == nil)
+ sysfatal("cm_new_source_from_file: %s", cm_get_error());
+ cm_play(bgsound);
+
+ proccreate(soundproc, nil, mainstacksize);
+
gamestates[GSIntro].δ = intro_δ;
gamestates[GSConnecting].δ = connecting_δ;
gamestates[GSMatching].δ = matching_δ;