|
|
@@ -36,8 +36,6 @@ inline double ramp(int64_t pos, int64_t totallen, int64_t rampinlen, int64_t ram |
|
|
|
return 1.0; |
|
|
|
} |
|
|
|
|
|
|
|
using LockGuard = std::lock_guard<std::recursive_mutex>; |
|
|
|
|
|
|
|
class AInputS final : public InputS |
|
|
|
{ |
|
|
|
public: |
|
|
@@ -53,7 +51,7 @@ public: |
|
|
|
|
|
|
|
void setAudioBuffer(AudioBuffer<float>* buf, int samplerate, int len) |
|
|
|
{ |
|
|
|
LockGuard locker(m_mutex); |
|
|
|
ScopedLock locker(m_mutex); |
|
|
|
m_afreader = nullptr; |
|
|
|
m_using_memory_buffer = true; |
|
|
|
m_readbuf = *buf; |
|
|
@@ -64,7 +62,7 @@ public: |
|
|
|
m_loop_enabled = true; |
|
|
|
m_crossfadebuf.setSize(info.nchannels, m_crossfadebuf.getNumSamples()); |
|
|
|
m_cached_file_range = { 0,len }; |
|
|
|
seek(m_activerange.getStart()); |
|
|
|
seek(m_activerange.getStart(), true); |
|
|
|
updateXFadeCache(); |
|
|
|
} |
|
|
|
virtual AudioBuffer<float>* getAudioBuffer() override |
|
|
@@ -79,7 +77,7 @@ public: |
|
|
|
AudioFormatReader* reader = m_manager->createReaderFor(file); |
|
|
|
if (reader) |
|
|
|
{ |
|
|
|
LockGuard locker(m_mutex); |
|
|
|
ScopedLock locker(m_mutex); |
|
|
|
m_using_memory_buffer = false; |
|
|
|
m_afreader = std::unique_ptr<AudioFormatReader>(reader); |
|
|
|
if (m_activerange.isEmpty()) |
|
|
@@ -109,7 +107,7 @@ public: |
|
|
|
} |
|
|
|
int readNextBlock(AudioBuffer<float>& abuf, int nsmps, int numchans) override |
|
|
|
{ |
|
|
|
LockGuard locker(m_mutex); |
|
|
|
ScopedLock locker(m_mutex); |
|
|
|
if (m_afreader == nullptr && m_using_memory_buffer == false) |
|
|
|
{ |
|
|
|
jassert(false); |
|
|
@@ -281,11 +279,14 @@ public: |
|
|
|
updateXFadeCache(); |
|
|
|
//m_cached_crossfade_range = Range<int64_t>(); |
|
|
|
} |
|
|
|
void seek(double pos) override //0=start,1.0=end |
|
|
|
void seek(double pos, bool immediate) override //0=start,1.0=end |
|
|
|
{ |
|
|
|
//seekImpl(pos); |
|
|
|
|
|
|
|
LockGuard locker(m_mutex); |
|
|
|
ScopedLock locker(m_mutex); |
|
|
|
if (immediate == true) |
|
|
|
{ |
|
|
|
seekImpl(pos); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (m_seekfade.state == 0) |
|
|
|
{ |
|
|
|
m_seekfade.state = 1; |
|
|
@@ -332,7 +333,7 @@ public: |
|
|
|
} |
|
|
|
void setActiveRange(Range<double> rng) override |
|
|
|
{ |
|
|
|
LockGuard locker(m_mutex); |
|
|
|
ScopedLock locker(m_mutex); |
|
|
|
|
|
|
|
/* |
|
|
|
if (rng.contains(getCurrentPositionPercent())) |
|
|
@@ -395,7 +396,7 @@ private: |
|
|
|
int64_t m_loopcount = 0; |
|
|
|
bool m_using_memory_buffer = true; |
|
|
|
AudioFormatManager* m_manager = nullptr; |
|
|
|
std::recursive_mutex m_mutex; |
|
|
|
CriticalSection m_mutex; |
|
|
|
struct |
|
|
|
{ |
|
|
|
int state = 0; // 0 inactive, 1 seek requested, 2 fade out, 3 fade in |
|
|
|