/**
* @file adin.h
*
*
* @brief Definitions for A/D-in processing and sound detection.
*
* This file has some definitions relating audio input processing from
* various devices, and start/end of speech detection.
* @sa speech.h
*
*
* @brief 音声入力および振幅による音区間検出に関する定義
*
* このファイルには, さまざまなソースからの音声入力処理と音声区間の検出
* に関連するいくつかの定義が含まれています.
* @sa speech.h
*
*
* @author Akinobu LEE
* @date Thu Feb 10 17:22:36 2005
*
* $Revision: 1.12 $
*/
/*
* Copyright (c) 1991-2012 Kawahara Lab., Kyoto University
* Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
* Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology
* All rights reserved
*/
#ifndef __SENT_ADIN__
#define __SENT_ADIN__
#include
#include
/// Speech input type
enum {
INPUT_WAVEFORM,
INPUT_VECTOR
};
/// Speech input source
enum {
SP_RAWFILE, ///< Wavefile
SP_MIC, ///< Live microphone device, or plugin
SP_ADINNET, ///< Network client (adintool etc.)
SP_MFCFILE, ///< HTK parameter file
SP_NETAUDIO, ///< Live NetAudio/DatLink input
SP_STDIN, ///< Standard input
SP_MFCMODULE ///< parameter module
};
/// Input device
enum {
SP_INPUT_DEFAULT,
SP_INPUT_ALSA,
SP_INPUT_OSS,
SP_INPUT_ESD,
SP_INPUT_PULSEAUDIO
};
/**
* @def SUPPORTED_WAVEFILE_FORMAT
* String describing the list of supported wave file formats.
* It depends on HAVE_LIBSNDFILE.
*/
#ifdef HAVE_LIBSNDFILE
#define SUPPORTED_WAVEFILE_FORMAT "RAW(BE),WAV,AU,SND,NIST,ADPCM and more"
#else
#define SUPPORTED_WAVEFILE_FORMAT "RAW(BE),WAV"
#endif
/**
* Number of samples from beggining of input to be used for computing
* the zero mean of source channel (for microphone/network input).
*
*/
#define ZMEANSAMPLES 48000
#define DS_RBSIZE 512 ///< Filter size
#define DS_BUFSIZE 256 ///< Work area buffer size for x[]
#define DS_BUFSIZE_Y 512 ///< Work area buffer size for y[]
/**
* down sampling filter
*
*/
typedef struct {
int decrate; ///< Sample step rate from
int intrate; ///< Sample step rate to
double hdn[DS_RBSIZE+1]; ///< Filter coefficients
int hdn_len; ///< Filter length
int delay; ///< Filter start point delay length
double x[DS_BUFSIZE]; ///< Work area for down sampling
double y[DS_BUFSIZE_Y]; ///< Work area for down sampling
double rb[DS_RBSIZE]; ///< Temporal buffer for firin() and firout()
int indx; ///< Current index of rb[]
int bp; ///< Pointer of current input samples
int count; ///< Current output counter
} DS_FILTER;
/**
* down sampling data
*
*/
typedef struct {
DS_FILTER *fir[3]; ///< FIR filters for 48k-to-16k down sampling
double *buf[4]; ///< work buffer for each filter
int buflen; ///< Length of buffer
} DS_BUFFER;
/**
* Work area for zero-cross computation
*
*/
typedef struct {
int trigger; ///< Level threshold
int length; ///< Cycle buffer size = number of samples to hold
int offset; ///< Static data DC offset
int zero_cross; ///< Current zero-cross num
int is_trig; ///< Triggering status for zero-cross comp.
int sign; ///< Current sign of waveform
int top; ///< Top pointer of zerocross cycle buffer
int valid_len; ///< Filled length
SP16 *data; ///< Temporal data buffer for zerocross output
int *is_zc; ///< zero-cross location
int level; ///< Maximum absolute value of waveform signal in the zerocross buffer
} ZEROCROSS;
#define ZC_UNDEF 2 ///< Undefined mark for zerocross
#define ZC_POSITIVE 1 ///< Positive mark used for zerocross
#define ZC_NEGATIVE -1 ///< Negative mark used for zerocross
#ifdef __cplusplus
extern "C" {
#endif
/* adin/adin_mic_*.c */
boolean adin_mic_standby(int freq, void *arg);
boolean adin_mic_begin(char *pathname);
boolean adin_mic_end();
int adin_mic_read(SP16 *buf, int sampnum);
char *adin_mic_input_name();
/* adin/adin_mic_linux_alsa.c */
boolean adin_alsa_standby(int freq, void *arg);
boolean adin_alsa_begin(char *pathname);
boolean adin_alsa_end();
int adin_alsa_read(SP16 *buf, int sampnum);
char *adin_alsa_input_name();
/* adin/adin_mic_linux_oss.c */
boolean adin_oss_standby(int freq, void *arg);
boolean adin_oss_begin(char *pathname);
boolean adin_oss_end();
int adin_oss_read(SP16 *buf, int sampnum);
char *adin_oss_input_name();
/* adin/adin_esd.c */
boolean adin_esd_standby(int freq, void *arg);
boolean adin_esd_begin(char *pathname);
boolean adin_esd_end();
int adin_esd_read(SP16 *buf, int sampnum);
char *adin_esd_input_name();
/* adin/adin_pulseaudio.c */
boolean adin_pulseaudio_standby(int freq, void *arg);
boolean adin_pulseaudio_begin(char *pathname);
boolean adin_pulseaudio_end();
int adin_pulseaudio_read(SP16 *buf, int sampnum);
char *adin_pulseaudio_input_name();
/* adin/adin_netaudio.c and adin/adin_na.c */
boolean adin_netaudio_standby(int freq, void *arg);
boolean adin_netaudio_begin(char *pathname);
boolean adin_netaudio_end();
int adin_netaudio_read(SP16 *buf, int sampnum);
char *adin_netaudio_input_name();
int NA_standby(int, char *);
void NA_start();
void NA_stop();
int NA_read(SP16 *buf, int sampnum);
/* adin/adin_file.c */
boolean adin_file_standby(int freq, void *arg);
boolean adin_file_begin(char *pathname);
int adin_file_read(SP16 *buf, int sampnum);
boolean adin_file_end();
boolean adin_stdin_standby(int freq, void *arg);
boolean adin_stdin_begin(char *pathname);
int adin_stdin_read(SP16 *buf, int sampnum);
char *adin_file_get_current_filename();
char *adin_stdin_input_name();
/* adin/adin_sndfile.c */
#ifdef HAVE_LIBSNDFILE
boolean adin_sndfile_standby(int freq, void *arg);
boolean adin_sndfile_begin(char *pathname);
int adin_sndfile_read(SP16 *buf, int sampnum);
boolean adin_sndfile_end();
char *adin_sndfile_get_current_filename();
#endif
/* adin/adin_tcpip.c */
boolean adin_tcpip_standby(int freq, void *arg);
boolean adin_tcpip_begin(char *pathname);
boolean adin_tcpip_end();
int adin_tcpip_read(SP16 *buf, int sampnum);
boolean adin_tcpip_send_pause();
boolean adin_tcpip_send_terminate();
boolean adin_tcpip_send_resume();
char *adin_tcpip_input_name();
/* adin/zc-e.c */
void init_count_zc_e(ZEROCROSS *zc, int length);
void reset_count_zc_e(ZEROCROSS *zc, int c_trigger, int c_length, int c_offset);
void free_count_zc_e(ZEROCROSS *zc);
int count_zc_e(ZEROCROSS *zc, SP16 *buf,int step);
void zc_copy_buffer(ZEROCROSS *zc, SP16 *newbuf, int *len);
/* adin/zmean.c */
void zmean_reset();
void sub_zmean(SP16 *speech, int samplenum);
/* adin/ds48to16.c */
DS_BUFFER *ds48to16_new();
void ds48to16_free(DS_BUFFER *ds);
int ds48to16(SP16 *dst, SP16 *src, int srclen, int maxdstlen, DS_BUFFER *ds);
#ifdef __cplusplus
}
#endif
#endif /* __SENT_ADIN__ */