[Sound-open-firmware] [PATCH 2/4] Tone: Add channel specific volume plus other fixes

Takashi Iwai tiwai at suse.de
Thu Jun 22 10:28:55 CEST 2017


On Thu, 22 Jun 2017 10:04:27 +0200,
Seppo Ingalsuo wrote:
> 
> 
> On 22.06.2017 04:31, Keyon Jie wrote:
> >
> > On 2017年06月22日 01:12, Seppo Ingalsuo wrote:
> >> The mono tone level can be controlled per channel. A similar channel map
> >> feature as in the volume component was added into volume command of
> >> tone.
> >>
> >> The default tone frequency of 997 Hz was updated to a proper Q16.16
> >> value.
> >>
> >> Moved tone function pointer set to tone_new() since it is not modified
> >> later.
> >>
> >> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo at linux.intel.com>
> >> ---
> >>   src/audio/tone.c | 56
> >> ++++++++++++++++++++++++++++++++++++++++++--------------
> >>   1 file changed, 42 insertions(+), 14 deletions(-)
> >>
> >> diff --git a/src/audio/tone.c b/src/audio/tone.c
> >> index f45d8be..d1c7468 100644
> >> --- a/src/audio/tone.c
> >> +++ b/src/audio/tone.c
> >> @@ -56,7 +56,8 @@
> >>     #define TONE_NUM_FS            13       /* Table size for 8-192
> >> kHz range */
> >>   #define TONE_AMPLITUDE_DEFAULT 2147484  /* -60 dB from full scale */
> >> -#define TONE_FREQUENCY_DEFAULT 16334848 /* 997 in Q18.14 */
> >> +#define TONE_FREQUENCY_DEFAULT 65339392 /* 997 Hz in Q16.16 */
> >> +#define TONE_VOLUME_DEFAULT 65536       /* 1.0 in Q16.16 */
> >
> > will they be more readable in hexadecimal?
> 
> Unfortunately the C preprocessor doesn't process float to fixed math
> so I can't use any nice macro to create these. In hex it would look
> like this and in my opinion it's not any better. The Q notation is
> only sometimes by chance such that integer and decimal bits are not
> mixed into same hex digit. For frequency Qx.y notation the used x is
> sufficient to get to ultrasound frequencies and y to make precise
> enough sweeps.
> 
> #define TONE_AMPLITUDE_DEFAULT 0x20C49C  /* -60 dB from full scale */
> #define TONE_FREQUENCY_DEFAULT 0xF940000 /* 997 Hz in Q18.14 */
> #define TONE_FREQUENCY_DEFAULT 0x3E50000 /* 997 Hz in Q16.16 */
> #define TONE_VOLUME_DEFAULT 0x10000       /* 1.0 in Q16.16 */
> 
> To convert these with any calculator to floats when debugging code
> (these are fractional numbers) there's extra effort needed with hex so
> I definitely prefer decimal. Hex is good for bit masks but these are
> not such.

It's a fixed-point, so you can introduce a simple macro like

#define TONE_FREQ_SHIFT		16
#define TONE_FREQ(x, y)		((x) << TONE_FREQ_SHIFT | (y))

then TONE_FREQUENCY_DEFAULT will be TONE_FREQ(997, 0), and so on.
If you need to change the base shift, just change the TONE_FREQ_SHIFT
and the rest remains as is.


Takashi


More information about the Sound-open-firmware mailing list