Kill scrubbing code and audio_provider_stream; they were last touched four years ago and never did work.
Originally committed to SVN as r4709.
This commit is contained in:
parent
6040334278
commit
d4a4db0388
5 changed files with 0 additions and 421 deletions
|
@ -523,14 +523,6 @@
|
||||||
RelativePath="..\..\src\audio_provider_ram.h"
|
RelativePath="..\..\src\audio_provider_ram.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\audio_provider_stream.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\audio_provider_stream.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Automation"
|
Name="Automation"
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#include "audio_provider_dummy.h"
|
#include "audio_provider_dummy.h"
|
||||||
#endif
|
#endif
|
||||||
#include "audio_provider_stream.h"
|
|
||||||
#include "colorspace.h"
|
#include "colorspace.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
|
@ -102,7 +101,6 @@ AudioDisplay::AudioDisplay(wxWindow *parent)
|
||||||
dontReadTimes = false;
|
dontReadTimes = false;
|
||||||
holding = false;
|
holding = false;
|
||||||
draggingScale = false;
|
draggingScale = false;
|
||||||
scrubbing = false;
|
|
||||||
Position = 0;
|
Position = 0;
|
||||||
PositionSample = 0;
|
PositionSample = 0;
|
||||||
oldCurPos = 0;
|
oldCurPos = 0;
|
||||||
|
@ -1777,120 +1775,6 @@ int AudioDisplay::GetBoundarySnap(int ms,int rangeX,bool shiftHeld,bool start) {
|
||||||
return bestMS;
|
return bestMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// SCRUBBING CODE, REMOVED FROM THE FUNCTION ABOVE
|
|
||||||
/*
|
|
||||||
// Stop scrubbing
|
|
||||||
bool scrubButton = false && event.ButtonIsDown(wxMOUSE_BTN_MIDDLE);
|
|
||||||
if (scrubbing && !scrubButton) {
|
|
||||||
// Release mouse
|
|
||||||
scrubbing = false;
|
|
||||||
if (HasCapture()) ReleaseMouse();
|
|
||||||
|
|
||||||
// Stop player
|
|
||||||
player->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;i<bufSize;i++) {
|
|
||||||
start = i*scale;
|
|
||||||
end = (i+1)*scale;
|
|
||||||
istart = (int) start;
|
|
||||||
iend = MIN((int) end,scrubDelta-1);
|
|
||||||
if (istart == iend) tempfinal = temp[istart] * (end - start);
|
|
||||||
else {
|
|
||||||
tempfinal = temp[istart] * (1 + istart - start) + temp[iend] * (end - iend);
|
|
||||||
for (int j=istart+1;j<iend;j++) tempfinal += temp[i];
|
|
||||||
}
|
|
||||||
buf[i] = tempfinal / scale;
|
|
||||||
}
|
|
||||||
//int len = MIN(bufSize,scrubDelta);
|
|
||||||
//for (int i=0;i<len;i++) buf[i] = temp[i];
|
|
||||||
//for (int i=len;i<bufSize;i++) buf[i] = 0;
|
|
||||||
delete temp;
|
|
||||||
|
|
||||||
// Invert
|
|
||||||
if (invert) {
|
|
||||||
short aux;
|
|
||||||
for (int i=0;i<bufSize/2;i++) {
|
|
||||||
aux = buf[i];
|
|
||||||
buf[i] = buf[bufSize-i-1];
|
|
||||||
buf[bufSize-i-1] = aux;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send data to provider
|
|
||||||
scrubProvider->Append(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
|
/// @brief Size event
|
||||||
/// @param event
|
/// @param event
|
||||||
void AudioDisplay::OnSize(wxSizeEvent &event) {
|
void AudioDisplay::OnSize(wxSizeEvent &event) {
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#include "audio_renderer_spectrum.h"
|
#include "audio_renderer_spectrum.h"
|
||||||
|
|
||||||
class AssDialogue;
|
class AssDialogue;
|
||||||
class StreamAudioProvider;
|
|
||||||
class SubtitlesGrid;
|
class SubtitlesGrid;
|
||||||
class AudioBox;
|
class AudioBox;
|
||||||
class AudioKaraoke;
|
class AudioKaraoke;
|
||||||
|
@ -179,18 +178,6 @@ private:
|
||||||
/// DOCME
|
/// DOCME
|
||||||
int *min;
|
int *min;
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
int scrubTime;
|
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
int64_t scrubLastPos;
|
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
bool scrubbing;
|
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
int scrubLastRate;
|
|
||||||
|
|
||||||
void OnPaint(wxPaintEvent &event);
|
void OnPaint(wxPaintEvent &event);
|
||||||
void OnMouseEvent(wxMouseEvent &event);
|
void OnMouseEvent(wxMouseEvent &event);
|
||||||
void OnSize(wxSizeEvent &event);
|
void OnSize(wxSizeEvent &event);
|
||||||
|
@ -218,9 +205,6 @@ public:
|
||||||
/// DOCME
|
/// DOCME
|
||||||
AudioProvider *provider;
|
AudioProvider *provider;
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
StreamAudioProvider *scrubProvider;
|
|
||||||
|
|
||||||
/// DOCME
|
/// DOCME
|
||||||
AudioPlayer *player;
|
AudioPlayer *player;
|
||||||
|
|
||||||
|
|
|
@ -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<BufferChunk*>::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<count;i++) {
|
|
||||||
dst[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// @brief Append audio to stream
|
|
||||||
/// @param voidptr
|
|
||||||
/// @param count
|
|
||||||
///
|
|
||||||
void StreamAudioProvider::Append(void *voidptr, int64_t count) {
|
|
||||||
// Read
|
|
||||||
int64_t left = count;
|
|
||||||
int read = 0;
|
|
||||||
int toRead;
|
|
||||||
short *src = (short*) voidptr;
|
|
||||||
while (left > 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -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 <list>
|
|
||||||
#include <vector>
|
|
||||||
#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<short> buf;
|
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
bool isFree;
|
|
||||||
BufferChunk();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// DOCME
|
|
||||||
std::list<BufferChunk*> 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);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue