mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
ALSA: emu10k1: fix playback of 8-bit wavetable samples
Samples are byte-sized in this mode, and thus the offset calculation needs no shifting. Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Message-ID: <20240406064830.1029573-11-oswald.buddenhagen@gmx.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
38fc804a77
commit
bca5174b43
@ -310,6 +310,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
{
|
||||
unsigned int temp;
|
||||
int ch;
|
||||
bool w_16;
|
||||
u32 psst, dsl, map, ccca, vtarget;
|
||||
unsigned int addr, mapped_offset;
|
||||
struct snd_midi_channel *chan;
|
||||
@ -321,6 +322,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
if (snd_BUG_ON(ch < 0))
|
||||
return -EINVAL;
|
||||
chan = vp->chan;
|
||||
w_16 = !(vp->reg.sample_mode & SNDRV_SFNT_SAMPLE_8BITS);
|
||||
|
||||
emem = (struct snd_emu10k1_memblk *)vp->block;
|
||||
if (emem == NULL)
|
||||
@ -330,7 +332,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
/* dev_err(hw->card->devK, "emu: cannot map!\n"); */
|
||||
return -ENOMEM;
|
||||
}
|
||||
mapped_offset = snd_emu10k1_memblk_offset(emem) >> 1;
|
||||
mapped_offset = snd_emu10k1_memblk_offset(emem) >> w_16;
|
||||
vp->reg.start += mapped_offset;
|
||||
vp->reg.end += mapped_offset;
|
||||
vp->reg.loopstart += mapped_offset;
|
||||
@ -371,7 +373,7 @@ start_voice(struct snd_emux_voice *vp)
|
||||
unsigned int shift = (vp->apitch - 0xe000) >> 10;
|
||||
ccca |= shift << 25;
|
||||
}
|
||||
if (vp->reg.sample_mode & SNDRV_SFNT_SAMPLE_8BITS)
|
||||
if (!w_16)
|
||||
ccca |= CCCA_8BITSELECT;
|
||||
|
||||
vtarget = (unsigned int)vp->vtarget << 16;
|
||||
|
Loading…
Reference in New Issue
Block a user