ref: 40e9de2fef1b833b6dbea8ad18f0afd24b12b9f1
parent: 00a003bb78785020d0e543f813c77b97c0d56067
author: qwx <qwx@sciops.net>
date: Wed Jan 15 20:23:53 EST 2025
add npe-sdl-mixer: use play(1) instead of games/midi
--- /dev/null
+++ b/npe-sdl-mixer
@@ -1,0 +1,82 @@
+diff 85aac117f40895565f61eb703055a29df3c7539f uncommitted
+--- a/libnpe_sdl2/mixer.c
++++ b/libnpe_sdl2/mixer.c
+@@ -2,14 +2,8 @@
+
+ #include <SDL2/SDL_mixer.h>
+
+-int audiofd = -1;
+-int musicpipe[2] = {-1, -1};
+-
+ static int forkerpid = -1;
+-static int audiopid = -1;
+
+-void musicproc(void *);
+-
+ static int musicvol = 128;
+ static int musicpaused = 0;
+
+@@ -124,9 +118,6 @@
+ void
+ Mix_CloseAudio(void)
+ {
+- if(audiopid > 0)
+- postnote(PNPROC, audiopid, "quit");
+- audiopid = -1;
+ }
+
+ int
+@@ -142,11 +133,6 @@
+ sysfatal("exec: %r\n");
+ }
+ waitpid();
+- pipe(musicpipe);
+- if(fork() == 0){
+- musicproc(nil);
+- sysfatal("exec musicproc: %r");
+- }
+ return flags;
+ }
+
+@@ -209,12 +195,10 @@
+
+ n = loops;
+ while(loops == -1 || n-- > 0){
+- switch(rfork(RFPROC|RFFDG)){
++ switch(rfork(RFPROC|RFCFDG)){
+ case 0:
+- dup(musicpipe[1], 1);
+- close(musicpipe[1]);
+- close(musicpipe[0]);
+- execl("/bin/games/midi", "midi", "-c", music->loc, nil);
++ close(2);
++ execl("/bin/play", "play", music->loc, nil);
+ sysfatal("exec: %r");
+ break;
+ default:
+@@ -261,25 +245,4 @@
+ if(freesrc)
+ SDL_RWclose(src);
+ return m;
+-}
+-
+-void
+-musicproc(void *)
+-{
+- int fd;
+- static char buf[8192];
+- int n;
+-
+- fd = open("/dev/audio", OWRITE);
+- if(fd < 0)
+- sysfatal("musicproc: %r");
+-
+- close(musicpipe[1]);
+- threadsetname("musicproc");
+- for(;;){
+- n = read(musicpipe[0], buf, sizeof buf);
+- if(n < 0)
+- threadexits(nil);
+- write(fd, buf, n);
+- }
+ }