30 lines
1.1 KiB
C++
30 lines
1.1 KiB
C++
// native_bridge/juce_fx/JuceFxEngine.h
|
|
// JUCE AudioProcessorGraph engine (G1): đọc input ring → graph (rỗng) →
|
|
// ghi output ring. Tách khỏi loop để G2 chỉ thêm plugin vào graph.
|
|
#pragma once
|
|
#include <cstdint>
|
|
#include <memory>
|
|
|
|
class JuceFxEngine {
|
|
public:
|
|
JuceFxEngine();
|
|
~JuceFxEngine();
|
|
// Không copy.
|
|
JuceFxEngine(const JuceFxEngine&) = delete;
|
|
JuceFxEngine& operator=(const JuceFxEngine&) = delete;
|
|
|
|
// Tạo graph mới (input node -> output node, passthrough), prepareToPlay.
|
|
// sampleRate/blockSize đổi → teardown graph cũ + prepare lại (validate
|
|
// header G1). blockSize là kích thước mỗi SHM block (256).
|
|
void prepare(uint32_t sampleRate, uint32_t blockSize);
|
|
// Audio thread: xử lý n mẫu stereo in-place (n <= blockSize * FXRT_IN_SLOTS).
|
|
void process(float* inL, float* inR, uint32_t n);
|
|
// Graph latency samples (G1 chain rỗng = 0; G2 = getLatencySamples thật).
|
|
uint32_t latencySamples() const;
|
|
void shutdown();
|
|
|
|
private:
|
|
struct Impl;
|
|
std::unique_ptr<Impl> impl_;
|
|
};
|