mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 22:31:09 +08:00
Fixed seeking in multi channel FLAC files.
Updated seek() documentation.
This commit is contained in:
parent
698bbccd6a
commit
c78c8106da
@ -153,6 +153,9 @@ public:
|
||||
/// precision. If you need to jump to a given time, use the
|
||||
/// other overload.
|
||||
///
|
||||
/// The sample offset takes the channels into account.
|
||||
/// Offsets can be calculated like this:
|
||||
/// `sampleNumber * sampleRate * channelCount`
|
||||
/// If the given offset exceeds to total number of samples,
|
||||
/// this function jumps to the end of the sound file.
|
||||
///
|
||||
|
@ -79,6 +79,9 @@ public:
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Change the current read position to the given sample offset
|
||||
///
|
||||
/// The sample offset takes the channels into account.
|
||||
/// Offsets can be calculated like this:
|
||||
/// `sampleNumber * sampleRate * channelCount`
|
||||
/// If the given offset exceeds to total number of samples,
|
||||
/// this function must jump to the end of the file.
|
||||
///
|
||||
|
@ -210,7 +210,8 @@ bool SoundFileReaderFlac::check(InputStream& stream)
|
||||
////////////////////////////////////////////////////////////
|
||||
SoundFileReaderFlac::SoundFileReaderFlac() :
|
||||
m_decoder(NULL),
|
||||
m_clientData()
|
||||
m_clientData(),
|
||||
m_channelCount(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -248,6 +249,9 @@ bool SoundFileReaderFlac::open(InputStream& stream, Info& info)
|
||||
// Retrieve the sound properties
|
||||
info = m_clientData.info; // was filled in the "metadata" callback
|
||||
|
||||
// We must keep the channel count for the seek function
|
||||
m_channelCount = info.channelCount;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -262,7 +266,8 @@ void SoundFileReaderFlac::seek(Uint64 sampleOffset)
|
||||
m_clientData.remaining = 0;
|
||||
m_clientData.leftovers.clear();
|
||||
|
||||
FLAC__stream_decoder_seek_absolute(m_decoder, sampleOffset);
|
||||
// FLAC decoder expects absolute sample offset, so we take the channel count out
|
||||
FLAC__stream_decoder_seek_absolute(m_decoder, sampleOffset / m_channelCount);
|
||||
}
|
||||
|
||||
|
||||
|
@ -82,6 +82,9 @@ public:
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Change the current read position to the given sample offset
|
||||
///
|
||||
/// The sample offset takes the channels into account.
|
||||
/// Offsets can be calculated like this:
|
||||
/// `sampleNumber * sampleRate * channelCount`
|
||||
/// If the given offset exceeds to total number of samples,
|
||||
/// this function must jump to the end of the file.
|
||||
///
|
||||
@ -130,6 +133,7 @@ private:
|
||||
////////////////////////////////////////////////////////////
|
||||
FLAC__StreamDecoder* m_decoder; ///< FLAC decoder
|
||||
ClientData m_clientData; ///< Structure passed to the decoder callbacks
|
||||
unsigned int m_channelCount; ///< number of channels of the sound file
|
||||
};
|
||||
|
||||
} // namespace priv
|
||||
|
@ -82,6 +82,9 @@ public:
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Change the current read position to the given sample offset
|
||||
///
|
||||
/// The sample offset takes the channels into account.
|
||||
/// Offsets can be calculated like this:
|
||||
/// `sampleNumber * sampleRate * channelCount`
|
||||
/// If the given offset exceeds to total number of samples,
|
||||
/// this function must jump to the end of the file.
|
||||
///
|
||||
|
@ -74,6 +74,9 @@ public:
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Change the current read position to the given sample offset
|
||||
///
|
||||
/// The sample offset takes the channels into account.
|
||||
/// Offsets can be calculated like this:
|
||||
/// `sampleNumber * sampleRate * channelCount`
|
||||
/// If the given offset exceeds to total number of samples,
|
||||
/// this function must jump to the end of the file.
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user