| Speech-Recognizer-SPX documentation | Contained in the Speech-Recognizer-SPX distribution. |
Audio::SPX - Perl interface to the Sphinx audio library.
use Audio::SPX;
my $ad = Audio::SPX->open_sps(16000);
$ad->start_rec or die "start_rec failed";
$ad->stop_rec or die "stop_rec failed";
my $samples = $ad->read($buf, $max);
my $cad = Audio::SPX::Continuous->init($ad);
my $cad = Audio::SPX::Continuous->init_nbfh($fh, $sps);
my $cad = Audio::SPX::Continuous->init_raw($fh, $sps);
$cad->calib;
$cad->calib_loop($buf);
$cad->set_thresh($sil, $sp);
$cad->set_params($delta_sil, $delta_speech, $min_noise,
$max_noise, $winsize, $speech_onset,
$sil_onset, $leader, $trailer);
my ($delta_sil, $delta_speech, $min_noise, $max_noise,
$winsize, $speech_onset, $sil_onset, $leader, $trailer)
= $cad->get_params;
# If init_raw was used, this will consume the data in $buf, then
# write back any non-slience data. Yes, this feature is
# undocumented in the Sphinx headers. Yes, it's very useful.
my $samples = $cad->read($buf, $max);
$cad->reset;
$cad->detach;
$cad->attach($ad);
$cad->read_ts;
$cad->set_logfp(\*FH);
Warning! This interface is suboptimal and is therefore probably going to change, both in the Perl module and the underlying library.
The only supported sample rate for Audio::SPX is 16kHz
(Audio::SPX::Continuous should be fine with others). init_sps() will
simply fail rudely if you try something else... which means it isn't
really very useful. I suggest either opening the audio device
yourself, setting non-blocking mode (beware, some sound drivers don't
like this...) and passing it to the init_nbfh method in
Audio::SPX::Continuous, or using init_raw and managing the audio
device yourself.
There isn't enough documentation yet, partly because the API is somewhat in flux, and partly because I haven't figured out what some of this stuff does either :-)
David Huggins-Daines <dhuggins@cs.cmu.edu>
perl(1), Speech::Recognizer::SPX
| Speech-Recognizer-SPX documentation | Contained in the Speech-Recognizer-SPX distribution. |
use strict; # Audio::SPX: Perl interface to the Sphinx audio library. # Copyright (c) 2000 Cepstral LLC. # # This module is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. # # Written by David Huggins-Daines <dhuggins@cs.cmu.edu> package Audio::SPX; use Carp; use vars qw($VERSION $AUTOLOAD @ISA @EXPORT_OK); require Exporter; require DynaLoader; @ISA=qw(Exporter DynaLoader); @EXPORT_OK=qw( AD_EOF AD_ERR_GEN AD_ERR_NOT_OPEN AD_ERR_WAVE AD_OK AD_SAMPLE_SIZE DEFAULT_SAMPLES_PER_SEC ); $VERSION=0.02; sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; croak "& not defined" if $constname eq 'constant'; my $val = constant($constname, @_ ? $_[0] : 0); if ($! != 0) { if ($! =~ /Invalid/) { croak "Undefined subroutine $AUTOLOAD"; } else { croak "Your vendor has not defined Audio::SPX macro $constname"; } } no strict 'refs'; if ($] >= 5.00561) { *$AUTOLOAD = sub () { $val }; } else { *$AUTOLOAD = sub { $val }; } goto &$AUTOLOAD; } bootstrap Audio::SPX $VERSION; 1; __END__