FaceAccess/Record/RkAudio.h
2024-06-18 14:27:48 +08:00

73 lines
1.4 KiB
C++

#ifndef __RKAUDIO_H__
#define __RKAUDIO_H__
#include <functional>
#include <thread>
namespace RkAudio {
// constexpr auto ParamFilePath="/data/sdcard/rw_3a.bin";
constexpr auto ParamFilePath = "/data/sdcard/RKAP_3A_Para.bin";
class Format {
public:
enum Endian {
BigEndian,
LittleEndian,
};
enum SampleType {
Unknown,
SignedInt16,
SignedInt,
Float,
};
SampleType sampleType = SignedInt16;
Endian byteOrder = LittleEndian;
uint32_t sampleRate = 48000;
uint32_t channels = 2;
uint32_t period = 60;
};
class Frame {
public:
uint8_t *data = nullptr;
int32_t byteSize = 0;
int32_t frameSize = 0;
std::chrono::system_clock::time_point timestamp;
};
class Input {
public:
using ReadCallback = std::function<void(const Frame &)>;
Input();
~Input();
void setDataCallback(const ReadCallback &callback);
bool open(const Format &format);
void stop();
protected:
void run();
private:
int32_t m_channel = -1;
bool m_exit = false;
std::thread m_thread;
ReadCallback m_callback;
Format m_format;
};
class Output {
public:
Output();
~Output();
bool open(uint32_t sampleSize, uint32_t sampleRate, uint32_t channels);
void close();
void write(const uint8_t *data, uint32_t byteSize);
private:
int32_t m_channel = -1;
};
} // namespace RkAudio
#endif // __RKAUDIO_H__