minimodem: --alsa selects ALSA at runtime

./configure now enables --with-pulseaudio and --with-alsa by default;
either can be disabled.

minimodem --alsa: uses ALSA at runtime instead of the default PulseAudio.
This commit is contained in:
Kamal Mostafa 2012-08-08 20:10:55 -07:00
parent 445156dfa0
commit 4b926d58bb
5 changed files with 36 additions and 26 deletions

4
README
View File

@ -1,10 +1,10 @@
minimodem - software audio Bell-type or RTTY FSK modem minimodem - software audio Bell-type or RTTY FSK modem
Copyright (C) 2011 Kamal Mostafa <kamal@whence.com> Copyright (C) 2011-2012 Kamal Mostafa <kamal@whence.com>
Minimodem is a command-line program which generates (or decodes) audio Minimodem is a command-line program which generates (or decodes) audio
modem tones at any specified baud rate, emulating an old Bell-type or modem tones at any specified baud rate, emulating an old Bell-type or
radio-teletype FSK modem. The tones can be played to (or recorded from) radio-teletype FSK modem. The tones can be played to (or recorded from)
the PulseAudio system or to an audio file. the system audio (PulseAudio or ALSA) or to an audio file.
Minimodem can be used to transfer data between nearby computers using an Minimodem can be used to transfer data between nearby computers using an
audio cable (or just via sound waves), or between remote computers using audio cable (or just via sound waves), or between remote computers using

3
configure vendored
View File

@ -3299,13 +3299,12 @@ if test "${with_alsa+set}" = set; then :
withval=$with_alsa; withval=$with_alsa;
fi fi
if test "x$with_alsa" != "xyes"; then : if test "x$with_alsa" == "xno"; then :
# then # then
use_alsa=0 use_alsa=0
else else
# else # else
use_alsa=1 use_alsa=1
with_pulseaudio=no # For now, ALSA precludes pulseaudio
deps_packages+=" alsa" deps_packages+=" alsa"
fi fi

View File

@ -36,12 +36,11 @@ deps_packages+=" fftw3f"
# ALSA # ALSA
AC_ARG_WITH([alsa], AC_ARG_WITH([alsa],
AS_HELP_STRING([--without-alsa], [build without ALSA support])) AS_HELP_STRING([--without-alsa], [build without ALSA support]))
AS_IF([test "x$with_alsa" != "xyes"], AS_IF([test "x$with_alsa" == "xno"],
# then # then
use_alsa=0, use_alsa=0,
# else # else
use_alsa=1 use_alsa=1
with_pulseaudio=no # For now, ALSA precludes pulseaudio
deps_packages+=" alsa") deps_packages+=" alsa")
AC_DEFINE_UNQUOTED(USE_ALSA, $use_alsa, AC_DEFINE_UNQUOTED(USE_ALSA, $use_alsa,
[Define to 1 to enable ALSA support]) [Define to 1 to enable ALSA support])

View File

@ -30,7 +30,7 @@ minimodem \- software audio Bell-type or RTTY FSK modem
is a command-line program which generates (or decodes) audio is a command-line program which generates (or decodes) audio
modem tones at any specified baud rate, emulating an old Bell-type or modem tones at any specified baud rate, emulating an old Bell-type or
radio-teletype FSK modem. The tones can be played to (or recorded from) radio-teletype FSK modem. The tones can be played to (or recorded from)
the PulseAudio system or to an audio file. the system audio (PulseAudio or ALSA) or to an audio file.
.PP .PP
.B minimodem .B minimodem
can be used to transfer data between nearby computers using an audio can be used to transfer data between nearby computers using an audio
@ -71,6 +71,10 @@ encode or decode an audio file (extension sets audio format)
.B \-q, \-\-quiet .B \-q, \-\-quiet
Do not report CARRIER / NOCARRIER or signal analysis metrics. Do not report CARRIER / NOCARRIER or signal analysis metrics.
.TP .TP
.B \-A, \-\-alsa
Use ALSA as the audio output system instead of the default
PulseAudio (depending on build configuration options).
.TP
.B \-V, \-\-version .B \-V, \-\-version
print program version print program version
.SH {baudmode} .SH {baudmode}

View File

@ -255,6 +255,7 @@ usage()
" -T, --txstopbits {m.n}\n" " -T, --txstopbits {m.n}\n"
" -q, --quiet\n" " -q, --quiet\n"
" -V, --version\n" " -V, --version\n"
" -A, --alsa\n"
" {baudmode}\n" " {baudmode}\n"
" 1200 : Bell202 1200 bps --ascii\n" " 1200 : Bell202 1200 bps --ascii\n"
" 300 : Bell103 300 bps --ascii\n" " 300 : Bell103 300 bps --ascii\n"
@ -283,6 +284,20 @@ main( int argc, char*argv[] )
float carrier_autodetect_threshold = 0.0; float carrier_autodetect_threshold = 0.0;
float bfsk_confidence_threshold = 0.6; float bfsk_confidence_threshold = 0.6;
simpleaudio * (*simpleaudio_open_system_audio)() = NULL;
/* configure the default system audio mechanism */
#if USE_PULSEAUDIO
simpleaudio_open_system_audio = simpleaudio_open_stream_pulseaudio;
#elif USE_ALSA
simpleaudio_open_system_audio = simpleaudio_open_stream_alsa;
#else
# define _MINIMODEM_NO_SYSTEM_AUDIO
# if !USE_SNDFILE
# error At least one of {USE_PULSEAUDIO,USE_ALSA,USE_SNDFILE} must be enabled!
# endif
#endif
program_name = strrchr(argv[0], '/'); program_name = strrchr(argv[0], '/');
if ( program_name ) if ( program_name )
program_name++; program_name++;
@ -311,9 +326,10 @@ main( int argc, char*argv[] )
{ "space", 1, 0, 'S' }, { "space", 1, 0, 'S' },
{ "txstopbits", 1, 0, 'T' }, { "txstopbits", 1, 0, 'T' },
{ "quiet", 0, 0, 'q' }, { "quiet", 0, 0, 'q' },
{ "alsa", 0, 0, 'A' },
{ 0 } { 0 }
}; };
c = getopt_long(argc, argv, "Vtrc:a85f:b:M:S:T:q", c = getopt_long(argc, argv, "Vtrc:a85f:b:M:S:T:qA",
long_options, &option_index); long_options, &option_index);
if ( c == -1 ) if ( c == -1 )
break; break;
@ -365,6 +381,14 @@ main( int argc, char*argv[] )
case 'q': case 'q':
quiet_mode = 1; quiet_mode = 1;
break; break;
case 'A':
#if USE_ALSA
simpleaudio_open_system_audio = simpleaudio_open_stream_alsa;
#else
fprintf(stderr, "E: This build of minimodem was configured without alsa support.\n");
exit(1);
#endif
break;
default: default:
usage(); usage();
} }
@ -372,26 +396,13 @@ main( int argc, char*argv[] )
if ( TX_mode == -1 ) if ( TX_mode == -1 )
TX_mode = 0; TX_mode = 0;
#if !(USE_PULSEAUDIO || USE_ALSA || USE_SNDFILE)
#error At least one of {USE_PULSEAUDIO,USE_ALSA,USE_SNDFILE} must be enabled!
#endif
#if (USE_PULSEAUDIO && USE_ALSA)
#error For now, only one of {USE_PULSEAUDIO,USE_ALSA} can be enabled (FIXME)!
#endif
#if USE_PULSEAUDIO
#define simpleaudio_open_system_audio simpleaudio_open_stream_pulseaudio
#elif USE_ALSA
#define simpleaudio_open_system_audio simpleaudio_open_stream_alsa
#endif
if ( filename ) { if ( filename ) {
#if !USE_SNDFILE #if !USE_SNDFILE
fprintf(stderr, "E: This build of minimodem was configured without sndfile,\nE: so the --file flag is not supported.\n"); fprintf(stderr, "E: This build of minimodem was configured without sndfile,\nE: so the --file flag is not supported.\n");
exit(1); exit(1);
#endif #endif
} else { } else {
#ifndef simpleaudio_open_system_audio #ifdef _MINIMODEM_NO_SYSTEM_AUDIO
fprintf(stderr, "E: this build of minimodem was configured without system audio support,\nE: so only the --file mode is supported.\n"); fprintf(stderr, "E: this build of minimodem was configured without system audio support,\nE: so only the --file mode is supported.\n");
exit(1); exit(1);
#endif #endif
@ -507,11 +518,9 @@ main( int argc, char*argv[] )
return 1; return 1;
} }
#ifdef simpleaudio_open_system_audio
if ( ! sa_out ) if ( ! sa_out )
sa_out = simpleaudio_open_system_audio(SA_STREAM_PLAYBACK, sa_out = simpleaudio_open_system_audio(SA_STREAM_PLAYBACK,
program_name, "output audio"); program_name, "output audio");
#endif
if ( ! sa_out ) if ( ! sa_out )
return 1; return 1;
@ -537,11 +546,10 @@ main( int argc, char*argv[] )
if ( ! sa ) if ( ! sa )
return 1; return 1;
} }
#ifdef simpleaudio_open_system_audio
if ( ! sa ) if ( ! sa )
sa = simpleaudio_open_system_audio(SA_STREAM_RECORD, sa = simpleaudio_open_system_audio(SA_STREAM_RECORD,
program_name, "input audio"); program_name, "input audio");
#endif
if ( !sa ) if ( !sa )
return 1; return 1;