Beispiel #1
0
//====================================================================================
void AudioTransportCursor::fileChanged (AudioFilePlayer* player)
{
    if (player == &audioFilePlayer)
    {
        AudioFormatReaderSource* readerSource = audioFilePlayer.getAudioFormatReaderSource();

        AudioFormatReader* reader = nullptr;
        if (readerSource != nullptr)
            reader = readerSource->getAudioFormatReader();

        if (reader != nullptr && reader->sampleRate > 0.0
                && audioFilePlayer.getLengthInSeconds() > 0.0)
        {
            currentSampleRate = reader->sampleRate;
            fileLength = audioFilePlayer.getLengthInSeconds();
            oneOverFileLength = 1.0 / fileLength;
        }
        else
        {
            currentSampleRate = 44100;
            fileLength = 0.0;
            oneOverFileLength = 1.0;
        }

        startTimerIfNeeded();
    }
}
//==============================================================================
SequenceAudioSource::AudioEventHolder::AudioEventHolder (
                                            AudioFormatReader* const sourceReader_,
                                            const int startOffset_,
                                            const double resampleRatio_,
                                            const bool deleteWhenRemoved_)
  : sourceReader (sourceReader_),
    startOffset (startOffset_),
    resampleRatio (resampleRatio_)
{
    // create the reader source
    AudioFormatReaderSource* audioSource = new AudioFormatReaderSource (sourceReader,
                                                                        deleteWhenRemoved_);
    audioSource->setLooping (false);

    // create the resample source
    resampleSource = new PositionableResamplingAudioSource (audioSource, true);
    resampleSource->setResamplingRatio (resampleRatio);
    resampleSource->setLooping (false);
    
    // create the internal audio buffer copy
    audioBuffer = new AudioSampleBuffer (sourceReader->numChannels,
                                         sourceReader->lengthInSamples);
    audioBuffer->readFromAudioReader (sourceReader,
                                      0,
                                      sourceReader->lengthInSamples,
                                      0,
                                      true,
                                      true);
}
//====================================================================================
void PositionableWaveDisplay::imageChanged (AudioThumbnailImage* changedAudioThumbnailImage)
{
	if (changedAudioThumbnailImage == &audioThumbnailImage)
	{
        {
            const ScopedLock sl (imageLock);
            cachedImage.clear (cachedImage.getBounds(), backgroundColour);
            triggerAsyncUpdate();
        }
        
        AudioFormatReaderSource* readerSource = audioFilePlayer.getAudioFormatReaderSource();
        
        AudioFormatReader* reader = nullptr;
        if (readerSource != nullptr)
            reader = readerSource->getAudioFormatReader();
        
        if (reader != nullptr && reader->sampleRate > 0.0
            && audioFilePlayer.getLengthInSeconds() > 0.0)
        {
            currentSampleRate = reader->sampleRate;
            fileLength = audioFilePlayer.getLengthInSeconds();
            
            if (fileLength > 0.0)
                oneOverFileLength = 1.0 / fileLength;

            refreshCachedImage();
        }
        else 
        {
            currentSampleRate = 44100;
            fileLength = 0.0;
            oneOverFileLength = 1.0;
        }
	}
}