pcm_volume: implement float samples
This commit is contained in:
parent
545685bc32
commit
bfef0fbff3
@ -132,6 +132,16 @@ pcm_volume_change_32(int32_t *buffer, const int32_t *end, int volume)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pcm_volume_change_float(float *buffer, const float *end, float volume)
|
||||
{
|
||||
while (buffer < end) {
|
||||
float sample = *buffer;
|
||||
sample *= volume;
|
||||
*buffer++ = sample;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
pcm_volume(void *buffer, size_t length,
|
||||
enum sample_format format,
|
||||
@ -169,8 +179,9 @@ pcm_volume(void *buffer, size_t length,
|
||||
return true;
|
||||
|
||||
case SAMPLE_FORMAT_FLOAT:
|
||||
/* XXX */
|
||||
return false;
|
||||
pcm_volume_change_float(buffer, end,
|
||||
pcm_volume_to_float(volume));
|
||||
return true;
|
||||
}
|
||||
|
||||
/* unreachable */
|
||||
|
@ -43,6 +43,12 @@ pcm_float_to_volume(float volume)
|
||||
return volume * PCM_VOLUME_1 + 0.5;
|
||||
}
|
||||
|
||||
static inline float
|
||||
pcm_volume_to_float(int volume)
|
||||
{
|
||||
return (float)volume / (float)PCM_VOLUME_1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next volume dithering number, between -511 and +511.
|
||||
* This number is taken from a global PRNG, see pcm_prng().
|
||||
|
Loading…
Reference in New Issue
Block a user