forked from len0rd/rockbox
Greatly reduce volume-change zipper artifacts with SW volume.
Uses a cosine factor to smoothly shift the PCM level from the old level to the new one over the length of a frame. Implements indirect calls to PCM scaling function instead of testing conditions on every callback, cleanly assigning a different call to do the volume transition. The volume change call then assigns the final scaling function. Change-Id: If1004b92a91c5ca766dd0e4014ec274636e8ed26 Reviewed-on: http://gerrit.rockbox.org/763 Reviewed-by: Michael Sevakis <jethead71@rockbox.org> Tested: Michael Sevakis <jethead71@rockbox.org>
This commit is contained in:
parent
62b10e383c
commit
61d0583384
3 changed files with 108 additions and 28 deletions
|
|
@ -111,6 +111,10 @@ void pcm_play_stop_int(void);
|
|||
** pcm_sw_volume.c **/
|
||||
static inline void pcm_play_dma_start_int(const void *addr, size_t size)
|
||||
{
|
||||
#ifdef HAVE_SW_VOLUME_CONTROL
|
||||
/* Smoothed transition might not have happened so sync now */
|
||||
pcm_sync_pcm_factors();
|
||||
#endif
|
||||
pcm_play_dma_start(addr, size);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue