.SH NAME
speaker\-test \- command-line speaker test tone generator for ALSA
.SH SYNOPSIS
-.B speaker\-test
-.BR "" [ \-D | \-\-device
-.IR NAME ]
-.BR "" [ \-r | \-\-rate
-.IR RATE ]
-.BR "" [ \-c | \-\-channels
-.IR NUM ]
-.BR "" [ \-f | \-\-frequency
-.IR FREQ ]
-.BR "" [ \-p | \-\-period
-.IR TIME ]
-.BR "" [ \-n | \-\-noise
-.IR TIME ]
-.BR "" [ \-s | \-\-speaker
-.IR TYPE ]
-.BR "" [ \-w | \-\-wavfile
-.IR FILE ]
-.BR "" [ \-W | \-\-wavdir
-.IR DIR ]
-.P
-.B speaker\-test
-.B \-\-help
+.B speaker\-test [\-options]
.SH DESCRIPTION
\fBspeaker\-test\fP generates a tone that can be used to test the speakers of a computer.
stream of \fIRATE\fP Hz
.TP
-\fB\-s\fP | \fB\-\-speaker\fP \fBpink\fP|\fBsine\fP|\fBwav\fP
--tpink means use pink noise (default).
+\fB\-t\fP | \fB\-\-test\fP \fBpink\fP|\fBsine\fP|\fBwav\fP
+\fB\-t pink\fP means use pink noise (default).
-Pink noise is perceptually uniform noise - that is, it sounds like every frequency at once. If you can hear any tone it may indicate resonances in your speaker system or room.
+Pink noise is perceptually uniform noise -- that is, it sounds like every frequency at once. If you can hear any tone it may indicate resonances in your speaker system or room.
--tsine means use sine wave.
+\fB\-t sine\fP means to use sine wave.
--twav means to play WAV files, either pre-defined files or given via -w option.
+\fB\-t wav\fP means to play WAV files, either pre-defined files or given via \fB\-w\fP option.
You can pass the number from 1 to 3 as a backward compatibility.
.TP
-\fB\-s\fP | \fB\-\-speaker\fP \fBpink\fP|\fBsine\fP|\fBwav\fP
-Test speaker 1 or speaker 2 only, rather than both
+\fB\-l\fP | \fB\-\-nloops\fP \fBCOUNT\fP
+
+Specifies the number of loops. Zero means to run inifintely.
+
+When \fB\-s\fP option below with a valid channel is given, \fBspeaker\-test\fP will perform
+always a single-shot without looping.
+
+.TP
+\fB\-s\fP | \fB\-\-speaker\fP \fBCHANNEL\fP
+Do a single-shot speaker test for the given channel. The channel number starts from 1.
+The channel number orresponds to left, right, rear-left, rear-right, center, LFE,
+side-left, side-right, and so on.
+
+For example, when 1 is passed, it tests the left channel only once rather than both channels
+with looping.
.TP
\fB\-w\fP | \fB\-\-wavfile\fP
.TP
\fB\-W\fP | \fB\-\-wavdir\fP
Specify the directory containing WAV files for playback.
+The default path is \fI/usr/share/sounds/alsa\fP.
.SH USAGE EXAMPLES
.SH AUTHOR
The speaker-test program was written by James Courtier-Dutton.
Pink noise support was added by Nathan Hurst.
+Further extensions by Takashi Iwai.
"-b,--buffer ring buffer size in us\n"
"-p,--period period size in us\n"
"-t,--test pink=use pink noise, sine=use sine wave, wav=WAV file\n"
- "-s,--speaker single speaker test. Values 1=Left or 2=right\n"
+ "-n,--nloops specify number of loops to test, 0 = infinite\n"
+ "-s,--speaker single speaker test. Values 1=Left, 2=right, etc\n"
"-w,--wavfile Use the given WAV file as a test sound\n"
"-W,--wavdir Specify the directory containing WAV files\n"
"\n"));
uint8_t *frames;
int chn;
double time1,time2,time3;
+ unsigned int n, nloops;
struct timeval tv1,tv2;
struct option long_option[] = {
{"buffer", 1, NULL, 'b'},
{"period", 1, NULL, 'p'},
{"test", 1, NULL, 't'},
+ {"nloops", 1, NULL, 'l'},
{"speaker", 1, NULL, 's'},
{"wavfile", 1, NULL, 'w'},
{"wavdir", 1, NULL, 'W'},
snd_pcm_hw_params_alloca(&hwparams);
snd_pcm_sw_params_alloca(&swparams);
+ nloops = 0;
morehelp = 0;
printf("\nspeaker-test %s\n\n", SND_UTIL_VERSION_STR);
while (1) {
int c;
- if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:t:s:w:W:", long_option, NULL)) < 0)
+ if ((c = getopt_long(argc, argv, "hD:r:c:f:F:b:p:t:l:s:w:W:", long_option, NULL)) < 0)
break;
switch (c) {
exit(1);
}
break;
+ case 'l':
+ nloops = atoi(optarg);
+ break;
case 's':
speaker = atoi(optarg);
speaker = speaker < 1 ? 0 : speaker;
exit(EXIT_FAILURE);
}
if (speaker==0) {
- while (1) {
- if (test_type == TEST_WAV) {
- for (chn = 0; chn < channels; chn++) {
- if (setup_wav_file(chn) < 0)
- exit(EXIT_FAILURE);
- }
+ if (test_type == TEST_WAV) {
+ for (chn = 0; chn < channels; chn++) {
+ if (setup_wav_file(chn) < 0)
+ exit(EXIT_FAILURE);
}
+ }
+
+ for (n = 0; ! nloops || n < nloops; n++) {
gettimeofday(&tv1, NULL);
for(chn = 0; chn < channels; chn++) {