Retrieves the file position/status of a stream.
|handle||The stream handle.
|mode||The file position/status to retrieve. One of the following.|
other modes may be supported by add-ons, see the documentation.
|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_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_CONNECTED||Internet file stream or "buffered" user file stream is still connected? 0 = no, 1 = yes.
|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.
If successful, then the requested file position/status is returned, else -1 is returned. Use BASS_ErrorGetCode to get the error code.
|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.
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.
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