diff --git a/rtc_plugins.cpp b/rtc_plugins.cpp index ea69045..25be18d 100644 --- a/rtc_plugins.cpp +++ b/rtc_plugins.cpp @@ -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"); } diff --git a/test_time_r.py b/test_time_r.py index 2293651..f432187 100644 --- a/test_time_r.py +++ b/test_time_r.py @@ -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) diff --git a/util/RTCContext.cpp b/util/RTCContext.cpp index 50d4b2e..a9a7919 100644 --- a/util/RTCContext.cpp +++ b/util/RTCContext.cpp @@ -699,6 +699,30 @@ RetAudioFrame RTCContext::getData() { } return {}; // 返回空对象 } +namespace bp = boost::python; +namespace np = boost::python::numpy; +np::ndarray RTCContext::getNumpydata() { + std::lock_guard 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()); + } + + np::dtype dt = np::dtype::get_builtin(); + 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 lock(dataMutex_); diff --git a/util/RTCContext.h b/util/RTCContext.h index d4ae311..69eadd8 100644 --- a/util/RTCContext.h +++ b/util/RTCContext.h @@ -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);