📄 asequenc.h
字号:
/* * Main header file for the ALSA sequencer * Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl> * (c) 1998-1999 by Jaroslav Kysela <perex@suse.cz> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */#ifndef __SOUND_ASEQUENCER_H#define __SOUND_ASEQUENCER_H#ifndef __KERNEL__#include <linux/ioctl.h>#endif#include <sound/asound.h>/** version of the sequencer */#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION (1, 0, 1)#ifdef __KERNEL__/** * definition of sequencer event types *//** system messages * event data type = #sndrv_seq_result_t */#define SNDRV_SEQ_EVENT_SYSTEM 0#define SNDRV_SEQ_EVENT_RESULT 1/** note messages (channel specific) * event data type = #sndrv_seq_ev_note */#define SNDRV_SEQ_EVENT_NOTE 5#define SNDRV_SEQ_EVENT_NOTEON 6#define SNDRV_SEQ_EVENT_NOTEOFF 7#define SNDRV_SEQ_EVENT_KEYPRESS 8 /** control messages (channel specific) * event data type = #sndrv_seq_ev_ctrl */#define SNDRV_SEQ_EVENT_CONTROLLER 10#define SNDRV_SEQ_EVENT_PGMCHANGE 11#define SNDRV_SEQ_EVENT_CHANPRESS 12#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value *//** synchronisation messages * event data type = #sndrv_seq_ev_ctrl */#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */ /** timer messages * event data type = sndrv_seq_ev_queue_control_t */#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */ #define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo *//** others * event data type = none */#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event *//** echo back, kernel private messages * event data type = any type */#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event *//** system status messages (broadcast for subscribers) * event data type = sndrv_seq_addr_t */#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed *//** port connection changes * event data type = sndrv_seq_connect_t */#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected *//** synthesizer events * event data type = sndrv_seq_eve_sample_control_t */#define SNDRV_SEQ_EVENT_SAMPLE 70 /* sample select */#define SNDRV_SEQ_EVENT_SAMPLE_CLUSTER 71 /* sample cluster select */#define SNDRV_SEQ_EVENT_SAMPLE_START 72 /* voice start */#define SNDRV_SEQ_EVENT_SAMPLE_STOP 73 /* voice stop */#define SNDRV_SEQ_EVENT_SAMPLE_FREQ 74 /* playback frequency */#define SNDRV_SEQ_EVENT_SAMPLE_VOLUME 75 /* volume and balance */#define SNDRV_SEQ_EVENT_SAMPLE_LOOP 76 /* sample loop */#define SNDRV_SEQ_EVENT_SAMPLE_POSITION 77 /* sample position */#define SNDRV_SEQ_EVENT_SAMPLE_PRIVATE1 78 /* private (hardware dependent) event *//** user-defined events with fixed length * event data type = any */#define SNDRV_SEQ_EVENT_USR0 90#define SNDRV_SEQ_EVENT_USR1 91#define SNDRV_SEQ_EVENT_USR2 92#define SNDRV_SEQ_EVENT_USR3 93#define SNDRV_SEQ_EVENT_USR4 94#define SNDRV_SEQ_EVENT_USR5 95#define SNDRV_SEQ_EVENT_USR6 96#define SNDRV_SEQ_EVENT_USR7 97#define SNDRV_SEQ_EVENT_USR8 98#define SNDRV_SEQ_EVENT_USR9 99/** instrument layer * variable length data can be passed directly to the driver */#define SNDRV_SEQ_EVENT_INSTR_BEGIN 100 /* begin of instrument management */#define SNDRV_SEQ_EVENT_INSTR_END 101 /* end of instrument management */#define SNDRV_SEQ_EVENT_INSTR_INFO 102 /* instrument interface info */#define SNDRV_SEQ_EVENT_INSTR_INFO_RESULT 103 /* result */#define SNDRV_SEQ_EVENT_INSTR_FINFO 104 /* get format info */#define SNDRV_SEQ_EVENT_INSTR_FINFO_RESULT 105 /* get format info */#define SNDRV_SEQ_EVENT_INSTR_RESET 106 /* reset instrument memory */#define SNDRV_SEQ_EVENT_INSTR_STATUS 107 /* instrument interface status */#define SNDRV_SEQ_EVENT_INSTR_STATUS_RESULT 108 /* result */#define SNDRV_SEQ_EVENT_INSTR_PUT 109 /* put instrument to port */#define SNDRV_SEQ_EVENT_INSTR_GET 110 /* get instrument from port */#define SNDRV_SEQ_EVENT_INSTR_GET_RESULT 111 /* result */#define SNDRV_SEQ_EVENT_INSTR_FREE 112 /* free instrument(s) */#define SNDRV_SEQ_EVENT_INSTR_LIST 113 /* instrument list */#define SNDRV_SEQ_EVENT_INSTR_LIST_RESULT 114 /* result */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER 115 /* cluster parameters */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER_GET 116 /* get cluster parameters */#define SNDRV_SEQ_EVENT_INSTR_CLUSTER_RESULT 117 /* result */#define SNDRV_SEQ_EVENT_INSTR_CHANGE 118 /* instrument change *//* 119-129: reserved *//* 130-139: variable length events * event data type = sndrv_seq_ev_ext * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set) */#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event *//* 132-134: reserved */#define SNDRV_SEQ_EVENT_USR_VAR0 135#define SNDRV_SEQ_EVENT_USR_VAR1 136#define SNDRV_SEQ_EVENT_USR_VAR2 137#define SNDRV_SEQ_EVENT_USR_VAR3 138#define SNDRV_SEQ_EVENT_USR_VAR4 139/* 150-151: kernel events with quote - DO NOT use in user clients */#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete *//* 152-191: reserved *//* 192-254: hardware specific events *//* 255: special event */#define SNDRV_SEQ_EVENT_NONE 255typedef unsigned char sndrv_seq_event_type_t;/** event address */struct sndrv_seq_addr { unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */ unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */};/** port connection */struct sndrv_seq_connect { struct sndrv_seq_addr sender; struct sndrv_seq_addr dest;};#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */ /* event mode flag - NOTE: only 8 bits available! */#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0)#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */#define SNDRV_SEQ_TIME_MODE_MASK (1<<1)#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2)#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */#define SNDRV_SEQ_PRIORITY_MASK (1<<4) /* note event */struct sndrv_seq_ev_note { unsigned char channel; unsigned char note; unsigned char velocity; unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */ unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */}; /* controller event */struct sndrv_seq_ev_ctrl { unsigned char channel; unsigned char unused1, unused2, unused3; /* pad */ unsigned int param; signed int value;}; /* generic set of bytes (12x8 bit) */struct sndrv_seq_ev_raw8 { unsigned char d[12]; /* 8 bit value */}; /* generic set of integers (3x32 bit) */struct sndrv_seq_ev_raw32 { unsigned int d[3]; /* 32 bit value */}; /* external stored data */struct sndrv_seq_ev_ext { unsigned int len; /* length of data */ void *ptr; /* pointer to data (note: maybe 64-bit) */} __attribute__((packed));/* Instrument cluster type */typedef unsigned int sndrv_seq_instr_cluster_t;/* Instrument type */struct sndrv_seq_instr { sndrv_seq_instr_cluster_t cluster; unsigned int std; /* the upper byte means a private instrument (owner - client #) */ unsigned short bank; unsigned short prg;}; /* sample number */struct sndrv_seq_ev_sample { unsigned int std; unsigned short bank; unsigned short prg;}; /* sample cluster */struct sndrv_seq_ev_cluster { sndrv_seq_instr_cluster_t cluster;}; /* sample position */typedef unsigned int sndrv_seq_position_t; /* playback position (in samples) * 16 */ /* sample stop mode */enum sndrv_seq_stop_mode { SAMPLE_STOP_IMMEDIATELY = 0, /* terminate playing immediately */ SAMPLE_STOP_VENVELOPE = 1, /* finish volume envelope */ SAMPLE_STOP_LOOP = 2 /* terminate loop and finish wave */}; /* sample frequency */typedef int sndrv_seq_frequency_t; /* playback frequency in HZ * 16 */ /* sample volume control; if any value is set to -1 == do not change */struct sndrv_seq_ev_volume { signed short volume; /* range: 0-16383 */ signed short lr; /* left-right balance; range: 0-16383 */ signed short fr; /* front-rear balance; range: 0-16383 */ signed short du; /* down-up balance; range: 0-16383 */};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -