[alsa-devel] [PATCH - speaker-test 1/1] speaker-test: add --force-frequency option to allow hz outside range

Takashi Iwai tiwai at suse.de
Mon Feb 24 16:15:29 CET 2014


At Mon, 24 Feb 2014 07:04:27 -0800,
Will R wrote:
> 
> What is the reasoning behind the limit, protecting speaker hardware,
> hearing?

I guess so.

> I think common speakers have frequency response up to 15 or 16kHz
> or so, so maybe a bit higher default limit of 8kHz would be okay.

Agreed.

> I was doing some tests around 20kHz - 22kHz (to test my hearing and freq
> response of my 25kHz rated headphones), so still see the merit in a force
> option for people who are certain they want to test that high.
> 
> New patch: Added min of 1.0Hz for force option, changed default max to
> 8kHz, fixed typo in flag name:

The changes look good to me.

But could you update the man page, and give your sign-off, too?


thanks,

Takashi


> 
> diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c
> index 261f399..61396f2 100644
> --- a/speaker-test/speaker-test.c
> +++ b/speaker-test/speaker-test.c
> @@ -106,6 +106,7 @@ static snd_pcm_uframes_t  period_size;
>  static const char *given_test_wav_file = NULL;
>  static char *wav_file_dir = SOUNDSDIR;
>  static int debug = 0;
> +static int force_frequency = 0;
>  static int in_aborting = 0;
>  static snd_pcm_t *pcm_handle = NULL;
> 
> @@ -1015,6 +1016,7 @@ static void help(void)
>      "-w,--wavfile Use the given WAV file as a test sound\n"
>      "-W,--wavdir Specify the directory containing WAV files\n"
>      "-m,--chmap Specify the channel map to override\n"
> +    "-X,--force-frequency force frequencies outside the 30-8000hz range\n"
>      "\n"));
>    printf(_("Recognized sample formats are:"));
>    for (fmt = supported_formats; *fmt >= 0; fmt++) {
> @@ -1057,6 +1059,7 @@ int main(int argc, char *argv[]) {
>      {"wavfile",   1, NULL, 'w'},
>      {"wavdir",    1, NULL, 'W'},
>      {"debug",   0, NULL, 'd'},
> +    {"force-frequency",   0, NULL, 'X'},
>  #ifdef CONFIG_SUPPORT_CHMAP
>      {"chmap",   1, NULL, 'm'},
>  #endif
> @@ -1078,7 +1081,7 @@ int main(int argc, char *argv[]) {
>    while (1) {
>      int c;
> 
> -    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d"
> +    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d:X"
>  #ifdef CONFIG_SUPPORT_CHMAP
>    "m:"
>  #endif
> @@ -1114,8 +1117,6 @@ int main(int argc, char *argv[]) {
>        break;
>      case 'f':
>        freq = atof(optarg);
> -      freq = freq < 30.0 ? 30.0 : freq;
> -      freq = freq > 5000.0 ? 5000.0 : freq;
>        break;
>      case 'b':
>        buffer_time = atoi(optarg);
> @@ -1173,6 +1174,9 @@ int main(int argc, char *argv[]) {
>      case 'd':
>        debug = 1;
>        break;
> +    case 'X':
> +      force_frequency = 1;
> +      break;
>  #ifdef CONFIG_SUPPORT_CHMAP
>      case 'm':
>        chmap = optarg;
> @@ -1190,6 +1194,13 @@ int main(int argc, char *argv[]) {
>      exit(EXIT_SUCCESS);
>    }
> 
> +  if (!force_frequency) {
> +    freq = freq < 30.0 ? 30.0 : freq;
> +    freq = freq > 8000.0 ? 8000.0 : freq;
> +  } else {
> +    freq = freq < 1.0 ? 1.0 : freq;
> +  }
> +
>    if (test_type == TEST_WAV)
>      format = SND_PCM_FORMAT_S16_LE; /* fixed format */
> 
> -- 
> 1.8.3.2
> 
> 
> On Mon, Feb 24, 2014 at 1:59 AM, Takashi Iwai <tiwai at suse.de> wrote:
> 
> > At Sat, 22 Feb 2014 16:09:57 -0800,
> > erik at caspar.alsa-project.org wrote:
> > >
> > > From: Erik Ackermann <domohawk at gmail.com>
> > >
> > > Signed-off-by: Erik Ackermann <domohawk at gmail.com>
> >
> > But still it should have some sanity checks like freq <= 0, as freq is
> > used as a divisor.
> >
> > Or, we may simply relax the frequency range.  What value do you want
> > to take in your use case?
> >
> >
> > Takashi
> >
> > >
> > > diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c
> > > index 261f399..22927f2 100644
> > > --- a/speaker-test/speaker-test.c
> > > +++ b/speaker-test/speaker-test.c
> > > @@ -106,6 +106,7 @@ static snd_pcm_uframes_t  period_size;
> > >  static const char *given_test_wav_file = NULL;
> > >  static char *wav_file_dir = SOUNDSDIR;
> > >  static int debug = 0;
> > > +static int force_frequency = 0;
> > >  static int in_aborting = 0;
> > >  static snd_pcm_t *pcm_handle = NULL;
> > >
> > > @@ -1015,6 +1016,7 @@ static void help(void)
> > >          "-w,--wavfile        Use the given WAV file as a test sound\n"
> > >          "-W,--wavdir Specify the directory containing WAV files\n"
> > >          "-m,--chmap  Specify the channel map to override\n"
> > > +        "-X,--force-frequency        force frequencies outside the
> > 30-5000hz range\n"
> > >          "\n"));
> > >    printf(_("Recognized sample formats are:"));
> > >    for (fmt = supported_formats; *fmt >= 0; fmt++) {
> > > @@ -1057,6 +1059,7 @@ int main(int argc, char *argv[]) {
> > >      {"wavfile",   1, NULL, 'w'},
> > >      {"wavdir",    1, NULL, 'W'},
> > >      {"debug",          0, NULL, 'd'},
> > > +    {"force-frequncy",         1, NULL, 'X'},
> > >  #ifdef CONFIG_SUPPORT_CHMAP
> > >      {"chmap",          1, NULL, 'm'},
> > >  #endif
> > > @@ -1078,7 +1081,7 @@ int main(int argc, char *argv[]) {
> > >    while (1) {
> > >      int c;
> > >
> > > -    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d"
> > > +    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d:X"
> > >  #ifdef CONFIG_SUPPORT_CHMAP
> > >                        "m:"
> > >  #endif
> > > @@ -1114,8 +1117,6 @@ int main(int argc, char *argv[]) {
> > >        break;
> > >      case 'f':
> > >        freq = atof(optarg);
> > > -      freq = freq < 30.0 ? 30.0 : freq;
> > > -      freq = freq > 5000.0 ? 5000.0 : freq;
> > >        break;
> > >      case 'b':
> > >        buffer_time = atoi(optarg);
> > > @@ -1173,6 +1174,9 @@ int main(int argc, char *argv[]) {
> > >      case 'd':
> > >        debug = 1;
> > >        break;
> > > +    case 'X':
> > > +      force_frequency = 1;
> > > +      break;
> > >  #ifdef CONFIG_SUPPORT_CHMAP
> > >      case 'm':
> > >        chmap = optarg;
> > > @@ -1190,6 +1194,11 @@ int main(int argc, char *argv[]) {
> > >      exit(EXIT_SUCCESS);
> > >    }
> > >
> > > +  if (!force_frequency) {
> > > +    freq = freq < 30.0 ? 30.0 : freq;
> > > +    freq = freq > 5000.0 ? 5000.0 : freq;
> > > +  }
> > > +
> > >    if (test_type == TEST_WAV)
> > >      format = SND_PCM_FORMAT_S16_LE; /* fixed format */
> > >
> > > --
> > > 1.8.3.2
> > >
> >
> [1.2  <text/html; ISO-8859-1 (quoted-printable)>]
> 
> From 3d9ceb42e1205618b29479077b0bd3f2d71c64db Mon Sep 17 00:00:00 2001
> From: Erik Ackermann <domohawk at gmail.com>
> Date: Mon, 24 Feb 2014 06:53:08 -0800
> Subject: [PATCH - speaker-test 1/1] speaker-test: add --force-frequency option
>  to allow hz outside range
> 
> Signed-off-by: Erik Ackermann <domohawk at gmail.com>
> 
> diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c
> index 261f399..61396f2 100644
> --- a/speaker-test/speaker-test.c
> +++ b/speaker-test/speaker-test.c
> @@ -106,6 +106,7 @@ static snd_pcm_uframes_t  period_size;
>  static const char *given_test_wav_file = NULL;
>  static char *wav_file_dir = SOUNDSDIR;
>  static int debug = 0;
> +static int force_frequency = 0;
>  static int in_aborting = 0;
>  static snd_pcm_t *pcm_handle = NULL;
>  
> @@ -1015,6 +1016,7 @@ static void help(void)
>  	   "-w,--wavfile	Use the given WAV file as a test sound\n"
>  	   "-W,--wavdir	Specify the directory containing WAV files\n"
>  	   "-m,--chmap	Specify the channel map to override\n"
> +	   "-X,--force-frequency	force frequencies outside the 30-8000hz range\n"
>  	   "\n"));
>    printf(_("Recognized sample formats are:"));
>    for (fmt = supported_formats; *fmt >= 0; fmt++) {
> @@ -1057,6 +1059,7 @@ int main(int argc, char *argv[]) {
>      {"wavfile",   1, NULL, 'w'},
>      {"wavdir",    1, NULL, 'W'},
>      {"debug",	  0, NULL, 'd'},
> +    {"force-frequency",	  0, NULL, 'X'},
>  #ifdef CONFIG_SUPPORT_CHMAP
>      {"chmap",	  1, NULL, 'm'},
>  #endif
> @@ -1078,7 +1081,7 @@ int main(int argc, char *argv[]) {
>    while (1) {
>      int c;
>      
> -    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d"
> +    if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:P:t:l:s:w:W:d:X"
>  #ifdef CONFIG_SUPPORT_CHMAP
>  			 "m:"
>  #endif
> @@ -1114,8 +1117,6 @@ int main(int argc, char *argv[]) {
>        break;
>      case 'f':
>        freq = atof(optarg);
> -      freq = freq < 30.0 ? 30.0 : freq;
> -      freq = freq > 5000.0 ? 5000.0 : freq;
>        break;
>      case 'b':
>        buffer_time = atoi(optarg);
> @@ -1173,6 +1174,9 @@ int main(int argc, char *argv[]) {
>      case 'd':
>        debug = 1;
>        break;
> +    case 'X':
> +      force_frequency = 1;
> +      break;
>  #ifdef CONFIG_SUPPORT_CHMAP
>      case 'm':
>        chmap = optarg;
> @@ -1190,6 +1194,13 @@ int main(int argc, char *argv[]) {
>      exit(EXIT_SUCCESS);
>    }
>  
> +  if (!force_frequency) {
> +    freq = freq < 30.0 ? 30.0 : freq;
> +    freq = freq > 8000.0 ? 8000.0 : freq;
> +  } else {
> +    freq = freq < 1.0 ? 1.0 : freq;
> +  }
> +
>    if (test_type == TEST_WAV)
>      format = SND_PCM_FORMAT_S16_LE; /* fixed format */
>  
> -- 
> 1.8.3.2
> 


More information about the Alsa-devel mailing list