BASS_StreamGetFilePosition
Retrieves the file position/status of a stream.
QWORD BASS_StreamGetFilePosition(
HSTREAM handle,
DWORD mode
);
Parameters
handle | The stream handle.
|
mode | The file position/status to retrieve. One of the following.
BASS_FILEPOS_ASYNCBUF | The amount of data in the asynchronous file reading buffer. This requires that the BASS_ASYNCFILE flag was used at the stream's creation.
| BASS_FILEPOS_AVAILABLE | The amount of data currently available to read from the current position.
| BASS_FILEPOS_BUFFER | The amount of data in the buffer of an internet file stream or "buffered" user file stream. Unless streaming in blocks, this is the same as BASS_FILEPOS_DOWNLOAD.
| BASS_FILEPOS_BUFFERING | The percentage of buffering remaining before playback of an internet file stream or "buffered" user file stream can resume.
| BASS_FILEPOS_CONNECTED | Internet file stream or "buffered" user file stream is still connected? 0 = no, 1 = yes, 2 = reconnecting.
| BASS_FILEPOS_CURRENT | Position that is to be decoded for playback next. This will be a bit ahead of the position actually being heard due to buffering.
| BASS_FILEPOS_DOWNLOAD | Download progress of an internet file stream or "buffered" user file stream.
| BASS_FILEPOS_END | End of audio data. When streaming in blocks (the BASS_STREAM_BLOCK flag is in effect), the download buffer length is given.
| BASS_FILEPOS_SIZE | Total size of the file.
| BASS_FILEPOS_START | Start of audio data.
|
other modes may be supported by add-ons, see the documentation.
|
Return value
If successful, then the requested file position/status is returned, else -1 is returned. Use BASS_ErrorGetCode to get the error code.
Error codes
BASS_ERROR_HANDLE | handle is not valid.
|
BASS_ERROR_NOTFILE | The stream is not a file stream.
|
BASS_ERROR_NOTAVAIL | The requested file position/status is not available.
|
Remarks
ID3 tags (both v1 and v2) and WAVE headers, as well as any other rubbish at the start of the file, are excluded from the BASS_FILEPOS_CURRENT, BASS_FILEPOS_DOWNLOAD, and BASS_FILEPOS_END positions. The BASS_FILEPOS_START position can be added to get the actual file position.
When streaming a file from the internet or a "buffered" user file stream, the entire file is downloaded even if the audio data ends before that, in case there are tags to be read. This means that the BASS_FILEPOS_DOWNLOAD position may go beyond the BASS_FILEPOS_END position.
It is unwise to use the BASS_FILEPOS_CURRENT position for syncing purposes because it gives the position that is being decoded, not the position that is being heard. Use BASS_ChannelGetPosition and/or BASS_ChannelSetSync instead.
Platform-specific
When an Android media codec (except AAC/ADTS) is used by a stream, only the BASS_FILEPOS_SIZE mode is supported, as the file reading will not be handled by BASS.
Example
Get the percentage downloaded of an internet file stream, or the buffer level when streaming in blocks.
QWORD len = BASS_StreamGetFilePosition(stream, BASS_FILEPOS_END); // file/buffer length
QWORD buf = BASS_StreamGetFilePosition(stream, BASS_FILEPOS_BUFFER); // buffer level
float progress = 100.0 * buf / len; // percentage of buffer filled
Get the buffering progress of a stalled internet file stream.
int progress = 100 - BASS_StreamGetFilePosition(stream, BASS_FILEPOS_BUFFERING);
See also
BASS_ChannelGetPosition, BASS_ChannelGetLength