00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PCM_VOLUME_H
00021 #define PCM_VOLUME_H
00022
00023 #include "pcm_prng.h"
00024
00025 #include <stdint.h>
00026 #include <stdbool.h>
00027
00028 enum {
00030 PCM_VOLUME_1 = 1024,
00031 };
00032
00033 struct audio_format;
00034
00039 static inline int
00040 pcm_float_to_volume(float volume)
00041 {
00042 return volume * PCM_VOLUME_1 + 0.5;
00043 }
00044
00049 static inline int
00050 pcm_volume_dither(void)
00051 {
00052 static unsigned long state;
00053 uint32_t r;
00054
00055 r = state = pcm_prng(state);
00056
00057 return (r & 511) - ((r >> 9) & 511);
00058 }
00059
00069 bool
00070 pcm_volume(void *buffer, int length,
00071 const struct audio_format *format,
00072 int volume);
00073
00074 #endif