Browse Source

Define SoundTouch source spans and unity interpolation contract

master
evgeny 4 days ago
parent
commit
ceb06bafcf
  1. 22
      lib/soundtouch-master/include/soundtouch/SourceSpan.h
  2. 3
      lib/soundtouch-master/source/SoundTouch/InterpolateCubic.h
  3. 5
      lib/soundtouch-master/source/SoundTouch/RateTransposer.h

22
lib/soundtouch-master/include/soundtouch/SourceSpan.h

@ -0,0 +1,22 @@
/* uTun: происхождение PCM без изменения DSP. Индексы — сэмплы НА КАНАЛ от clear().
* Copy: out[i] происходит из input0+i. Mix: источники input0+i и input1+i,
* вес второго i/count, первого 1-i/count. Это описание происхождения, не PCM.
* Reset начинает новую шкалу. Invalid запрещает её использование до clear().
* Callback синхронный: нельзя вызывать SoundTouch повторно, блокировать поток или
* сохранять ссылку на событие. Ошибки передаются через Invalid; логирует потребитель. */
#ifndef SOUNDTOUCH_SOURCE_SPAN_H
#define SOUNDTOUCH_SOURCE_SPAN_H
#include <cstdint>
namespace soundtouch {
enum class SourceKind { Reset, Copy, Mix, Invalid };
enum class SourceError { None, Profile, Reconfigure, Flush, LateAttach };
struct SourceSpan {
SourceKind kind;
SourceError error = SourceError::None;
uint64_t output = 0, input0 = 0, input1 = 0;
uint32_t count = 0;
};
using SourceCallback = void (*)(void*, const SourceSpan&);
}
#endif

3
lib/soundtouch-master/source/SoundTouch/InterpolateCubic.h

@ -58,6 +58,9 @@ public:
virtual void resetRegisters() override;
// При fract=0 кубический интерполятор копирует psrc[1], сохраняя четыре входных сэмпла.
int unitySourceOffset() const override { return rate == 1.0 && fract == 0.0 ? 1 : -1; }
virtual int getLatency() const override
{
return 1;

5
lib/soundtouch-master/source/SoundTouch/RateTransposer.h

@ -83,6 +83,9 @@ public:
virtual void setChannels(int channels);
virtual int getLatency() const = 0;
// uTun: смещение точного копирования при rate=1; -1 если реализация не поддерживает карту.
virtual int unitySourceOffset() const { return -1; }
virtual void resetRegisters() = 0;
// static factory function
@ -133,6 +136,8 @@ public:
AAFilter *getAAFilter();
/// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable
int unitySourceOffset() const { return bUseAAFilter ? -1 : pTransposer->unitySourceOffset(); }
void enableAAFilter(bool newMode);
/// Returns nonzero if anti-alias filter is enabled.

Loading…
Cancel
Save