*** new features for alsabat ***
cover *** new features for alsabat ***
From: "Lu, Han" <[email protected]>
Add 3 features for alsabat:
1. add default device name for playback and capture
2. add standalone mode, to bypass data analysis
3. add bash test script to cover basic alsabat features
Lu, Han (3):
alsabat: add default device name for playback and capture
alsabat: add standalone mode
alsabat: add bash test script
bat/Makefile.am | 13 +++--- bat/alsa.c | 12 ------ bat/alsabat-test.sh | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++ bat/alsabat.1 | 9 +++++ bat/bat.c | 18 ++++++++- bat/common.h | 3 ++ configure.ac | 5 ++- 7 files changed, 153 insertions(+), 19 deletions(-) create mode 100755 bat/alsabat-test.sh
Signature · 1 line
2.5.0
PATCH 1/3 alsabat: add default device name for playback and capture
From: "Lu, Han" <[email protected]>
Add default name for the playback and capture devices, in case they were not set by user through '-D', '-P' or '-C' options. Previously, if no device be specified, the alsabat will start a playback thread and a capture thread, and then exit the threads with error log.
If only one of playback and capture is specified, the alsabat will work on single line mode as before, where only one thread (playback or capture) will be started.
The patch was tested on Ubuntu and Chrome OS.
bat/alsa.c +0 -12
@@ -377,12 +377,6 @@ void *playback_alsa(struct bat *bat) retval_play =0 ;memset (&sndpcm,0 ,sizeof (sndpcm)); -if (bat->playback.device ==NULL ) { -fprintf (bat->err,_ ("No PCM device for playback: exit\n" )); - retval_play =1 ; - goto exit1; - } - err =snd_pcm_open (&sndpcm.handle, bat->playback.device,SND_PCM_STREAM_PLAYBACK ,0 );if (err !=0 ) {
@@ -533,12 +527,6 @@ void *record_alsa(struct bat *bat) retval_record =0 ;memset (&sndpcm,0 ,sizeof (sndpcm)); -if (bat->capture.device ==NULL ) { -fprintf (bat->err,_ ("No PCM device for capture: exit\n" )); - retval_record =1 ; - goto exit1; - } - err =snd_pcm_open (&sndpcm.handle, bat->capture.device,SND_PCM_STREAM_CAPTURE ,0 );if (err !=0 ) {
bat/bat.c +4 -0
@@ -473,6 +473,10 @@ static int bat_init(struct bat *bat)return err; } +/* Set default playback and capture devices */ +if (bat->playback.device ==NULL && bat->capture.device ==NULL ) + bat->playback.device = bat->capture.device =DEFAULT_DEV_NAME ; +/* Determine capture file */ if (bat->local) { bat->capture.file = bat->playback.file;
bat/common.h +1 -0
@@ -16,6 +16,7 @@#include <alsa/asoundlib.h> #define TEMP_RECORD_FILE_NAME "/tmp/bat.wav.XXXXXX" +#define DEFAULT_DEV_NAME "default"#define OPT_BASE 300#define OPT_LOG (OPT_BASE + 1)
Signature · 1 line
2.5.0
PATCH 2/3 alsabat: add standalone mode
In reply to [email protected]From: "Lu, Han" <[email protected]>
Add support for standalone mode where alsabat will run on a different machine to the one being tested.
In standalone mode, the alsabat just generates, playback and capture sound data like in normal mode, but does not analyze. The alsabat being built without libfftw3 support is always work in standalone mode.
The alsabat in normal mode can also bypass data analysis using option "--standalone".
bat/Makefile.am +6 -3
@@ -6,7 +6,6 @@ EXTRA_DIST = alsabat.1 alsabat_SOURCES = \ bat.c \ common.c \ - analyze.c \ signal.c \ convert.c \ alsa.c
@@ -15,8 +14,12 @@ noinst_HEADERS = \ common.h \ bat-signal.h \ alsa.h \ - convert.h \ - analyze.h + convert.h + +if HAVE_LIBFFTW3 +alsabat_SOURCES += analyze.c +noinst_HEADERS += analyze.h +endif AM_CPPFLAGS = \ -Wall -I$(top_srcdir)/include
bat/alsabat.1 +9 -0
@@ -120,6 +120,15 @@ Internal loopback mode. Playback, capture and analysis internal to ALSABAT only. This is intended for developers to test new ALSABAT features as no audio is routed outside of ALSABAT. +.TP +\fI\-\-standalone\fP +Add support for standalone mode where ALSABAT will run on a different machine +to the one being tested. +In standalone mode, the sound data can be generated, playback and captured +just like in normal mode, but will not be analyzed. +The ALSABAT being built without libfftw3 support is always in standalone mode. +The ALSABAT in normal mode can also bypass data analysis using option +"--standalone". .SH EXAMPLES
bat/bat.c +13 -1
@@ -33,7 +33,9 @@#include "alsa.h" #include "convert.h" +#ifdef HAVE_LIBFFTW3 #include "analyze.h" +#endif static int get_duration (struct bat *bat) {
@@ -289,6 +291,7 @@ _("Usage: alsabat [-options]...\n"" --file=# file for playback\n" " --saveplay=# file that storing playback content, for debug\n" " --local internal loop, set to bypass pcm hardware devices\n" +" --standalone standalone mode, to bypass analysis\n" )); fprintf(bat->log, _("Recognized sample formats are: %s %s %s %s\n"), snd_pcm_format_name(SND_PCM_FORMAT_U8),
@@ -339,6 +342,7 @@ static void parse_arguments(struct bat *bat, int argc, char *argv[]) {"file", 1, 0, OPT_READFILE}, {"saveplay", 1, 0, OPT_SAVEPLAY}, {"local", 0, 0, OPT_LOCAL}, + {"standalone", 0, 0, OPT_STANDALONE}, {0, 0, 0, 0} };
@@ -357,6 +361,9 @@ static void parse_arguments(struct bat *bat, int argc, char *argv[])case OPT_LOCAL : bat->local = true;break ; +case OPT_STANDALONE : + bat->standalone = true; +break ;case 'D' :if (bat->playback.device ==NULL ) bat->playback.device = optarg;
@@ -601,7 +608,12 @@ int main(int argc, char *argv[])test_loopback (&bat); analyze: - err =analyze_capture (&bat); +#ifdef HAVE_LIBFFTW3 +if (!bat.standalone) + err =analyze_capture (&bat); +#else +fprintf (bat.log,_ ("No libfftw3 library. Exit without analysis.\n" )); +#endif out:fprintf (bat.log,_ ("\nReturn value is %d\n" ), err);
bat/common.h +2 -0
@@ -23,6 +23,7 @@#define OPT_READFILE (OPT_BASE + 2)#define OPT_SAVEPLAY (OPT_BASE + 3)#define OPT_LOCAL (OPT_BASE + 4) +#define OPT_STANDALONE (OPT_BASE + 5)#define COMPOSE (a, b, c, d) ((a) | ((b)<<8) | ((c)<<16) | ((d)<<24))#define WAV_RIFF COMPOSE('R', 'I', 'F', 'F')
@@ -150,6 +151,7 @@ struct bat {char *narg;/* argument string of duration */ char *logarg;/* path name of log file */ char *debugplay;/* path name to store playback signal */ +bool standalone;/* enable to bypass analysis */ struct pcm playback;struct pcm capture;
configure.ac +4 -1
@@ -70,7 +70,9 @@ if test x$bat = xtrue; then FFTW_INC="" FFTW_LIB="" FFTW_CFLAGS="" - AC_CHECK_LIB([fftw3], [fftw_malloc], , [AC_MSG_ERROR([Error: need FFTW3 library])]) + dnl Check for libfftw3 + have_libfftw3="yes" + AC_CHECK_LIB([fftw3], [fftw_malloc], , [have_libfftw3="no"]) AC_CHECK_LIB([m], [sqrtf], , [AC_MSG_ERROR([Error: Need sqrtf])]) AC_CHECK_LIB([pthread], [pthread_create], , [AC_MSG_ERROR([Error: need PTHREAD library])]) FFTW_CFLAGS="$CFLAGS"
@@ -83,6 +85,7 @@ if test x$bat = xtrue; then AC_SUBST(FFTW_CFLAGS) fi +AM_CONDITIONAL(HAVE_LIBFFTW3, test "$have_libfftw3" = "yes") dnl Check for librt LIBRT=""
Signature · 1 line
2.5.0
PATCH 3/3 alsabat: add bash test script
In reply to [email protected]From: "Lu, Han" <[email protected]>
Add bash script for alsabat feature test. It covers basic alsabat features, including waveform and wav file generate, playback, capture and analysis with configurable parameters under different work modes. (loopback, single line, standalone and local mode) Usage examples:
alsabat-test.sh
alsabat-test.sh plughw:1,0
alsabat-test.sh plughw:1,0 plughw:1,0bat/Makefile.am +2 -2
@@ -1,7 +1,7 @@ bin_PROGRAMS = alsabat man_MANS = alsabat.1 - -EXTRA_DIST = alsabat.1 +EXTRA_DIST = alsabat.1 alsabat-test.sh +sbin_SCRIPTS = alsabat-test.sh alsabat_SOURCES = \ bat.c \
bat/alsabat-test.sh new file +112 -0
112 lines not on this page · raw message
Signature · 1 line
2.5.0
Takashi Iwai
AppliedQuoted 8 lines · On Tue, 15 Mar 2016 04:18:51 +0100, [email protected] wrote:
From: "Lu, Han" <[email protected]>
Add 3 features for alsabat:
1. add default device name for playback and capture
2. add standalone mode, to bypass data analysis
3. add bash test script to cover basic alsabat features
Quoted 4 lines
Lu, Han (3):
alsabat: add default device name for playback and capture
alsabat: add standalone mode
alsabat: add bash test script
Applied all three patches now. Thanks.
Takashi