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];
226 struct snd_opl3 *opl3 = from_timer(opl3, t, tlist);
231 spin_lock_irqsave(&opl3->voice_lock, flags);
232 for (i = 0; i < opl3->max_voices; i++) {
233 struct snd_opl3_voice *vp = &opl3->voices[i];
236 snd_opl3_note_off_unsafe(opl3, vp->note, 0,
242 spin_unlock_irqrestore(&opl3->voice_lock, flags);
244 spin_lock_irqsave(&opl3->sys_timer_lock, flags);
246 mod_timer(&opl3->tlist, jiffies + 1); /* invoke again */
248 opl3->sys_timer_status = 0;
249 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
255 static void snd_opl3_start_timer(struct snd_opl3 *opl3)
258 spin_lock_irqsave(&opl3->sys_timer_lock, flags);
259 if (! opl3->sys_timer_status) {
260 mod_timer(&opl3->tlist, jiffies + 1);
261 opl3->sys_timer_status = 1;
263 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
278 struct snd_opl3 *opl3;
304 opl3 = p;
313 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
332 spin_lock_irqsave(&opl3->voice_lock, flags);
335 snd_opl3_drum_switch(opl3, note, vel, 1, chan);
336 spin_unlock_irqrestore(&opl3->voice_lock, flags);
341 patch = snd_opl3_find_patch(opl3, prg, bank, 0);
343 spin_unlock_irqrestore(&opl3->voice_lock, flags);
353 if (opl3->hardware >= OPL3_HW_OPL3) {
359 spin_unlock_irqrestore(&opl3->voice_lock, flags);
368 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
369 voice = opl3_get_voice(opl3, instr_4op, chan);
376 spin_unlock_irqrestore(&opl3->voice_lock, flags);
393 vp = &opl3->voices[voice];
397 opl3->command(opl3, opl3_reg, reg_val);
400 vp2 = &opl3->voices[voice + 3];
405 opl3->command(opl3, opl3_reg, reg_val);
411 if ((opl3->connection_reg ^ connect_mask) & connect_mask) {
412 opl3->connection_reg |= connect_mask;
415 opl3->command(opl3, opl3_reg, opl3->connection_reg);
418 if ((opl3->connection_reg ^ ~connect_mask) & connect_mask) {
419 opl3->connection_reg &= ~connect_mask;
422 opl3->command(opl3, opl3_reg, opl3->connection_reg);
428 opl3->connection_reg);
432 * between FM operators (see include/opl3.h)
469 opl3->command(opl3, opl3_reg, reg_val);
474 opl3->command(opl3, opl3_reg, reg_val);
479 opl3->command(opl3, opl3_reg, reg_val);
484 opl3->command(opl3, opl3_reg, reg_val);
489 opl3->command(opl3, opl3_reg, reg_val);
501 opl3->command(opl3, opl3_reg, reg_val);
514 opl3->command(opl3, opl3_reg, reg_val);
534 opl3->command(opl3, opl3_reg, fnum);
536 opl3->voices[voice].keyon_reg = blocknum;
546 opl3->command(opl3, opl3_reg, blocknum);
550 opl3->voices[voice].note_off = jiffies +
552 snd_opl3_start_timer(opl3);
553 opl3->voices[voice].note_off_check = 1;
555 opl3->voices[voice].note_off_check = 0;
561 vp->time = opl3->use_time++;
568 vp2 = &opl3->voices[voice + 3];
569 vp2->time = opl3->use_time++;
576 vp2 = &opl3->voices[voice + 3];
577 vp2->time = opl3->use_time++;
584 debug_alloc(opl3, "note on ", voice);
602 spin_unlock_irqrestore(&opl3->voice_lock, flags);
605 static void snd_opl3_kill_voice(struct snd_opl3 *opl3, int voice)
616 vp = &opl3->voices[voice];
633 opl3->command(opl3, opl3_reg, vp->keyon_reg);
636 vp->time = opl3->use_time++;
639 vp2 = &opl3->voices[voice + 3];
641 vp2->time = opl3->use_time++;
646 debug_alloc(opl3, "note off", voice);
657 struct snd_opl3 *opl3;
662 opl3 = p;
669 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
671 snd_opl3_drum_switch(opl3, note, vel, 0, chan);
676 for (voice = 0; voice < opl3->max_voices; voice++) {
677 vp = &opl3->voices[voice];
679 snd_opl3_kill_voice(opl3, voice);
686 snd_opl3_kill_voice(opl3, voice);
694 struct snd_opl3 *opl3 = p;
697 spin_lock_irqsave(&opl3->voice_lock, flags);
699 spin_unlock_irqrestore(&opl3->voice_lock, flags);
724 static void snd_opl3_update_pitch(struct snd_opl3 *opl3, int voice)
737 vp = &opl3->voices[voice];
755 opl3->command(opl3, opl3_reg, fnum);
764 opl3->command(opl3, opl3_reg, blocknum);
766 vp->time = opl3->use_time++;
772 static void snd_opl3_pitch_ctrl(struct snd_opl3 *opl3, struct snd_midi_channel *chan)
779 spin_lock_irqsave(&opl3->voice_lock, flags);
781 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) {
782 for (voice = 0; voice < opl3->max_voices; voice++) {
783 vp = &opl3->voices[voice];
785 snd_opl3_update_pitch(opl3, voice);
792 snd_opl3_update_pitch(opl3, voice);
795 spin_unlock_irqrestore(&opl3->voice_lock, flags);
804 struct snd_opl3 *opl3;
806 opl3 = p;
815 opl3->drum_reg |= OPL3_VIBRATO_DEPTH;
817 opl3->drum_reg &= ~OPL3_VIBRATO_DEPTH;
818 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION,
819 opl3->drum_reg);
823 opl3->drum_reg |= OPL3_TREMOLO_DEPTH;
825 opl3->drum_reg &= ~OPL3_TREMOLO_DEPTH;
826 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION,
827 opl3->drum_reg);
830 snd_opl3_pitch_ctrl(opl3, chan);