Lines Matching refs:opl3

110 static void debug_alloc(struct snd_opl3 *opl3, char *s, int voice) {
114 printk(KERN_DEBUG "time %.5i: %s [%.2i]: ", opl3->use_time, s, voice);
115 for (i = 0; i < opl3->max_voices; i++)
116 printk(KERN_CONT "%c", *(str + opl3->voices[i].state + 1));
124 static int opl3_get_voice(struct snd_opl3 *opl3, int instr_4op,
155 for (i = 0; i < opl3->max_voices; i++) {
156 vp = &opl3->voices[i];
179 vp2 = &opl3->voices[i + 3];
225 struct snd_opl3 *opl3 = from_timer(opl3, t, tlist);
230 spin_lock_irqsave(&opl3->voice_lock, flags);
231 for (i = 0; i < opl3->max_voices; i++) {
232 struct snd_opl3_voice *vp = &opl3->voices[i];
235 snd_opl3_note_off_unsafe(opl3, vp->note, 0,
241 spin_unlock_irqrestore(&opl3->voice_lock, flags);
243 spin_lock_irqsave(&opl3->sys_timer_lock, flags);
245 mod_timer(&opl3->tlist, jiffies + 1); /* invoke again */
247 opl3->sys_timer_status = 0;
248 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
254 static void snd_opl3_start_timer(struct snd_opl3 *opl3)
257 spin_lock_irqsave(&opl3->sys_timer_lock, flags);
258 if (! opl3->sys_timer_status) {
259 mod_timer(&opl3->tlist, jiffies + 1);
260 opl3->sys_timer_status = 1;
262 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
277 struct snd_opl3 *opl3;
303 opl3 = p;
312 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
331 spin_lock_irqsave(&opl3->voice_lock, flags);
334 snd_opl3_drum_switch(opl3, note, vel, 1, chan);
335 spin_unlock_irqrestore(&opl3->voice_lock, flags);
340 patch = snd_opl3_find_patch(opl3, prg, bank, 0);
342 spin_unlock_irqrestore(&opl3->voice_lock, flags);
352 if (opl3->hardware >= OPL3_HW_OPL3) {
358 spin_unlock_irqrestore(&opl3->voice_lock, flags);
367 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
368 voice = opl3_get_voice(opl3, instr_4op, chan);
375 spin_unlock_irqrestore(&opl3->voice_lock, flags);
392 vp = &opl3->voices[voice];
396 opl3->command(opl3, opl3_reg, reg_val);
399 vp2 = &opl3->voices[voice + 3];
404 opl3->command(opl3, opl3_reg, reg_val);
410 if ((opl3->connection_reg ^ connect_mask) & connect_mask) {
411 opl3->connection_reg |= connect_mask;
414 opl3->command(opl3, opl3_reg, opl3->connection_reg);
417 if ((opl3->connection_reg ^ ~connect_mask) & connect_mask) {
418 opl3->connection_reg &= ~connect_mask;
421 opl3->command(opl3, opl3_reg, opl3->connection_reg);
427 opl3->connection_reg);
431 * between FM operators (see include/opl3.h)
468 opl3->command(opl3, opl3_reg, reg_val);
473 opl3->command(opl3, opl3_reg, reg_val);
478 opl3->command(opl3, opl3_reg, reg_val);
483 opl3->command(opl3, opl3_reg, reg_val);
488 opl3->command(opl3, opl3_reg, reg_val);
500 opl3->command(opl3, opl3_reg, reg_val);
513 opl3->command(opl3, opl3_reg, reg_val);
533 opl3->command(opl3, opl3_reg, fnum);
535 opl3->voices[voice].keyon_reg = blocknum;
545 opl3->command(opl3, opl3_reg, blocknum);
549 opl3->voices[voice].note_off = jiffies +
551 snd_opl3_start_timer(opl3);
552 opl3->voices[voice].note_off_check = 1;
554 opl3->voices[voice].note_off_check = 0;
560 vp->time = opl3->use_time++;
567 vp2 = &opl3->voices[voice + 3];
568 vp2->time = opl3->use_time++;
575 vp2 = &opl3->voices[voice + 3];
576 vp2->time = opl3->use_time++;
583 debug_alloc(opl3, "note on ", voice);
601 spin_unlock_irqrestore(&opl3->voice_lock, flags);
604 static void snd_opl3_kill_voice(struct snd_opl3 *opl3, int voice)
615 vp = &opl3->voices[voice];
632 opl3->command(opl3, opl3_reg, vp->keyon_reg);
635 vp->time = opl3->use_time++;
638 vp2 = &opl3->voices[voice + 3];
640 vp2->time = opl3->use_time++;
645 debug_alloc(opl3, "note off", voice);
656 struct snd_opl3 *opl3;
661 opl3 = p;
668 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
670 snd_opl3_drum_switch(opl3, note, vel, 0, chan);
675 for (voice = 0; voice < opl3->max_voices; voice++) {
676 vp = &opl3->voices[voice];
678 snd_opl3_kill_voice(opl3, voice);
685 snd_opl3_kill_voice(opl3, voice);
693 struct snd_opl3 *opl3 = p;
696 spin_lock_irqsave(&opl3->voice_lock, flags);
698 spin_unlock_irqrestore(&opl3->voice_lock, flags);
723 static void snd_opl3_update_pitch(struct snd_opl3 *opl3, int voice)
736 vp = &opl3->voices[voice];
754 opl3->command(opl3, opl3_reg, fnum);
763 opl3->command(opl3, opl3_reg, blocknum);
765 vp->time = opl3->use_time++;
771 static void snd_opl3_pitch_ctrl(struct snd_opl3 *opl3, struct snd_midi_channel *chan)
778 spin_lock_irqsave(&opl3->voice_lock, flags);
780 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
781 for (voice = 0; voice < opl3->max_voices; voice++) {
782 vp = &opl3->voices[voice];
784 snd_opl3_update_pitch(opl3, voice);
791 snd_opl3_update_pitch(opl3, voice);
794 spin_unlock_irqrestore(&opl3->voice_lock, flags);
803 struct snd_opl3 *opl3;
805 opl3 = p;
814 opl3->drum_reg |= OPL3_VIBRATO_DEPTH;
816 opl3->drum_reg &= ~OPL3_VIBRATO_DEPTH;
817 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION,
818 opl3->drum_reg);
822 opl3->drum_reg |= OPL3_TREMOLO_DEPTH;
824 opl3->drum_reg &= ~OPL3_TREMOLO_DEPTH;
825 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION,
826 opl3->drum_reg);
829 snd_opl3_pitch_ctrl(opl3, chan);