SINT SoundSourceMp3::readSampleFramesStereo( SINT numberOfFrames, CSAMPLE* sampleBuffer, SINT sampleBufferSize) { return readSampleFrames(numberOfFrames, sampleBuffer, sampleBufferSize, true); }
SINT AudioSource::readSampleFramesStereo( SINT numberOfFrames, CSAMPLE* sampleBuffer, SINT sampleBufferSize) { DEBUG_ASSERT(getSampleBufferSize(numberOfFrames, true) <= sampleBufferSize); switch (getChannelCount()) { case 1: // mono channel { const SINT readFrameCount = readSampleFrames( numberOfFrames, sampleBuffer); SampleUtil::doubleMonoToDualMono(sampleBuffer, readFrameCount); return readFrameCount; } case 2: // stereo channel(s) { return readSampleFrames(numberOfFrames, sampleBuffer); } default: // multiple (3 or more) channels { const SINT numberOfSamplesToRead = frames2samples(numberOfFrames); if (numberOfSamplesToRead <= sampleBufferSize) { // efficient in-place transformation const SINT readFrameCount = readSampleFrames( numberOfFrames, sampleBuffer); SampleUtil::copyMultiToStereo(sampleBuffer, sampleBuffer, readFrameCount, getChannelCount()); return readFrameCount; } else { // inefficient transformation through a temporary buffer qDebug() << "Performance warning:" << "Allocating a temporary buffer of size" << numberOfSamplesToRead << "for reading stereo samples." << "The size of the provided sample buffer is" << sampleBufferSize; SampleBuffer tempBuffer(numberOfSamplesToRead); const SINT readFrameCount = readSampleFrames( numberOfFrames, tempBuffer.data()); SampleUtil::copyMultiToStereo(sampleBuffer, tempBuffer.data(), readFrameCount, getChannelCount()); return readFrameCount; } } } }
SINT SoundSourceCoreAudio::seekSampleFrame(SINT frameIndex) { DEBUG_ASSERT(isValidFrameIndex(frameIndex)); // See comments above on kMp3StabilizationFrames. const SINT stabilization_frames = m_bFileIsMp3 ? math_min<SINT>( kMp3StabilizationFrames, frameIndex + m_headerFrames) : 0; OSStatus err = ExtAudioFileSeek( m_audioFile, frameIndex + m_headerFrames - stabilization_frames); if (stabilization_frames > 0) { readSampleFrames(stabilization_frames, &kMp3StabilizationScratchBuffer[0]); } //_ThrowExceptionIfErr(@"ExtAudioFileSeek", err); //qDebug() << "SSCA: Seeking to" << frameIndex; if (err != noErr) { qDebug() << "SSCA: Error seeking to" << frameIndex; // << GetMacOSStatusErrorString(err) << GetMacOSStatusCommentString(err); } return frameIndex; }
SINT SoundSourceMp3::readSampleFrames( SINT numberOfFrames, CSAMPLE* sampleBuffer) { return readSampleFrames(numberOfFrames, sampleBuffer, frames2samples(numberOfFrames), false); }