James Courtier-Dutton <James@superbug.demon.co.uk>

I attach a patch that updates the speaker-test program.
It corrects a few minor bugs as well as add a new -s option.
This commit is contained in:
Jaroslav Kysela 2004-05-16 13:43:29 +00:00
parent e4d3e84845
commit 2db52ba839
2 changed files with 41 additions and 17 deletions

View file

@ -4,9 +4,11 @@ make
To test: - To test: -
1) Just stereo sound from one stereo jack: - 1) Just stereo sound from one stereo jack: -
./speaker-test -Dfront -c 2 ./speaker-test -Dfront -c2
2) A 4 speaker setup from two stereo jacks: - 2) A 4 speaker setup from two stereo jacks: -
./speaker-test -Dsurround40 -c 4 ./speaker-test -Dsurround40 -c4
3) A 5.1 speaker setup from three stereo jacks: - 3) A 5.1 speaker setup from three stereo jacks: -
./speaker-test -Dsurround51 -c 6 ./speaker-test -Dsurround51 -c6
4) To send a nice low 75Hz tone to the Woofer and then exit without touching any other speakers: -
./speaker-test -Dplug:surround51 -c6 -s1 -f75

View file

@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* xine is distributed in the hope that it will be useful, * speaker-test is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
@ -40,8 +40,9 @@
static char *device = "plughw:0,0"; /* playback device */ static char *device = "plughw:0,0"; /* playback device */
static snd_pcm_format_t format = SND_PCM_FORMAT_S16; /* sample format */ static snd_pcm_format_t format = SND_PCM_FORMAT_S16; /* sample format */
static unsigned int rate = 44100; /* stream rate */ static unsigned int rate = 48000; /* stream rate */
static unsigned int channels = 1; /* count of channels */ static unsigned int channels = 1; /* count of channels */
static unsigned int speaker = 0; /* count of channels */
static unsigned int buffer_time = 500000; /* ring buffer length in us */ static unsigned int buffer_time = 500000; /* ring buffer length in us */
static unsigned int period_time = 100000; /* period time in us */ static unsigned int period_time = 100000; /* period time in us */
static double freq = 440; /* sinusoidal wave frequency in Hz */ static double freq = 440; /* sinusoidal wave frequency in Hz */
@ -307,10 +308,9 @@ static int write_loop(snd_pcm_t *handle, int channel, int periods, signed short
} }
static void help(void) { static void help(void) {
int k;
printf( printf(
"Usage: latency [OPTION]... [FILE]...\n" "Usage: speaker-test [OPTION]... \n"
"-h,--help help\n" "-h,--help help\n"
"-D,--device playback device\n" "-D,--device playback device\n"
"-r,--rate stream rate in Hz\n" "-r,--rate stream rate in Hz\n"
@ -318,8 +318,9 @@ static void help(void) {
"-f,--frequency sine wave frequency in Hz\n" "-f,--frequency sine wave frequency in Hz\n"
"-b,--buffer ring buffer size in us\n" "-b,--buffer ring buffer size in us\n"
"-p,--period period size in us\n" "-p,--period period size in us\n"
"-s,--speaker single speaker test. Values 1=Left or 2=right\n"
"\n"); "\n");
#if 0
printf("Recognized sample formats are:"); printf("Recognized sample formats are:");
for (k = 0; k < SND_PCM_FORMAT_LAST; ++k) { for (k = 0; k < SND_PCM_FORMAT_LAST; ++k) {
const char *s = snd_pcm_format_name(k); const char *s = snd_pcm_format_name(k);
@ -328,6 +329,8 @@ static void help(void) {
} }
printf("\n\n"); printf("\n\n");
#endif
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
@ -345,6 +348,7 @@ int main(int argc, char *argv[]) {
{"frequency", 1, NULL, 'f'}, {"frequency", 1, NULL, 'f'},
{"buffer", 1, NULL, 'b'}, {"buffer", 1, NULL, 'b'},
{"period", 1, NULL, 'p'}, {"period", 1, NULL, 'p'},
{"speaker", 1, NULL, 's'},
{NULL, 0, NULL, 0 }, {NULL, 0, NULL, 0 },
}; };
@ -357,7 +361,7 @@ int main(int argc, char *argv[]) {
while (1) { while (1) {
int c; int c;
if ((c = getopt_long(argc, argv, "hD:r:c:f:b:p:m:", long_option, NULL)) < 0) if ((c = getopt_long(argc, argv, "hD:r:c:f:b:p:s:", long_option, NULL)) < 0)
break; break;
switch (c) { switch (c) {
@ -392,6 +396,15 @@ int main(int argc, char *argv[]) {
period_time = period_time < 1000 ? 1000 : period_time; period_time = period_time < 1000 ? 1000 : period_time;
period_time = period_time > 1000000 ? 1000000 : period_time; period_time = period_time > 1000000 ? 1000000 : period_time;
break; break;
case 's':
speaker = atoi(optarg);
speaker = speaker < 1 ? 0 : speaker;
speaker = speaker > channels ? 0 : speaker;
if (speaker==0) {
printf("Invalid parameter for -s option.\n");
exit(EXIT_FAILURE);
}
break;
default: default:
printf("Unknown option '%c'\n", c); printf("Unknown option '%c'\n", c);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -433,7 +446,7 @@ int main(int argc, char *argv[]) {
printf("No enough memory\n"); printf("No enough memory\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (speaker==0) {
while (1) { while (1) {
for(chn = 0; chn < channels; chn++) { for(chn = 0; chn < channels; chn++) {
@ -447,6 +460,15 @@ int main(int argc, char *argv[]) {
} }
} }
} }
} else {
printf(" - %s\n", channel_name[speaker-1]);
err = write_loop(handle, speaker-1, ((rate*5)/period_size), samples);
if (err < 0) {
printf("Transfer failed: %s\n", snd_strerror(err));
}
}
free(samples); free(samples);
snd_pcm_close(handle); snd_pcm_close(handle);