ALSA: emu10k1: fix terminating synthesizer voices
Make terminate_voice() actually do at all what it's supposed to do: instantly and completely shut down the note. The bogus behavior was mostly harmless, as usually the voice is freed right afterwards, which implicitly terminates it anyway. Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Link: https://lore.kernel.org/r/20230518140339.3722308-2-oswald.buddenhagen@gmx.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
df335e9a8b
Коммит
5c2664cc09
|
@ -136,8 +136,13 @@ terminate_voice(struct snd_emux_voice *vp)
|
|||
if (snd_BUG_ON(!vp))
|
||||
return;
|
||||
hw = vp->hw;
|
||||
snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch,
|
||||
DCYSUSV_PHASE1_MASK | DCYSUSV_DECAYTIME_MASK | DCYSUSV_CHANNELENABLE_MASK);
|
||||
snd_emu10k1_ptr_write_multiple(hw, vp->ch,
|
||||
DCYSUSV, 0,
|
||||
VTFT, VTFT_FILTERTARGET_MASK,
|
||||
CVCF, CVCF_CURRENTFILTER_MASK,
|
||||
PTRX, 0,
|
||||
CPF, 0,
|
||||
REGLIST_END);
|
||||
if (vp->block) {
|
||||
struct snd_emu10k1_memblk *emem;
|
||||
emem = (struct snd_emu10k1_memblk *)vp->block;
|
||||
|
|
Загрузка…
Ссылка в новой задаче