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
|
bool
|
||||||
pcm_volume(void *buffer, size_t length,
|
pcm_volume(void *buffer, size_t length,
|
||||||
enum sample_format format,
|
enum sample_format format,
|
||||||
@ -169,8 +179,9 @@ pcm_volume(void *buffer, size_t length,
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case SAMPLE_FORMAT_FLOAT:
|
case SAMPLE_FORMAT_FLOAT:
|
||||||
/* XXX */
|
pcm_volume_change_float(buffer, end,
|
||||||
return false;
|
pcm_volume_to_float(volume));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unreachable */
|
/* unreachable */
|
||||||
|
@ -43,6 +43,12 @@ pcm_float_to_volume(float volume)
|
|||||||
return volume * PCM_VOLUME_1 + 0.5;
|
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.
|
* Returns the next volume dithering number, between -511 and +511.
|
||||||
* This number is taken from a global PRNG, see pcm_prng().
|
* This number is taken from a global PRNG, see pcm_prng().
|
||||||
|
Loading…
Reference in New Issue
Block a user