pkgsrc-wip/jazz/patches/patch-ak
Ben Collver 9c910f8e14 JAZZ++ is a full featured, audio capable midi sequencer for Linux and
Windows. JAZZ++ offers a lot of functions normally only found in expensive
sequencer software, and is used by professionals and hobby musicians all
over the world.
2003-05-21 14:57:49 +00:00

122 lines
4.8 KiB
Text

$NetBSD: patch-ak,v 1.1.1.1 2003/05/21 14:57:50 bencollver Exp $
--- src/player.h.orig Fri Mar 3 12:21:57 2000
+++ src/player.h
@@ -466,7 +466,117 @@ class tNullPlayer : public tPlayer
#if defined DEV_SEQUENCER2
+#ifdef __NetBSD__
+#include <soundcard.h>
+#include <sys/midiio.h>
+void seqbuf_dump(void);
+#define CTRL_PITCH_BENDER 255
+#define CTRL_PITCH_BENDER_RANGE 254
+#define CTL_PAN 0x0a
+#define SNDCTL_SEQ_OUTOFBAND SEQUENCER_OUTOFBAND
+#define SNDCTL_SEQ_RESET SEQUENCER_RESET
+#define SNDCTL_TMR_TIMEBASE SEQUENCER_TMR_TIMEBASE
+#define SNDCTL_TMR_TEMPO SEQUENCER_TMR_TEMPO
+#define EV_CHN_COMMON SEQ_CHN_COMMON
+#define EV_CHN_VOICE SEQ_CHN_VOICE
+#define EV_TIMING SEQ_TIMING
+#define EV_SYSEX 0x94
+#define SEQ_CONTROLLER SEQOLD_CONTROLLER
+#define SEQ_EXTENDED SEQOLD_EXTENDED
+#define SNDCTL_SYNTH_INFO SEQUENCER_INFO
+#define SNDCARD_MPU401 SYNTH_SUB_MIDI_TYPE_MPU401
+#define SNDCTL_SEQ_NRSYNTHS SEQUENCER_NRSYNTHS
+#define SYSEX_PATCH SEQ_SYSEX_PATCH
+#define TMR_INTERNAL SEQUENCER_TMR_INTERNAL
+#define TMR_EXTERNAL 0x00000002
+#define TMR_MODE_MIDI 0x00000010
+#define TMR_MODE_FSK 0x00000020
+#define SNDCTL_TMR_SOURCE SEQUENCER_TMR_SOURCE
+#define SNDCTL_SEQ_SYNC SEQUENCER_SYNC
+#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
+#define SEQ_USE_EXTBUF() extern unsigned char _seqbuf[]; extern int _seqbuflen;extern int _seqbufptr
+#define _SEQ_ADVBUF(len) _seqbufptr += len
+#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
+#define SEQ_DUMPBUF seqbuf_dump
+#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
+ {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ _seqbuf[_seqbufptr+2] = (event);\
+ _seqbuf[_seqbufptr+3] = (chn);\
+ _seqbuf[_seqbufptr+4] = (p1);\
+ _seqbuf[_seqbufptr+5] = (p2);\
+ *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
+ _SEQ_ADVBUF(8);}
+#define _CHN_VOICE(dev, event, chn, note, parm) \
+ {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ _seqbuf[_seqbufptr+2] = (event);\
+ _seqbuf[_seqbufptr+3] = (chn);\
+ _seqbuf[_seqbufptr+4] = (note);\
+ _seqbuf[_seqbufptr+5] = (parm);\
+ _seqbuf[_seqbufptr+6] = (0);\
+ _seqbuf[_seqbufptr+7] = 0;\
+ _SEQ_ADVBUF(8);}
+#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
+ _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER; \
+ _seqbuf[_seqbufptr+2] = (dev);\
+ _seqbuf[_seqbufptr+3] = (voice);\
+ _seqbuf[_seqbufptr+4] = (controller);\
+ _seqbuf[_seqbufptr+5] = ((value)&0xff); \
+ _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
+ _seqbuf[_seqbufptr+7] = 0;\
+ _SEQ_ADVBUF(8);}
+#define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr+0] = EV_TIMING; \
+ _seqbuf[_seqbufptr+1] = (ev); \
+ _seqbuf[_seqbufptr+2] = 0;\
+ _seqbuf[_seqbufptr+3] = 0;\
+ *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
+ _SEQ_ADVBUF(8);}
+#undef SEQ_SYSEX
+#define SEQ_SYSEX(dev, buf, len) \
+ {int ii, ll=(len); \
+ unsigned char *bufp=buf;\
+ if (ll>6)ll=6;\
+ _SEQ_NEEDBUF(8);\
+ _seqbuf[_seqbufptr] = EV_SYSEX;\
+ _seqbuf[_seqbufptr+1] = (dev);\
+ for(ii=0;ii<ll;ii++)\
+ _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
+ for(ii=ll;ii<6;ii++)\
+ _seqbuf[_seqbufptr+ii+2] = 0xff;\
+ _SEQ_ADVBUF(8);}
+#define SEQ_PGM_CHANGE(dev, chn, patch) \
+ _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
+#define SEQ_START_NOTE(dev, chn, note, vol) \
+ _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
+#define SEQ_STOP_NOTE(dev, chn, note, vol) \
+ _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
+#define SEQ_SET_PATCH SEQ_PGM_CHANGE
+#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
+ _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
+#define SEQ_CHN_PRESSURE(dev, chn, pressure) \
+ _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
+#define SEQ_CONTROL(dev, chn, controller, value) \
+ _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
+#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
+#define SEQ_BENDER(dev, chn, value) \
+ _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
+#define SEQ_WRPATCH(patchx, len) \
+ {if (_seqbufptr) SEQ_DUMPBUF();\
+ if (write(seqfd, (char*)(patchx), len)==-1) \
+ perror("Write patch: /dev/sequencer");}
+#define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
+#define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
+#define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
+#define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
+#define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
+#else
#include <sys/soundcard.h>
+#endif
SEQ_USE_EXTBUF();
extern int seqfd;