From 6e6e7f43373a04e5881907f9899f09790c068a0c Mon Sep 17 00:00:00 2001 From: wangjiyu Date: Sat, 3 May 2025 23:32:21 +0800 Subject: [PATCH] debug --- rtc_plugins.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/rtc_plugins.cpp b/rtc_plugins.cpp index bf30eb0..d9417c4 100644 --- a/rtc_plugins.cpp +++ b/rtc_plugins.cpp @@ -66,11 +66,32 @@ int16_t getDataCount() { PYBIND11_MODULE(rtc_plugins, m) { // 可选:暴露 RetAudioFrame 类(需额外绑定) py::class_(m, "RetAudioFrame") - .def_readwrite("data", &RetAudioFrame::data) - .def_readwrite("dataCount", &RetAudioFrame::dataCount) - .def_readwrite("sampleRate", &RetAudioFrame::sampleRate) - .def_readwrite("numChannels", &RetAudioFrame::numChannels) - .def_readwrite("channelIndex", &RetAudioFrame::channelIndex); + // 定义 data 属性(包含 getter 和 setter) + .def_property("data", + // Getter:返回 NumPy 数组 + [](RetAudioFrame& self) { + return py::array_t( + {self.dataCount}, // 数组形状 + {sizeof(short)}, // 步长 + self.data.get() // 数据指针(原始内存) + ); + }, + // Setter:从 NumPy 数组复制数据 + [](RetAudioFrame& self, py::array_t arr) { + auto buf = arr.request(); // 获取数组信息 + self.data.reset(new short[buf.size]); // 重新分配内存 + std::memcpy( + self.data.get(), // 目标指针 + buf.ptr, // 源数据指针 + buf.size * sizeof(short) // 数据大小 + ); + self.dataCount = buf.size; // 更新数据长度 + } + ) + .def_readwrite("dataCount", &RetAudioFrame::dataCount) + .def_readwrite("sampleRate", &RetAudioFrame::sampleRate) + .def_readwrite("numChannels", &RetAudioFrame::numChannels) + .def_readwrite("channelIndex", &RetAudioFrame::channelIndex); m.def("init", &init); m.def("initRecv", &initRecv); m.def("initSend", &initSend);