diff --git a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj index 481f0293d..910adf689 100644 --- a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj +++ b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj @@ -523,14 +523,6 @@ RelativePath="..\..\src\audio_provider_ram.h" > - - - - Stop(); - player->SetProvider(provider); - delete scrubProvider; - } - - // Start scrubbing - if (!scrubbing && scrubButton && provider->GetChannels() == 1) { - // Get mouse - CaptureMouse(); - scrubbing = true; - - // Initialize provider - player->Stop(); - scrubProvider = new StreamAudioProvider(); - scrubProvider->SetParams(provider->GetChannels(),provider->GetSampleRate(),provider->GetBytesPerSample()); - player->SetProvider(scrubProvider); - - // Set variables - scrubLastPos = GetSampleAtX(x); - scrubTime = clock(); - scrubLastRate = provider->GetSampleRate(); - } - - // Scrub - if (scrubbing && scrubButton) { - // Get current data - int64_t exactPos = MAX(0,GetSampleAtX(x)); - int curScrubTime = clock(); - int scrubDeltaTime = curScrubTime - scrubTime; - bool invert = exactPos < scrubLastPos; - int64_t curScrubPos = exactPos; - - if (scrubDeltaTime > 0) { - // Get derived data - int rateChange = provider->GetSampleRate()/20; - int curRate = MID(int(scrubLastRate-rateChange),abs(int(exactPos - scrubLastPos)) * CLOCKS_PER_SEC / scrubDeltaTime,int(scrubLastRate+rateChange)); - if (abs(curRate-scrubLastRate) < rateChange) curRate = scrubLastRate; - curScrubPos = scrubLastPos + (curRate * scrubDeltaTime / CLOCKS_PER_SEC * (invert ? -1 : 1)); - int64_t scrubDelta = curScrubPos - scrubLastPos; - scrubLastRate = curRate; - - // Copy data to buffer - if (scrubDelta != 0) { - // Create buffer - int bufSize = scrubDeltaTime * scrubProvider->GetSampleRate() / CLOCKS_PER_SEC; - short *buf = new short[bufSize]; - - // Flag as inverted, if necessary - if (invert) scrubDelta = -scrubDelta; - - // Copy data from original provider to temp buffer - short *temp = new short[scrubDelta]; - provider->GetAudio(temp,MIN(curScrubPos,scrubLastPos),scrubDelta); - - // Scale - float scale = float(double(scrubDelta) / double(bufSize)); - float start,end; - int istart,iend; - float tempfinal; - for (int i=0;iAppend(buf,bufSize); - if (!player->IsPlaying()) player->Play(0,~0ULL); - delete buf; - } - } - - // Update last pos and time - scrubLastPos = curScrubPos; - scrubTime = curScrubTime; - - // Return - return; - } - -*/ - /// @brief Size event /// @param event void AudioDisplay::OnSize(wxSizeEvent &event) { diff --git a/aegisub/src/audio_display.h b/aegisub/src/audio_display.h index 9ea9c630d..fd971de7b 100644 --- a/aegisub/src/audio_display.h +++ b/aegisub/src/audio_display.h @@ -49,7 +49,6 @@ #include "audio_renderer_spectrum.h" class AssDialogue; -class StreamAudioProvider; class SubtitlesGrid; class AudioBox; class AudioKaraoke; @@ -179,18 +178,6 @@ private: /// DOCME int *min; - /// DOCME - int scrubTime; - - /// DOCME - int64_t scrubLastPos; - - /// DOCME - bool scrubbing; - - /// DOCME - int scrubLastRate; - void OnPaint(wxPaintEvent &event); void OnMouseEvent(wxMouseEvent &event); void OnSize(wxSizeEvent &event); @@ -218,9 +205,6 @@ public: /// DOCME AudioProvider *provider; - /// DOCME - StreamAudioProvider *scrubProvider; - /// DOCME AudioPlayer *player; diff --git a/aegisub/src/audio_provider_stream.cpp b/aegisub/src/audio_provider_stream.cpp deleted file mode 100644 index c6a09ed95..000000000 --- a/aegisub/src/audio_provider_stream.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (c) 2006, Rodrigo Braz Monteiro -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// * Neither the name of the Aegisub Group nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Aegisub Project http://www.aegisub.org/ -// -// $Id$ - -/// @file audio_provider_stream.cpp -/// @brief Unused aggregate audio provider, intended to be used for audio scrubbing feature -/// @ingroup audio_input -/// - - -/////////// -// Headers -#include "config.h" - -#include "audio_provider_stream.h" -#include "utils.h" - - -/// DOCME -#define BUFSIZE 65536 - - - -/// @brief Constructor -/// -StreamAudioProvider::StreamAudioProvider() { - bufLen = 8192; - startPos = 0; - endPos = BUFSIZE; - buffered = 0; - hasBuf = false; - num_samples = ~0ULL; -} - - - -/// @brief Destructor -/// -StreamAudioProvider::~StreamAudioProvider() { - for (std::list::iterator cur=buffer.begin();cur!=buffer.end();cur++) { - delete *cur; - } - buffer.clear(); -} - - - -/// @brief Get audio -/// @param buf -/// @param start -/// @param count -/// -void StreamAudioProvider::GetAudio(void *buf, int64_t start, int64_t count) { - // Write - int64_t left = count; - int written = 0; - int toWrite; - short *dst = (short*) buf; - while (hasBuf && left > 0) { - // Discard done - if (startPos == BUFSIZE) { - delete buffer.front(); - buffer.pop_front(); - startPos = 0; - } - - // Is last? - bool isLast = buffer.size() == 1; - int size = BUFSIZE; - if (isLast) size = endPos; - - // Write - toWrite = MIN(size-startPos,int(left)); - memcpy(dst+written,&(buffer.front()->buf[startPos]),toWrite*2); - startPos += toWrite; - written += toWrite; - left -= toWrite; - buffered -= toWrite; - - // Last - if (isLast) break; - } - - // Still left, fill with zero - if (left > 0) { - hasBuf = false; - for (int64_t i=written;i 0) { - // Check space - if (endPos == BUFSIZE) { - buffer.push_back(new BufferChunk); - endPos = 0; - } - - // Read - toRead = MIN(int(BUFSIZE-endPos),int(left)); - memcpy(&(buffer.back()->buf[endPos]),src+read,toRead*2); - endPos += toRead; - read += toRead; - buffered += toRead; - left -= toRead; - } - - // Set buffered status - if (buffered > bufLen) hasBuf = true; -} - - - -/// @brief Set parameters -/// @param chan -/// @param rate -/// @param bps -/// -void StreamAudioProvider::SetParams(int chan,int rate,int bps) { - channels = chan; - sample_rate = rate; - bytes_per_sample = bps; -} - - - -/// @brief Buffer chunk constructor -/// -StreamAudioProvider::BufferChunk::BufferChunk() { - buf.resize(BUFSIZE); - isFree = true; -} - - diff --git a/aegisub/src/audio_provider_stream.h b/aegisub/src/audio_provider_stream.h deleted file mode 100644 index ef3904d93..000000000 --- a/aegisub/src/audio_provider_stream.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2006, Rodrigo Braz Monteiro -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// * Neither the name of the Aegisub Group nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Aegisub Project http://www.aegisub.org/ -// -// $Id$ - -/// @file audio_provider_stream.h -/// @see audio_provider_stream.cpp -/// @ingroup audio_input -/// - - -/////////// -// Headers -#ifndef AGI_PRE -#include -#include -#endif - -#include "include/aegisub/audio_provider.h" - - -/// DOCME -/// @class StreamAudioProvider -/// @brief DOCME -/// -/// DOCME -class StreamAudioProvider : public AudioProvider { -private: - - /// DOCME - /// @class BufferChunk - /// @brief DOCME - /// - /// DOCME - class BufferChunk { - public: - - /// DOCME - std::vector buf; - - /// DOCME - bool isFree; - BufferChunk(); - }; - - - /// DOCME - std::list buffer; - - /// DOCME - int startPos; - - /// DOCME - int endPos; - - /// DOCME - int bufLen; - - - /// DOCME - int buffered; - - /// DOCME - bool hasBuf; - -public: - StreamAudioProvider(); - ~StreamAudioProvider(); - - // The AreSamplesNativeEndian() method is intentionally missing. - // This class was used with the experimental scrubbing code but never - // used outside that. - // The method is left out to make it break compilation in case it does - // get used again, so it can get a review and stuff. - - void GetAudio(void *buf, int64_t start, int64_t count); - void Append(void *buf, int64_t count); - void SetParams(int channels,int rate,int bps); -}; - -