MPD 0.17~git
src/pcm_volume.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2003-2011 The Music Player Daemon Project
00003  * http://www.musicpd.org
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License along
00016  * with this program; if not, write to the Free Software Foundation, Inc.,
00017  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00018  */
00019 
00020 #ifndef PCM_VOLUME_H
00021 #define PCM_VOLUME_H
00022 
00023 #include "pcm_prng.h"
00024 #include "audio_format.h"
00025 
00026 #include <stdint.h>
00027 #include <stdbool.h>
00028 
00029 enum {
00031         PCM_VOLUME_1 = 1024,
00032 };
00033 
00034 struct audio_format;
00035 
00040 static inline int
00041 pcm_float_to_volume(float volume)
00042 {
00043         return volume * PCM_VOLUME_1 + 0.5;
00044 }
00045 
00046 static inline float
00047 pcm_volume_to_float(int volume)
00048 {
00049         return (float)volume / (float)PCM_VOLUME_1;
00050 }
00051 
00056 static inline int
00057 pcm_volume_dither(void)
00058 {
00059         static unsigned long state;
00060         uint32_t r;
00061 
00062         r = state = pcm_prng(state);
00063 
00064         return (r & 511) - ((r >> 9) & 511);
00065 }
00066 
00076 bool
00077 pcm_volume(void *buffer, size_t length,
00078            enum sample_format format,
00079            int volume);
00080 
00081 #endif