soundcard.h
0001: #ifndef SOUNDCARD_H
0002: #define SOUNDCARD_H
0003:
0004:
0005:
0006:
0007:
0008:
0009:
0010:
0011:
0012:
0013:
0014:
0015:
0016:
0017:
0018:
0019:
0020:
0021:
0022:
0023:
0024:
0025:
0026:
0027:
0028:
0029:
0030:
0031:
0032:
0033:
0034:
0035:
0036: #define SOUND_VERSION 0x030802
0037: #define OPEN_SOUND_SYSTEM
0038:
0039:
0040: #include <linux/ioctl.h>
0041:
0042:
0043: # include <endian.h>
0044:
0045:
0046:
0047:
0048:
0049: #define SNDCARD_ADLIB 1
0050: #define SNDCARD_SB 2
0051: #define SNDCARD_PAS 3
0052: #define SNDCARD_GUS 4
0053: #define SNDCARD_MPU401 5
0054: #define SNDCARD_SB16 6
0055: #define SNDCARD_SB16MIDI 7
0056: #define SNDCARD_UART6850 8
0057: #define SNDCARD_GUS16 9
0058: #define SNDCARD_MSS 10
0059: #define SNDCARD_PSS 11
0060: #define SNDCARD_SSCAPE 12
0061: #define SNDCARD_PSS_MPU 13
0062: #define SNDCARD_PSS_MSS 14
0063: #define SNDCARD_SSCAPE_MSS 15
0064: #define SNDCARD_TRXPRO 16
0065: #define SNDCARD_TRXPRO_SB 17
0066: #define SNDCARD_TRXPRO_MPU 18
0067: #define SNDCARD_MAD16 19
0068: #define SNDCARD_MAD16_MPU 20
0069: #define SNDCARD_CS4232 21
0070: #define SNDCARD_CS4232_MPU 22
0071: #define SNDCARD_MAUI 23
0072: #define SNDCARD_PSEUDO_MSS 24
0073: #define SNDCARD_GUSPNP 25
0074: #define SNDCARD_UART401 26
0075:
0076:
0077:
0078:
0079:
0080:
0081: #ifndef _SIOWR
0082: #if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
0083:
0084: #define SIOCPARM_MASK IOCPARM_MASK
0085: #define SIOC_VOID IOC_VOID
0086: #define SIOC_OUT IOC_OUT
0087: #define SIOC_IN IOC_IN
0088: #define SIOC_INOUT IOC_INOUT
0089: #define _SIOC_SIZE _IOC_SIZE
0090: #define _SIOC_DIR _IOC_DIR
0091: #define _SIOC_NONE _IOC_NONE
0092: #define _SIOC_READ _IOC_READ
0093: #define _SIOC_WRITE _IOC_WRITE
0094: #define _SIO _IO
0095: #define _SIOR _IOR
0096: #define _SIOW _IOW
0097: #define _SIOWR _IOWR
0098: #else
0099:
0100:
0101:
0102:
0103:
0104:
0105:
0106:
0107: #define SIOCPARM_MASK 0x1fff
0108: #define SIOC_VOID 0x00000000
0109: #define SIOC_OUT 0x20000000
0110: #define SIOC_IN 0x40000000
0111: #define SIOC_INOUT (SIOC_IN|SIOC_OUT)
0112:
0113: #define _SIO(x,y) ((int)(SIOC_VOID|(x<<8)|y))
0114: #define _SIOR(x,y,t) ((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
0115: #define _SIOW(x,y,t) ((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
0116:
0117: #define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
0118: #define _SIOC_SIZE(x) ((x>>16)&SIOCPARM_MASK)
0119: #define _SIOC_DIR(x) (x & 0xf0000000)
0120: #define _SIOC_NONE SIOC_VOID
0121: #define _SIOC_READ SIOC_OUT
0122: #define _SIOC_WRITE SIOC_IN
0123: # endif
0124: #endif
0125:
0126: #define SNDCTL_SEQ_RESET _SIO ('Q', 0)
0127: #define SNDCTL_SEQ_SYNC _SIO ('Q', 1)
0128: #define SNDCTL_SYNTH_INFO _SIOWR('Q', 2, struct synth_info)
0129: #define SNDCTL_SEQ_CTRLRATE _SIOWR('Q', 3, int)
0130: #define SNDCTL_SEQ_GETOUTCOUNT _SIOR ('Q', 4, int)
0131: #define SNDCTL_SEQ_GETINCOUNT _SIOR ('Q', 5, int)
0132: #define SNDCTL_SEQ_PERCMODE _SIOW ('Q', 6, int)
0133: #define SNDCTL_FM_LOAD_INSTR _SIOW ('Q', 7, struct sbi_instrument)
0134: #define SNDCTL_SEQ_TESTMIDI _SIOW ('Q', 8, int)
0135: #define SNDCTL_SEQ_RESETSAMPLES _SIOW ('Q', 9, int)
0136: #define SNDCTL_SEQ_NRSYNTHS _SIOR ('Q',10, int)
0137: #define SNDCTL_SEQ_NRMIDIS _SIOR ('Q',11, int)
0138: #define SNDCTL_MIDI_INFO _SIOWR('Q',12, struct midi_info)
0139: #define SNDCTL_SEQ_THRESHOLD _SIOW ('Q',13, int)
0140: #define SNDCTL_SYNTH_MEMAVL _SIOWR('Q',14, int)
0141: #define SNDCTL_FM_4OP_ENABLE _SIOW ('Q',15, int)
0142: #define SNDCTL_SEQ_PANIC _SIO ('Q',17)
0143: #define SNDCTL_SEQ_OUTOFBAND _SIOW ('Q',18, struct seq_event_rec)
0144: #define SNDCTL_SEQ_GETTIME _SIOR ('Q',19, int)
0145: #define SNDCTL_SYNTH_ID _SIOWR('Q',20, struct synth_info)
0146: #define SNDCTL_SYNTH_CONTROL _SIOWR('Q',21, struct synth_control)
0147: #define SNDCTL_SYNTH_REMOVESAMPLE _SIOWR('Q',22, struct remove_sample)
0148:
0149: typedef struct synth_control
0150: {
0151: int devno;
0152: char data[4000];
0153: }synth_control;
0154:
0155: typedef struct remove_sample
0156: {
0157: int devno;
0158: int bankno;
0159: int instrno;
0160: } remove_sample;
0161:
0162: typedef struct seq_event_rec {
0163: unsigned char arr[8];
0164: } seq_event_rec;
0165:
0166: #define SNDCTL_TMR_TIMEBASE _SIOWR('T', 1, int)
0167: #define SNDCTL_TMR_START _SIO ('T', 2)
0168: #define SNDCTL_TMR_STOP _SIO ('T', 3)
0169: #define SNDCTL_TMR_CONTINUE _SIO ('T', 4)
0170: #define SNDCTL_TMR_TEMPO _SIOWR('T', 5, int)
0171: #define SNDCTL_TMR_SOURCE _SIOWR('T', 6, int)
0172: # define TMR_INTERNAL 0x00000001
0173: # define TMR_EXTERNAL 0x00000002
0174: # define TMR_MODE_MIDI 0x00000010
0175: # define TMR_MODE_FSK 0x00000020
0176: # define TMR_MODE_CLS 0x00000040
0177: # define TMR_MODE_SMPTE 0x00000080
0178: #define SNDCTL_TMR_METRONOME _SIOW ('T', 7, int)
0179: #define SNDCTL_TMR_SELECT _SIOW ('T', 8, int)
0180:
0181:
0182:
0183:
0184:
0185: #define _LINUX_PATCHKEY_H_INDIRECT
0186: #include <linux/patchkey.h>
0187: #undef _LINUX_PATCHKEY_H_INDIRECT
0188:
0189: #if defined(__BYTE_ORDER)
0190: # if __BYTE_ORDER == __BIG_ENDIAN
0191: # define AFMT_S16_NE AFMT_S16_BE
0192: # elif __BYTE_ORDER == __LITTLE_ENDIAN
0193: # define AFMT_S16_NE AFMT_S16_LE
0194: # else
0195: # error "could not determine byte order"
0196: # endif
0197: #endif
0198:
0199:
0200:
0201:
0202:
0203:
0204:
0205:
0206:
0207:
0208:
0209: struct patch_info {
0210: unsigned short key;
0211: #define WAVE_PATCH _PATCHKEY(0x04)
0212: #define GUS_PATCH WAVE_PATCH
0213: #define WAVEFRONT_PATCH _PATCHKEY(0x06)
0214:
0215: short device_no;
0216: short instr_no;
0217:
0218: unsigned int mode;
0219:
0220:
0221:
0222:
0223: #define WAVE_16_BITS 0x01
0224: #define WAVE_UNSIGNED 0x02
0225: #define WAVE_LOOPING 0x04
0226: #define WAVE_BIDIR_LOOP 0x08
0227: #define WAVE_LOOP_BACK 0x10
0228: #define WAVE_SUSTAIN_ON 0x20
0229: #define WAVE_ENVELOPES 0x40
0230: #define WAVE_FAST_RELEASE 0x80
0231:
0232:
0233: #define WAVE_VIBRATO 0x00010000
0234: #define WAVE_TREMOLO 0x00020000
0235: #define WAVE_SCALE 0x00040000
0236: #define WAVE_FRACTIONS 0x00080000
0237:
0238: #define WAVE_ROM 0x40000000
0239: #define WAVE_MULAW 0x20000000
0240:
0241:
0242: int len;
0243: int loop_start, loop_end;
0244:
0245:
0246:
0247:
0248:
0249:
0250:
0251:
0252:
0253:
0254:
0255:
0256:
0257:
0258:
0259:
0260:
0261: unsigned int base_freq;
0262: unsigned int base_note;
0263: unsigned int high_note;
0264: unsigned int low_note;
0265: int panning;
0266: int detuning;
0267:
0268:
0269:
0270:
0271: unsigned char env_rate[ 6 ];
0272: unsigned char env_offset[ 6 ];
0273:
0274:
0275:
0276:
0277:
0278:
0279:
0280: unsigned char tremolo_sweep;
0281: unsigned char tremolo_rate;
0282: unsigned char tremolo_depth;
0283:
0284: unsigned char vibrato_sweep;
0285: unsigned char vibrato_rate;
0286: unsigned char vibrato_depth;
0287:
0288: int scale_frequency;
0289: unsigned int scale_factor;
0290:
0291: int volume;
0292: int fractions;
0293: int reserved1;
0294: int spare[2];
0295: char data[1];
0296: };
0297:
0298: struct sysex_info {
0299: short key;
0300: #define SYSEX_PATCH _PATCHKEY(0x05)
0301: #define MAUI_PATCH _PATCHKEY(0x06)
0302: short device_no;
0303: int len;
0304: unsigned char data[1];
0305: };
0306:
0307:
0308:
0309:
0310:
0311:
0312:
0313:
0314:
0315:
0316:
0317:
0318:
0319:
0320:
0321:
0322:
0323:
0324:
0325:
0326:
0327: #define SEQ_NOTEOFF 0
0328: #define SEQ_FMNOTEOFF SEQ_NOTEOFF
0329: #define SEQ_NOTEON 1
0330: #define SEQ_FMNOTEON SEQ_NOTEON
0331: #define SEQ_WAIT TMR_WAIT_ABS
0332: #define SEQ_PGMCHANGE 3
0333: #define SEQ_FMPGMCHANGE SEQ_PGMCHANGE
0334: #define SEQ_SYNCTIMER TMR_START
0335: #define SEQ_MIDIPUTC 5
0336: #define SEQ_DRUMON 6
0337: #define SEQ_DRUMOFF 7
0338: #define SEQ_ECHO TMR_ECHO
0339: #define SEQ_AFTERTOUCH 9
0340: #define SEQ_CONTROLLER 10
0341:
0342:
0343:
0344:
0345:
0346:
0347:
0348:
0349:
0350:
0351:
0352:
0353:
0354: #define CTL_BANK_SELECT 0x00
0355: #define CTL_MODWHEEL 0x01
0356: #define CTL_BREATH 0x02
0357:
0358: #define CTL_FOOT 0x04
0359: #define CTL_PORTAMENTO_TIME 0x05
0360: #define CTL_DATA_ENTRY 0x06
0361: #define CTL_MAIN_VOLUME 0x07
0362: #define CTL_BALANCE 0x08
0363:
0364: #define CTL_PAN 0x0a
0365: #define CTL_EXPRESSION 0x0b
0366:
0367:
0368:
0369:
0370: #define CTL_GENERAL_PURPOSE1 0x10
0371: #define CTL_GENERAL_PURPOSE2 0x11
0372: #define CTL_GENERAL_PURPOSE3 0x12
0373: #define CTL_GENERAL_PURPOSE4 0x13
0374:
0375:
0376:
0377:
0378:
0379:
0380:
0381:
0382:
0383: #define CTL_DAMPER_PEDAL 0x40
0384: #define CTL_SUSTAIN 0x40
0385: #define CTL_HOLD 0x40
0386: #define CTL_PORTAMENTO 0x41
0387: #define CTL_SOSTENUTO 0x42
0388: #define CTL_SOFT_PEDAL 0x43
0389:
0390: #define CTL_HOLD2 0x45
0391:
0392:
0393: #define CTL_GENERAL_PURPOSE5 0x50
0394: #define CTL_GENERAL_PURPOSE6 0x51
0395: #define CTL_GENERAL_PURPOSE7 0x52
0396: #define CTL_GENERAL_PURPOSE8 0x53
0397:
0398: #define CTL_EXT_EFF_DEPTH 0x5b
0399: #define CTL_TREMOLO_DEPTH 0x5c
0400: #define CTL_CHORUS_DEPTH 0x5d
0401: #define CTL_DETUNE_DEPTH 0x5e
0402: #define CTL_CELESTE_DEPTH 0x5e
0403: #define CTL_PHASER_DEPTH 0x5f
0404: #define CTL_DATA_INCREMENT 0x60
0405: #define CTL_DATA_DECREMENT 0x61
0406: #define CTL_NONREG_PARM_NUM_LSB 0x62
0407: #define CTL_NONREG_PARM_NUM_MSB 0x63
0408: #define CTL_REGIST_PARM_NUM_LSB 0x64
0409: #define CTL_REGIST_PARM_NUM_MSB 0x65
0410:
0411:
0412:
0413:
0414: #define CTRL_PITCH_BENDER 255
0415: #define CTRL_PITCH_BENDER_RANGE 254
0416: #define CTRL_EXPRESSION 253
0417: #define CTRL_MAIN_VOLUME 252
0418: #define SEQ_BALANCE 11
0419: #define SEQ_VOLMODE 12
0420:
0421:
0422:
0423:
0424:
0425: #define VOL_METHOD_ADAGIO 1
0426: #define VOL_METHOD_LINEAR 2
0427:
0428:
0429:
0430:
0431:
0432:
0433:
0434:
0435:
0436:
0437: #define SEQ_FULLSIZE 0xfd
0438:
0439:
0440:
0441:
0442:
0443:
0444:
0445:
0446:
0447:
0448:
0449:
0450:
0451:
0452:
0453:
0454:
0455:
0456:
0457:
0458: #define SEQ_PRIVATE 0xfe
0459: #define SEQ_EXTENDED 0xff
0460:
0461:
0462:
0463:
0464:
0465: typedef unsigned char sbi_instr_data[32];
0466:
0467: struct sbi_instrument {
0468: unsigned short key;
0469: #define FM_PATCH _PATCHKEY(0x01)
0470: #define OPL3_PATCH _PATCHKEY(0x03)
0471: short device;
0472: int channel;
0473: sbi_instr_data operators;
0474: };
0475:
0476: struct synth_info {
0477: char name[30];
0478: int device;
0479: int synth_type;
0480: #define SYNTH_TYPE_FM 0
0481: #define SYNTH_TYPE_SAMPLE 1
0482: #define SYNTH_TYPE_MIDI 2
0483:
0484: int synth_subtype;
0485: #define FM_TYPE_ADLIB 0x00
0486: #define FM_TYPE_OPL3 0x01
0487: #define MIDI_TYPE_MPU401 0x401
0488:
0489: #define SAMPLE_TYPE_BASIC 0x10
0490: #define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
0491: #define SAMPLE_TYPE_WAVEFRONT 0x11
0492:
0493: int perc_mode;
0494: int nr_voices;
0495: int nr_drums;
0496: int instr_bank_size;
0497: unsigned int capabilities;
0498: #define SYNTH_CAP_PERCMODE 0x00000001
0499: #define SYNTH_CAP_OPL3 0x00000002
0500: #define SYNTH_CAP_INPUT 0x00000004
0501: int dummies[19];
0502: };
0503:
0504: struct sound_timer_info {
0505: char name[32];
0506: int caps;
0507: };
0508:
0509: #define MIDI_CAP_MPU401 1
0510:
0511: struct midi_info {
0512: char name[30];
0513: int device;
0514: unsigned int capabilities;
0515: int dev_type;
0516: int dummies[18];
0517: };
0518:
0519:
0520:
0521:
0522: typedef struct {
0523: unsigned char cmd;
0524: char nr_args, nr_returns;
0525: unsigned char data[30];
0526: } mpu_command_rec;
0527:
0528: #define SNDCTL_MIDI_PRETIME _SIOWR('m', 0, int)
0529: #define SNDCTL_MIDI_MPUMODE _SIOWR('m', 1, int)
0530: #define SNDCTL_MIDI_MPUCMD _SIOWR('m', 2, mpu_command_rec)
0531:
0532:
0533:
0534:
0535:
0536: #define SNDCTL_DSP_RESET _SIO ('P', 0)
0537: #define SNDCTL_DSP_SYNC _SIO ('P', 1)
0538: #define SNDCTL_DSP_SPEED _SIOWR('P', 2, int)
0539: #define SNDCTL_DSP_STEREO _SIOWR('P', 3, int)
0540: #define SNDCTL_DSP_GETBLKSIZE _SIOWR('P', 4, int)
0541: #define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT
0542: #define SNDCTL_DSP_CHANNELS _SIOWR('P', 6, int)
0543: #define SOUND_PCM_WRITE_CHANNELS SNDCTL_DSP_CHANNELS
0544: #define SOUND_PCM_WRITE_FILTER _SIOWR('P', 7, int)
0545: #define SNDCTL_DSP_POST _SIO ('P', 8)
0546: #define SNDCTL_DSP_SUBDIVIDE _SIOWR('P', 9, int)
0547: #define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
0548:
0549:
0550: #define SNDCTL_DSP_GETFMTS _SIOR ('P',11, int)
0551: #define SNDCTL_DSP_SETFMT _SIOWR('P',5, int)
0552: # define AFMT_QUERY 0x00000000
0553: # define AFMT_MU_LAW 0x00000001
0554: # define AFMT_A_LAW 0x00000002
0555: # define AFMT_IMA_ADPCM 0x00000004
0556: # define AFMT_U8 0x00000008
0557: # define AFMT_S16_LE 0x00000010
0558: # define AFMT_S16_BE 0x00000020
0559: # define AFMT_S8 0x00000040
0560: # define AFMT_U16_LE 0x00000080
0561: # define AFMT_U16_BE 0x00000100
0562: # define AFMT_MPEG 0x00000200
0563: # define AFMT_AC3 0x00000400
0564:
0565:
0566:
0567:
0568: typedef struct audio_buf_info {
0569: int fragments;
0570: int fragstotal;
0571: int fragsize;
0572:
0573: int bytes;
0574:
0575: } audio_buf_info;
0576:
0577: #define SNDCTL_DSP_GETOSPACE _SIOR ('P',12, audio_buf_info)
0578: #define SNDCTL_DSP_GETISPACE _SIOR ('P',13, audio_buf_info)
0579: #define SNDCTL_DSP_NONBLOCK _SIO ('P',14)
0580: #define SNDCTL_DSP_GETCAPS _SIOR ('P',15, int)
0581: # define DSP_CAP_REVISION 0x000000ff
0582: # define DSP_CAP_DUPLEX 0x00000100
0583: # define DSP_CAP_REALTIME 0x00000200
0584: # define DSP_CAP_BATCH 0x00000400
0585:
0586:
0587:
0588: # define DSP_CAP_COPROC 0x00000800
0589:
0590:
0591: # define DSP_CAP_TRIGGER 0x00001000
0592: # define DSP_CAP_MMAP 0x00002000
0593: # define DSP_CAP_MULTI 0x00004000
0594: # define DSP_CAP_BIND 0x00008000
0595:
0596:
0597: #define SNDCTL_DSP_GETTRIGGER _SIOR ('P',16, int)
0598: #define SNDCTL_DSP_SETTRIGGER _SIOW ('P',16, int)
0599: # define PCM_ENABLE_INPUT 0x00000001
0600: # define PCM_ENABLE_OUTPUT 0x00000002
0601:
0602: typedef struct count_info {
0603: int bytes;
0604: int blocks;
0605: int ptr;
0606: } count_info;
0607:
0608: #define SNDCTL_DSP_GETIPTR _SIOR ('P',17, count_info)
0609: #define SNDCTL_DSP_GETOPTR _SIOR ('P',18, count_info)
0610:
0611: typedef struct buffmem_desc {
0612: unsigned *buffer;
0613: int size;
0614: } buffmem_desc;
0615: #define SNDCTL_DSP_MAPINBUF _SIOR ('P', 19, buffmem_desc)
0616: #define SNDCTL_DSP_MAPOUTBUF _SIOR ('P', 20, buffmem_desc)
0617: #define SNDCTL_DSP_SETSYNCRO _SIO ('P', 21)
0618: #define SNDCTL_DSP_SETDUPLEX _SIO ('P', 22)
0619: #define SNDCTL_DSP_GETODELAY _SIOR ('P', 23, int)
0620:
0621: #define SNDCTL_DSP_GETCHANNELMASK _SIOWR('P', 64, int)
0622: #define SNDCTL_DSP_BIND_CHANNEL _SIOWR('P', 65, int)
0623: # define DSP_BIND_QUERY 0x00000000
0624: # define DSP_BIND_FRONT 0x00000001
0625: # define DSP_BIND_SURR 0x00000002
0626: # define DSP_BIND_CENTER_LFE 0x00000004
0627: # define DSP_BIND_HANDSET 0x00000008
0628: # define DSP_BIND_MIC 0x00000010
0629: # define DSP_BIND_MODEM1 0x00000020
0630: # define DSP_BIND_MODEM2 0x00000040
0631: # define DSP_BIND_I2S 0x00000080
0632: # define DSP_BIND_SPDIF 0x00000100
0633:
0634: #define SNDCTL_DSP_SETSPDIF _SIOW ('P', 66, int)
0635: #define SNDCTL_DSP_GETSPDIF _SIOR ('P', 67, int)
0636: # define SPDIF_PRO 0x0001
0637: # define SPDIF_N_AUD 0x0002
0638: # define SPDIF_COPY 0x0004
0639: # define SPDIF_PRE 0x0008
0640: # define SPDIF_CC 0x07f0
0641: # define SPDIF_L 0x0800
0642: # define SPDIF_DRS 0x4000
0643: # define SPDIF_V 0x8000
0644:
0645:
0646:
0647:
0648:
0649:
0650:
0651:
0652:
0653:
0654:
0655:
0656: #define SNDCTL_DSP_PROFILE _SIOW ('P', 23, int)
0657: #define APF_NORMAL 0
0658: #define APF_NETWORK 1
0659: #define APF_CPUINTENS 2
0660:
0661: #define SOUND_PCM_READ_RATE _SIOR ('P', 2, int)
0662: #define SOUND_PCM_READ_CHANNELS _SIOR ('P', 6, int)
0663: #define SOUND_PCM_READ_BITS _SIOR ('P', 5, int)
0664: #define SOUND_PCM_READ_FILTER _SIOR ('P', 7, int)
0665:
0666:
0667: #define SOUND_PCM_WRITE_BITS SNDCTL_DSP_SETFMT
0668: #define SOUND_PCM_WRITE_RATE SNDCTL_DSP_SPEED
0669: #define SOUND_PCM_POST SNDCTL_DSP_POST
0670: #define SOUND_PCM_RESET SNDCTL_DSP_RESET
0671: #define SOUND_PCM_SYNC SNDCTL_DSP_SYNC
0672: #define SOUND_PCM_SUBDIVIDE SNDCTL_DSP_SUBDIVIDE
0673: #define SOUND_PCM_SETFRAGMENT SNDCTL_DSP_SETFRAGMENT
0674: #define SOUND_PCM_GETFMTS SNDCTL_DSP_GETFMTS
0675: #define SOUND_PCM_SETFMT SNDCTL_DSP_SETFMT
0676: #define SOUND_PCM_GETOSPACE SNDCTL_DSP_GETOSPACE
0677: #define SOUND_PCM_GETISPACE SNDCTL_DSP_GETISPACE
0678: #define SOUND_PCM_NONBLOCK SNDCTL_DSP_NONBLOCK
0679: #define SOUND_PCM_GETCAPS SNDCTL_DSP_GETCAPS
0680: #define SOUND_PCM_GETTRIGGER SNDCTL_DSP_GETTRIGGER
0681: #define SOUND_PCM_SETTRIGGER SNDCTL_DSP_SETTRIGGER
0682: #define SOUND_PCM_SETSYNCRO SNDCTL_DSP_SETSYNCRO
0683: #define SOUND_PCM_GETIPTR SNDCTL_DSP_GETIPTR
0684: #define SOUND_PCM_GETOPTR SNDCTL_DSP_GETOPTR
0685: #define SOUND_PCM_MAPINBUF SNDCTL_DSP_MAPINBUF
0686: #define SOUND_PCM_MAPOUTBUF SNDCTL_DSP_MAPOUTBUF
0687:
0688:
0689:
0690:
0691:
0692:
0693: typedef struct copr_buffer {
0694: int command;
0695: int flags;
0696: #define CPF_NONE 0x0000
0697: #define CPF_FIRST 0x0001
0698: #define CPF_LAST 0x0002
0699: int len;
0700: int offs;
0701:
0702: unsigned char data[4000];
0703: } copr_buffer;
0704:
0705: typedef struct copr_debug_buf {
0706: int command;
0707: int parm1;
0708: int parm2;
0709: int flags;
0710: int len;
0711: } copr_debug_buf;
0712:
0713: typedef struct copr_msg {
0714: int len;
0715: unsigned char data[4000];
0716: } copr_msg;
0717:
0718: #define SNDCTL_COPR_RESET _SIO ('C', 0)
0719: #define SNDCTL_COPR_LOAD _SIOWR('C', 1, copr_buffer)
0720: #define SNDCTL_COPR_RDATA _SIOWR('C', 2, copr_debug_buf)
0721: #define SNDCTL_COPR_RCODE _SIOWR('C', 3, copr_debug_buf)
0722: #define SNDCTL_COPR_WDATA _SIOW ('C', 4, copr_debug_buf)
0723: #define SNDCTL_COPR_WCODE _SIOW ('C', 5, copr_debug_buf)
0724: #define SNDCTL_COPR_RUN _SIOWR('C', 6, copr_debug_buf)
0725: #define SNDCTL_COPR_HALT _SIOWR('C', 7, copr_debug_buf)
0726: #define SNDCTL_COPR_SENDMSG _SIOWR('C', 8, copr_msg)
0727: #define SNDCTL_COPR_RCVMSG _SIOR ('C', 9, copr_msg)
0728:
0729:
0730:
0731:
0732:
0733:
0734:
0735:
0736:
0737:
0738:
0739:
0740:
0741:
0742: #define SOUND_MIXER_NRDEVICES 25
0743: #define SOUND_MIXER_VOLUME 0
0744: #define SOUND_MIXER_BASS 1
0745: #define SOUND_MIXER_TREBLE 2
0746: #define SOUND_MIXER_SYNTH 3
0747: #define SOUND_MIXER_PCM 4
0748: #define SOUND_MIXER_SPEAKER 5
0749: #define SOUND_MIXER_LINE 6
0750: #define SOUND_MIXER_MIC 7
0751: #define SOUND_MIXER_CD 8
0752: #define SOUND_MIXER_IMIX 9
0753: #define SOUND_MIXER_ALTPCM 10
0754: #define SOUND_MIXER_RECLEV 11
0755: #define SOUND_MIXER_IGAIN 12
0756: #define SOUND_MIXER_OGAIN 13
0757:
0758:
0759:
0760:
0761:
0762:
0763: #define SOUND_MIXER_LINE1 14
0764: #define SOUND_MIXER_LINE2 15
0765: #define SOUND_MIXER_LINE3 16
0766: #define SOUND_MIXER_DIGITAL1 17
0767: #define SOUND_MIXER_DIGITAL2 18
0768: #define SOUND_MIXER_DIGITAL3 19
0769: #define SOUND_MIXER_PHONEIN 20
0770: #define SOUND_MIXER_PHONEOUT 21
0771: #define SOUND_MIXER_VIDEO 22
0772: #define SOUND_MIXER_RADIO 23
0773: #define SOUND_MIXER_MONITOR 24
0774:
0775:
0776:
0777: #define SOUND_ONOFF_MIN 28
0778: #define SOUND_ONOFF_MAX 30
0779:
0780:
0781: #define SOUND_MIXER_NONE 31
0782:
0783:
0784:
0785:
0786:
0787: #define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE
0788: #define SOUND_MIXER_MUTE SOUND_MIXER_NONE
0789: #define SOUND_MIXER_LOUD SOUND_MIXER_NONE
0790:
0791:
0792: #define SOUND_DEVICE_LABELS {"Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \
0793: "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \
0794: "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \
0795: "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"}
0796:
0797: #define SOUND_DEVICE_NAMES {"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \
0798: "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \
0799: "line1", "line2", "line3", "dig1", "dig2", "dig3", \
0800: "phin", "phout", "video", "radio", "monitor"}
0801:
0802:
0803:
0804: #define SOUND_MIXER_RECSRC 0xff
0805: #define SOUND_MIXER_DEVMASK 0xfe
0806: #define SOUND_MIXER_RECMASK 0xfd
0807: #define SOUND_MIXER_CAPS 0xfc
0808: # define SOUND_CAP_EXCL_INPUT 0x00000001
0809: #define SOUND_MIXER_STEREODEVS 0xfb
0810: #define SOUND_MIXER_OUTSRC 0xfa
0811: #define SOUND_MIXER_OUTMASK 0xf9
0812:
0813:
0814:
0815: #define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME)
0816: #define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS)
0817: #define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE)
0818: #define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH)
0819: #define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM)
0820: #define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER)
0821: #define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE)
0822: #define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC)
0823: #define SOUND_MASK_CD (1 << SOUND_MIXER_CD)
0824: #define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX)
0825: #define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM)
0826: #define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV)
0827: #define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN)
0828: #define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN)
0829: #define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1)
0830: #define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2)
0831: #define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3)
0832: #define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1)
0833: #define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2)
0834: #define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3)
0835: #define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN)
0836: #define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT)
0837: #define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO)
0838: #define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO)
0839: #define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR)
0840:
0841:
0842: #define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE)
0843: #define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE)
0844: #define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD)
0845:
0846: #define MIXER_READ(dev) _SIOR('M', dev, int)
0847: #define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
0848: #define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS)
0849: #define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE)
0850: #define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH)
0851: #define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM)
0852: #define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER)
0853: #define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE)
0854: #define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC)
0855: #define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD)
0856: #define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX)
0857: #define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM)
0858: #define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV)
0859: #define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN)
0860: #define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN)
0861: #define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1)
0862: #define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2)
0863: #define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3)
0864:
0865:
0866: #define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE)
0867: #define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE)
0868: #define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD)
0869:
0870: #define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC)
0871: #define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK)
0872: #define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK)
0873: #define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS)
0874: #define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS)
0875:
0876: #define MIXER_WRITE(dev) _SIOWR('M', dev, int)
0877: #define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME)
0878: #define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS)
0879: #define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE)
0880: #define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH)
0881: #define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM)
0882: #define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER)
0883: #define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE)
0884: #define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC)
0885: #define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD)
0886: #define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX)
0887: #define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM)
0888: #define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV)
0889: #define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN)
0890: #define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN)
0891: #define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1)
0892: #define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2)
0893: #define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3)
0894:
0895:
0896: #define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE)
0897: #define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE)
0898: #define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD)
0899:
0900: #define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC)
0901:
0902: typedef struct mixer_info
0903: {
0904: char id[16];
0905: char name[32];
0906: int modify_counter;
0907: int fillers[10];
0908: } mixer_info;
0909:
0910: typedef struct _old_mixer_info
0911: {
0912: char id[16];
0913: char name[32];
0914: } _old_mixer_info;
0915:
0916: #define SOUND_MIXER_INFO _SIOR ('M', 101, mixer_info)
0917: #define SOUND_OLD_MIXER_INFO _SIOR ('M', 101, _old_mixer_info)
0918:
0919:
0920:
0921:
0922:
0923:
0924:
0925: typedef unsigned char mixer_record[128];
0926:
0927: #define SOUND_MIXER_ACCESS _SIOWR('M', 102, mixer_record)
0928:
0929:
0930:
0931:
0932: #define SOUND_MIXER_AGC _SIOWR('M', 103, int)
0933: #define SOUND_MIXER_3DSE _SIOWR('M', 104, int)
0934:
0935:
0936:
0937:
0938:
0939: #define SOUND_MIXER_PRIVATE1 _SIOWR('M', 111, int)
0940: #define SOUND_MIXER_PRIVATE2 _SIOWR('M', 112, int)
0941: #define SOUND_MIXER_PRIVATE3 _SIOWR('M', 113, int)
0942: #define SOUND_MIXER_PRIVATE4 _SIOWR('M', 114, int)
0943: #define SOUND_MIXER_PRIVATE5 _SIOWR('M', 115, int)
0944:
0945:
0946:
0947:
0948:
0949:
0950:
0951:
0952:
0953: typedef struct mixer_vol_table {
0954: int num;
0955: char name[32];
0956: int levels[32];
0957: } mixer_vol_table;
0958:
0959: #define SOUND_MIXER_GETLEVELS _SIOWR('M', 116, mixer_vol_table)
0960: #define SOUND_MIXER_SETLEVELS _SIOWR('M', 117, mixer_vol_table)
0961:
0962:
0963:
0964:
0965:
0966:
0967:
0968: #define OSS_GETVERSION _SIOR ('M', 118, int)
0969:
0970:
0971:
0972:
0973:
0974:
0975:
0976:
0977:
0978:
0979:
0980:
0981:
0982:
0983:
0984:
0985:
0986:
0987:
0988: #define EV_SEQ_LOCAL 0x80
0989: #define EV_TIMING 0x81
0990: #define EV_CHN_COMMON 0x92
0991: #define EV_CHN_VOICE 0x93
0992: #define EV_SYSEX 0x94
0993:
0994:
0995:
0996:
0997:
0998:
0999:
1000:
1001:
1002: #define MIDI_NOTEOFF 0x80
1003: #define MIDI_NOTEON 0x90
1004: #define MIDI_KEY_PRESSURE 0xA0
1005:
1006:
1007:
1008:
1009:
1010: #define MIDI_CTL_CHANGE 0xB0
1011: #define MIDI_PGM_CHANGE 0xC0
1012: #define MIDI_CHN_PRESSURE 0xD0
1013: #define MIDI_PITCH_BEND 0xE0
1014:
1015: #define MIDI_SYSTEM_PREFIX 0xF0
1016:
1017:
1018:
1019:
1020: #define TMR_WAIT_REL 1
1021: #define TMR_WAIT_ABS 2
1022: #define TMR_STOP 3
1023: #define TMR_START 4
1024: #define TMR_CONTINUE 5
1025: #define TMR_TEMPO 6
1026: #define TMR_ECHO 8
1027: #define TMR_CLOCK 9
1028: #define TMR_SPP 10
1029: #define TMR_TIMESIG 11
1030:
1031:
1032:
1033:
1034: #define LOCL_STARTAUDIO 1
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052: #define SEQ_DECLAREBUF() SEQ_USE_EXTBUF()
1053:
1054: void seqbuf_dump(void);
1055:
1056: #define SEQ_PM_DEFINES int __foo_bar___
1057:
1058: #define SEQ_LOAD_GMINSTR(dev, instr)
1059: #define SEQ_LOAD_GMDRUM(dev, drum)
1060:
1061: #define _SEQ_EXTERN extern
1062: #define SEQ_USE_EXTBUF() \
1063: _SEQ_EXTERN unsigned char _seqbuf[]; \
1064: _SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr
1065:
1066: #ifndef USE_SIMPLE_MACROS
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086: #define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
1087: #define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
1088: #define _SEQ_ADVBUF(len) _seqbufptr += len
1089: #define SEQ_DUMPBUF seqbuf_dump
1090: #else
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105: #define _SEQ_NEEDBUF(len)
1106: #endif
1107:
1108: #define SEQ_VOLUME_MODE(dev, mode) {_SEQ_NEEDBUF(8);\
1109: _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
1110: _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\
1111: _seqbuf[_seqbufptr+2] = (dev);\
1112: _seqbuf[_seqbufptr+3] = (mode);\
1113: _seqbuf[_seqbufptr+4] = 0;\
1114: _seqbuf[_seqbufptr+5] = 0;\
1115: _seqbuf[_seqbufptr+6] = 0;\
1116: _seqbuf[_seqbufptr+7] = 0;\
1117: _SEQ_ADVBUF(8);}
1118:
1119:
1120:
1121:
1122:
1123: #define _CHN_VOICE(dev, event, chn, note, parm) \
1124: {_SEQ_NEEDBUF(8);\
1125: _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
1126: _seqbuf[_seqbufptr+1] = (dev);\
1127: _seqbuf[_seqbufptr+2] = (event);\
1128: _seqbuf[_seqbufptr+3] = (chn);\
1129: _seqbuf[_seqbufptr+4] = (note);\
1130: _seqbuf[_seqbufptr+5] = (parm);\
1131: _seqbuf[_seqbufptr+6] = (0);\
1132: _seqbuf[_seqbufptr+7] = 0;\
1133: _SEQ_ADVBUF(8);}
1134:
1135: #define SEQ_START_NOTE(dev, chn, note, vol) \
1136: _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
1137:
1138: #define SEQ_STOP_NOTE(dev, chn, note, vol) \
1139: _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
1140:
1141: #define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \
1142: _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure)
1143:
1144:
1145:
1146:
1147:
1148: #define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
1149: {_SEQ_NEEDBUF(8);\
1150: _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
1151: _seqbuf[_seqbufptr+1] = (dev);\
1152: _seqbuf[_seqbufptr+2] = (event);\
1153: _seqbuf[_seqbufptr+3] = (chn);\
1154: _seqbuf[_seqbufptr+4] = (p1);\
1155: _seqbuf[_seqbufptr+5] = (p2);\
1156: *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
1157: _SEQ_ADVBUF(8);}
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173: #define SEQ_SYSEX(dev, buf, len) \
1174: {int ii, ll=(len); \
1175: unsigned char *bufp=buf;\
1176: if (ll>6)ll=6;\
1177: _SEQ_NEEDBUF(8);\
1178: _seqbuf[_seqbufptr] = EV_SYSEX;\
1179: _seqbuf[_seqbufptr+1] = (dev);\
1180: for(ii=0;ii<ll;ii++)\
1181: _seqbuf[_seqbufptr+ii+2] = bufp[ii];\
1182: for(ii=ll;ii<6;ii++)\
1183: _seqbuf[_seqbufptr+ii+2] = 0xff;\
1184: _SEQ_ADVBUF(8);}
1185:
1186: #define SEQ_CHN_PRESSURE(dev, chn, pressure) \
1187: _CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0)
1188:
1189: #define SEQ_SET_PATCH SEQ_PGM_CHANGE
1190: #define SEQ_PGM_CHANGE(dev, chn, patch) \
1191: _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
1192:
1193: #define SEQ_CONTROL(dev, chn, controller, value) \
1194: _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
1195:
1196: #define SEQ_BENDER(dev, chn, value) \
1197: _CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value)
1198:
1199:
1200: #define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
1201: _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
1202: _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
1203: _seqbuf[_seqbufptr+2] = (dev);\
1204: _seqbuf[_seqbufptr+3] = (voice);\
1205: _seqbuf[_seqbufptr+4] = (controller);\
1206: _seqbuf[_seqbufptr+5] = ((value)&0xff);\
1207: _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
1208: _seqbuf[_seqbufptr+7] = 0;\
1209: _SEQ_ADVBUF(8);}
1210:
1211:
1212:
1213:
1214: #define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
1215: #define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
1216: #define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128)
1217: #define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100)
1218: #define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
1219:
1220:
1221:
1222:
1223:
1224: #define _TIMER_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
1225: _seqbuf[_seqbufptr+0] = EV_TIMING; \
1226: _seqbuf[_seqbufptr+1] = (ev); \
1227: _seqbuf[_seqbufptr+2] = 0;\
1228: _seqbuf[_seqbufptr+3] = 0;\
1229: *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
1230: _SEQ_ADVBUF(8);}
1231:
1232: #define SEQ_START_TIMER() _TIMER_EVENT(TMR_START, 0)
1233: #define SEQ_STOP_TIMER() _TIMER_EVENT(TMR_STOP, 0)
1234: #define SEQ_CONTINUE_TIMER() _TIMER_EVENT(TMR_CONTINUE, 0)
1235: #define SEQ_WAIT_TIME(ticks) _TIMER_EVENT(TMR_WAIT_ABS, ticks)
1236: #define SEQ_DELTA_TIME(ticks) _TIMER_EVENT(TMR_WAIT_REL, ticks)
1237: #define SEQ_ECHO_BACK(key) _TIMER_EVENT(TMR_ECHO, key)
1238: #define SEQ_SET_TEMPO(value) _TIMER_EVENT(TMR_TEMPO, value)
1239: #define SEQ_SONGPOS(pos) _TIMER_EVENT(TMR_SPP, pos)
1240: #define SEQ_TIME_SIGNATURE(sig) _TIMER_EVENT(TMR_TIMESIG, sig)
1241:
1242:
1243:
1244:
1245:
1246: #define _LOCAL_EVENT(ev, parm) {_SEQ_NEEDBUF(8);\
1247: _seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \
1248: _seqbuf[_seqbufptr+1] = (ev); \
1249: _seqbuf[_seqbufptr+2] = 0;\
1250: _seqbuf[_seqbufptr+3] = 0;\
1251: *(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \
1252: _SEQ_ADVBUF(8);}
1253:
1254: #define SEQ_PLAYAUDIO(devmask) _LOCAL_EVENT(LOCL_STARTAUDIO, devmask)
1255:
1256:
1257:
1258:
1259: #define SEQ_MIDIOUT(device, byte) {_SEQ_NEEDBUF(4);\
1260: _seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\
1261: _seqbuf[_seqbufptr+1] = (byte);\
1262: _seqbuf[_seqbufptr+2] = (device);\
1263: _seqbuf[_seqbufptr+3] = 0;\
1264: _SEQ_ADVBUF(4);}
1265:
1266:
1267:
1268:
1269: #define SEQ_WRPATCH(patchx, len) \
1270: {if (_seqbufptr) SEQ_DUMPBUF();\
1271: if (write(seqfd, (char*)(patchx), len)==-1) \
1272: perror("Write patch: /dev/sequencer");}
1273: #define SEQ_WRPATCH2(patchx, len) \
1274: (SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len))
1275:
1276: #endif
1277:
© Andrew Scott 2006 -
2025,
All Rights Reserved