我试图用SWIG包装以下函数,所以我可以用Python调用它。签名是:
int WebRtcVad_Process(VadInst* handle, int fs, const int16_t* audio_frame,
size_t frame_length);
我有以下SWIG文件:
%module webrtc_vad
%{
#define SWIG_FILE_WITH_INIT
#include "webrtc/common_audio/vad/include/webrtc_vad.h"
%}
%{
/* Include in the generated wrapper file */
typedef unsigned int size_t;
%}
%include "stdint.i"
%include "numpy.i"
%init %{
import_array();
%}
typedef unsigned int size_t;
%apply (const int16_t* IN_ARRAY1, unsigned int DIM1) {(const int16_t* audio_frame, size_t frame_length)};
%include "webrtc/common_audio/vad/include/webrtc_vad.h"
最后,我收到以下错误:webrtc_vad.i:22: Warning 453: Can't apply (int16_t const *IN_ARRAY1,unsigned int DIM1). No typemaps are defined.
如果我删除签名中的unsigned
位,那么它编译得很好,但函数签名按原样进行(即函数需要一个int指针和所有业务)。
有没有人有解决方案?非常感谢你。
答案 0 :(得分:0)
我没有完整的答案,但我有类似的问题,可能会有所帮助。
我不知道为什么swig不会将unsigned int
识别为大小,因为根据文档"每个类似int的类型"应该管用。使用int
应该会很好。
我的问题是使用<stdint.h>
类型的数组(例如int16_t
),我已经通过编辑numpy.i
使其工作了:
另请参阅以下内容:using stdint with swig and numpy