This commit is contained in:
wangjiyu 2025-04-16 16:18:24 +08:00
parent 29f14acd5f
commit 9ef5758116
4 changed files with 32 additions and 2 deletions

View File

@ -51,6 +51,10 @@ int getSize() {
return RTCContext::instance().getSize();
}
namespace np = boost::python::numpy;
np::ndarray getNumpydata() {
return RTCContext::instance().getNumpydata();
}
py::object create_int16_array() {
// 1. 定义数组维度1维长度为 4
npy_intp dims[1] = {4};
@ -204,6 +208,7 @@ BOOST_PYTHON_MODULE(rtc_plugins) {
py::def("sendCustomAudioData", &sendCustomAudioData);
py::def("getSize", &getSize);
py::def("getData", &getData);
py::def("getNumpyData", &getNumpydata);
} catch (...) {
PyErr_SetString(PyExc_RuntimeError, "Module initialization failed");
}

View File

@ -58,6 +58,6 @@ while True:
print("resend succ")
size = rtc_plugins.getSize()
print(f"data size:{size}")
frame = rtc_plugins.getData()
print(f"dataCount:{frame.dataCount}")
frame = rtc_plugins.getNumpyData()
print(f"frame:{frame}")
time.sleep(3)

View File

@ -699,6 +699,30 @@ RetAudioFrame RTCContext::getData() {
}
return {}; // 返回空对象
}
namespace bp = boost::python;
namespace np = boost::python::numpy;
np::ndarray RTCContext::getNumpydata() {
std::lock_guard<std::mutex> lock(dataMutex_);
RetAudioFrame frame = getData();
int16_t* data_ptr = frame.data.get(); // 你的数据指针
size_t length = frame.dataCount; // 数据长度
// 创建 NumPy 数组(拷贝数据)
if (!data_ptr || length == 0) {
// 返回空数组或抛出异常
return np::zeros(bp::make_tuple(0), np::dtype::get_builtin<int16_t>());
}
np::dtype dt = np::dtype::get_builtin<int16_t>();
return np::from_data(
data_ptr,
dt,
bp::make_tuple(length),
bp::make_tuple(sizeof(int16_t)),
bp::object()
);
}
int16_t RTCContext::getSize() {
std::lock_guard<std::mutex> lock(dataMutex_);

View File

@ -98,6 +98,7 @@ public:
int16_t getSize();
void setData(const mrtc::MRTCAudioFrame& frame);
RetAudioFrame getData();
np::ndarray getNumpydata();
void* getpData() const;
void setpData(void* pData);