MPD 0.17~git
|
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