/* * Copyright 1996, 4Front Technologies. All Rights Reserved. */ #ifndef _H_DM #define _H_DM /* Device Names */ #define DMFM "/dev/dmfm0" #define DMMIDI "/dev/dmmidi0" /* FM IOCTLS */ #define FM_IOCTL_RESET 0x20 #define FM_IOCTL_PLAY_NOTE 0x21 #define FM_IOCTL_SET_VOICE 0x22 #define FM_IOCTL_SET_PARAMS 0x23 #define FM_IOCTL_SET_MODE 0x24 #define FM_IOCTL_SET_OPL 0x25 #define OPL2 0 #define OPL3 1 /* * Data structure composing an FM "note" or sound event. */ struct 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 or 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 Right */ unsigned char right; /* Stereo Right */ unsigned char waveform; /* 3 bits: Waveform shape */ }; struct 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 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 */ /* Percussion instruments */ unsigned char bass; unsigned char snare; unsigned char tomtom; unsigned char cymbal; unsigned char hihat; }; #endif /* _H_DM */