AFfReadData


Routine:

int AFfReadData (AFILE *AFp, long int offs, float Dbuff[], int Nreq)

Purpose:

Read data from an audio file (return float values)

Description:

This routine returns a specified number of samples at a given sample offset in an audio file. The data in the file is converted to float format on output. The sample data in the file is considered to be preceded and followed by zero-valued samples. Thus if the sample offset is negative or points to beyond the number of samples in the file, the appropriate number of zero-valued samples is returned. The file must have been opened using routine AFopnRead.

This routine returns float data. This format gives 24 bits of precision. A loss of precision is possible if the input file contains double or 32-bit integer data.

The following program fragment illustrates the use of this routine to read overlapping blocks of data. For the simpler case of sequential access to the data without overlap, the variable Lmem should be set to zero.

    float Dbuff[320]'
     ...
    AFp = AFopnRead (...);
     ...
    Lmem = 80;
    Lblock = 320;
    Nadv = Lblock - Lmem;
    offs = -Lmem;
    while (1) {
      Nout = AFfReadData (AFp, offs, Dbuff, Lblock);
      offs = offs + Nadv;
      if (Nout <= 0)
        break;
       ...
    }

On encountering an error, the default behaviour is to print an error message and halt execution.

Parameters:

<- int AFfReadData
Number of data values transferred from the file. On reaching the end of the file, this value may be less than Nreq, in which case the last elements are set to zero. This value can be used by the calling routine to determine when the data from the file has been exhausted.
-> AFILE *AFp
Audio file pointer for an audio file opened by AFopnRead
-> long int offs
Offset into the file in samples. If offs is positive, the first value returned is offs samples from the beginning of the data. The file data is considered to be preceded by zeros. Thus if offs is negative, the appropriate number of zeros will be returned. These zeros before the beginning of the data are counted as part of the count returned in Nout.
<- float Dbuff[]
Array of floats to receive Nreq samples. The data is organized as sequential frames of samples, where each frame contains samples for each of the channels.
-> int Nreq
Number of samples requested. Nreq may be zero.

Author / revision:

P. Kabal / Revision 1.13 2017-06-26

See Also

AFdReadData, AFopnRead


Main Index libtsp