123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
- #ifndef __SOUND_ASOUND_FM_H
- #define __SOUND_ASOUND_FM_H
- /*
- * Advanced Linux Sound Architecture - ALSA
- *
- * Interface file between ALSA driver & user space
- * Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
- * 4Front Technologies
- *
- * Direct FM control
- *
- * 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
- *
- */
- #define SNDRV_DM_FM_MODE_OPL2 0x00
- #define SNDRV_DM_FM_MODE_OPL3 0x01
- struct snd_dm_fm_info {
- unsigned char fm_mode; /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
- unsigned char rhythm; /* percussion mode flag */
- };
- /*
- * Data structure composing an FM "note" or sound event.
- */
- struct snd_dm_fm_voice {
- unsigned char op; /* operator cell (0 or 1) */
- unsigned char voice; /* FM voice (0 to 17) */
- unsigned char am; /* amplitude modulation */
- unsigned char vibrato; /* vibrato effect */
- unsigned char do_sustain; /* sustain phase */
- unsigned char kbd_scale; /* keyboard scaling */
- unsigned char harmonic; /* 4 bits: harmonic and multiplier */
- unsigned char scale_level; /* 2 bits: decrease output freq rises */
- unsigned char volume; /* 6 bits: volume */
- unsigned char attack; /* 4 bits: attack rate */
- unsigned char decay; /* 4 bits: decay rate */
- unsigned char sustain; /* 4 bits: sustain level */
- unsigned char release; /* 4 bits: release rate */
- unsigned char feedback; /* 3 bits: feedback for op0 */
- unsigned char connection; /* 0 for serial, 1 for parallel */
- unsigned char left; /* stereo left */
- unsigned char right; /* stereo right */
- unsigned char waveform; /* 3 bits: waveform shape */
- };
- /*
- * This describes an FM note by its voice, octave, frequency number (10bit)
- * and key on/off.
- */
- struct snd_dm_fm_note {
- unsigned char voice; /* 0-17 voice channel */
- unsigned char octave; /* 3 bits: what octave to play */
- unsigned int fnum; /* 10 bits: frequency number */
- unsigned char key_on; /* set for active, clear for silent */
- };
- /*
- * FM parameters that apply globally to all voices, and thus are not "notes"
- */
- struct snd_dm_fm_params {
- unsigned char am_depth; /* amplitude modulation depth (1=hi) */
- unsigned char vib_depth; /* vibrato depth (1=hi) */
- unsigned char kbd_split; /* keyboard split */
- unsigned char rhythm; /* percussion mode select */
- /* This block is the percussion instrument data */
- unsigned char bass;
- unsigned char snare;
- unsigned char tomtom;
- unsigned char cymbal;
- unsigned char hihat;
- };
- /*
- * FM mode ioctl settings
- */
- #define SNDRV_DM_FM_IOCTL_INFO _IOR('H', 0x20, struct snd_dm_fm_info)
- #define SNDRV_DM_FM_IOCTL_RESET _IO ('H', 0x21)
- #define SNDRV_DM_FM_IOCTL_PLAY_NOTE _IOW('H', 0x22, struct snd_dm_fm_note)
- #define SNDRV_DM_FM_IOCTL_SET_VOICE _IOW('H', 0x23, struct snd_dm_fm_voice)
- #define SNDRV_DM_FM_IOCTL_SET_PARAMS _IOW('H', 0x24, struct snd_dm_fm_params)
- #define SNDRV_DM_FM_IOCTL_SET_MODE _IOW('H', 0x25, int)
- /* for OPL3 only */
- #define SNDRV_DM_FM_IOCTL_SET_CONNECTION _IOW('H', 0x26, int)
- /* SBI patch management */
- #define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40)
- #define SNDRV_DM_FM_OSS_IOCTL_RESET 0x20
- #define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE 0x21
- #define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE 0x22
- #define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS 0x23
- #define SNDRV_DM_FM_OSS_IOCTL_SET_MODE 0x24
- #define SNDRV_DM_FM_OSS_IOCTL_SET_OPL 0x25
- /*
- * Patch Record - fixed size for write
- */
- #define FM_KEY_SBI "SBI\032"
- #define FM_KEY_2OP "2OP\032"
- #define FM_KEY_4OP "4OP\032"
- struct sbi_patch {
- unsigned char prog;
- unsigned char bank;
- char key[4];
- char name[25];
- char extension[7];
- unsigned char data[32];
- };
- #endif /* __SOUND_ASOUND_FM_H */
|