libsent/src/adin/adin_file.c File Reference

Audio input from file or stdin. More...

#include <sent/stddefs.h>
#include <sent/speech.h>
#include <sent/adin.h>

Go to the source code of this file.

Defines

#define MYREAD(A, B, C, D)   if (!myread(A, B, C, D)) {jlog("Error: adin_file: file is corrupted\n"); return -1;}
 Abbreviation for header reading.

Functions

static boolean myread (void *buf, size_t unitbyte, int unitnum, FILE *fp)
 Read a header value from WAVE file with endian conversion.
static boolean setup_wav (FILE *fp)
 Parse header part of a WAVE file to prepare for data reading.
static boolean adin_file_open (char *filename)
 Open input file.
static boolean adin_file_close ()
 Close the input file.
boolean adin_file_standby (int freq, void *arg)
 Initialization: if listfile is specified, open it here.
boolean adin_file_begin ()
 Begin reading audio data from a file.
int adin_file_read (SP16 *buf, int sampnum)
 Try to read sampnum samples and returns actual sample num recorded.
boolean adin_file_end ()
 End recording.
boolean adin_stdin_standby (int freq, void *arg)
 Initialization for speech input via stdin.
boolean adin_stdin_begin ()
 Begin reading audio data from stdin.
int adin_stdin_read (SP16 *buf, int sampnum)
 Try to read sampnum samples and returns actual sample num recorded.
char * adin_file_get_current_filename ()
 A tiny function to get current input raw speech file name.

Variables

static FILE * gfp
 File pointer of current input file.
static boolean wav_p
 TRUE if input is WAVE file, FALSE if RAW file.
static int maxlen
 Number of samples, described in the header of WAVE file.
static int nowlen
 Current number of read samples.
static SP16 pre_data [2]
 When file input, the first 4 bytes of the file are read at first to identify whether it is WAVE file format.
static boolean has_pre
 TRUE if pre_data is available.
static unsigned int sfreq
 Sampling frequency in Hz, specified by adin_standby().
static char speechfilename [MAXPATHLEN]
 Buffer to hold input file name.
static boolean from_file
 TRUE if list file is used to read input filename.
static FILE * fp_list
 File pointer used for the listfile.


Detailed Description

Audio input from file or stdin.

Functions to get input from wave file or standard input. Two file formats are supported, Microsoft WAVE format and RAW (no header) format. The audio format should be uncompressed PCM, 16bit, monoral. On RAW file input, the data byte order must be in big endian.

The sampling rate of input file must be equal to the system requirement value which is specified by adin_standby() . For WAVE format file, the sampling rate of the input file described in its header is checked against the system value, and rejected if not matched. But for RAW format file, no check will be applied since it has no header information about the recording sampling rate, so be careful of the sampling rate setting.

When file input mode, the file name will be read from standard input. If a filelist file is specified, the file names are read from the file sequencially instead.

When compiled with libsndfile support, the functions in adin_sndfile.c is used for file input instead of functions below.

In this file, assume sizeof(int)=4, sizeof(short)=2

Author:
Akinobu LEE
Date:
Sun Feb 13 13:31:20 2005
Revision
1.1.1.1

Definition in file adin_file.c.


Function Documentation

static boolean myread ( void *  buf,
size_t  unitbyte,
int  unitnum,
FILE *  fp 
) [static]

Read a header value from WAVE file with endian conversion.

If required number of data has not been read, it produces error.

Parameters:
buf [out] Pointer to store read data
unitbyte [in] Unit size
unitnum [in] Required number of units to read
fp [in] File pointer
Returns:
TRUE on success, FALSE if required number of data has not been read.

Definition at line 106 of file adin_file.c.

Referenced by CMN_load_from_file(), new_SS_load_from_file(), read_param(), and setup_wav().

static boolean setup_wav ( FILE *  fp  )  [static]

Parse header part of a WAVE file to prepare for data reading.

The audio format will be checked here, and data length is also read from the header. Then the pointer is moved to the start point of data part.

When called, the file pointer should be located just after the first 4 bytes, "RIFF". It also sets maxlen and nowlen .

Parameters:
fp [in] File pointer
Returns:
TRUE if check successfully passed, FALSE if an error occured.

Definition at line 134 of file adin_file.c.

Referenced by adin_file_open().

static boolean adin_file_open ( char *  filename  )  [static]

Open input file.

Open the file, check the file format, and set the file pointer to gfp .

Parameters:
filename [in] file name, or NULL for standard input
Returns:
TRUE on success, FALSE on failure.

Definition at line 243 of file adin_file.c.

Referenced by adin_file_begin(), and adin_stdin_begin().

static boolean adin_file_close (  )  [static]

Close the input file.

Returns:
TRUE on success, FALSE on failure.

Definition at line 298 of file adin_file.c.

Referenced by adin_file_end(), and adin_file_read().

boolean adin_file_standby ( int  freq,
void *  arg 
)

Initialization: if listfile is specified, open it here.

Parameters:
freq [in] required sampling frequency.
arg [in] file name of listfile, or NULL if not use
Returns:
TRUE on success, FALSE on failure.

Definition at line 322 of file adin_file.c.

Referenced by adin_select().

boolean adin_file_begin (  ) 

Begin reading audio data from a file.

If listfile was specified in adin_file_standby(), the next filename will be read from the listfile. Otherwise, the filename will be obtained from stdin. Then the file will be opened here.

Returns:
TRUE on success, FALSE on failure.

Definition at line 352 of file adin_file.c.

Referenced by adin_select().

int adin_file_read ( SP16 buf,
int  sampnum 
)

Try to read sampnum samples and returns actual sample num recorded.

Parameters:
buf [out] samples obtained in this function
sampnum [in] wanted number of samples to be read
Returns:
actural number of read samples, -1 if EOF, -2 if error.

Definition at line 393 of file adin_file.c.

Referenced by adin_select().

boolean adin_file_end (  ) 

End recording.

Returns:
TRUE on success, FALSE on failure.

Definition at line 440 of file adin_file.c.

Referenced by adin_select().

boolean adin_stdin_standby ( int  freq,
void *  arg 
)

Initialization for speech input via stdin.

Parameters:
freq [in] required sampling frequency.
arg dummy, ignored
Returns:
TRUE on success, FALSE on failure.

Definition at line 456 of file adin_file.c.

Referenced by adin_select().

boolean adin_stdin_begin (  ) 

Begin reading audio data from stdin.

Returns:
TRUE on success, FALSE on failure.

Definition at line 469 of file adin_file.c.

Referenced by adin_select().

int adin_stdin_read ( SP16 buf,
int  sampnum 
)

Try to read sampnum samples and returns actual sample num recorded.

Parameters:
buf [out] samples obtained in this function
sampnum [in] wanted number of samples to be read
Returns:
actural number of read samples, -1 if EOF, -2 if error.

Definition at line 493 of file adin_file.c.

Referenced by adin_select().

char* adin_file_get_current_filename (  ) 

A tiny function to get current input raw speech file name.

Returns:
string of current input speech file.

Definition at line 534 of file adin_file.c.

Referenced by j_get_current_filename().


Variable Documentation

SP16 pre_data[2] [static]

When file input, the first 4 bytes of the file are read at first to identify whether it is WAVE file format.

This work area is used to keep back the 4 bytes if the input is actually a RAW format.

Definition at line 83 of file adin_file.c.

Referenced by adin_file_open(), adin_file_read(), and adin_stdin_read().


Generated on Tue Dec 18 16:01:37 2007 for Julius by  doxygen 1.5.4