python-webrtc-audio-processing
python-webrtc-audio-processing copied to clipboard
Need to add instruction to run: autoreconf -i before running ./autogen.sh
Please consider updating the instructions on https://github.com/xiongyihui/python-webrtc-audio-processing for Build option 2 to include running autoreconf -i before running ./autogen.sh
To avoid problems like below when running ./autogen.sh: ./autogen.sh: line 2: libtoolize: command not found ... configure: error: cannot find required auxiliary files: ltmain.sh
you need to run autoreconf -i this should copy the ltmain.sh into the current directory.
I need instructions for building on an M1 (Arm) MacOS because it fails when running make in the src directory:
(prx) src>make
g++ -fPIC -std=c++11 -I. -I../webrtc-audio-processing -I/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.11/include/python3.11 -I/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.11/include/python3.11 -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.sdk -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD -DWEBRTC_LINUX -DWEBRTC_POSIX -DWEBRTC_NS_FLOAT -shared -L/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.11/lib/python3.11/config-3.11-darwin -ldl -framework CoreFoundation -lpthread -o _webrtc_audio_processing.so webrtc_audio_processing_wrap.o audio_processing_module.o ../webrtc-audio-processing/webrtc/modules/audio_processing/.libs/libwebrtc_audio_processing.a
Undefined symbols for architecture arm64:
"_PyArg_UnpackTuple", referenced from:
SwigPyObject_own(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyBool_FromLong", referenced from:
_wrap_AudioProcessingModule_has_echo(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_has_voice(_object*, _object*) in webrtc_audio_processing_wrap.o
SwigPyObject_richcompare(SwigPyObject*, SwigPyObject*, int) in webrtc_audio_processing_wrap.o
SwigPyObject_own(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyBool_Type", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule__SWIG_0(_object*, long, _object**) in webrtc_audio_processing_wrap.o
"_PyBytes_AsStringAndSize", referenced from:
SWIG_AsPtr_std_string(_object*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>**) in webrtc_audio_processing_wrap.o
"_PyBytes_FromStringAndSize", referenced from:
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyCapsule_GetPointer", referenced from:
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
SWIG_Python_DestroyModule(_object*) in webrtc_audio_processing_wrap.o
"_PyCapsule_Import", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
"_PyCapsule_New", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
"_PyDict_GetItem", referenced from:
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
"_PyDict_New", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
SWIG_Python_DestroyModule(_object*) in webrtc_audio_processing_wrap.o
"_PyDict_SetItem", referenced from:
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
"_PyErr_Clear", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_system_delay(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyErr_Fetch", referenced from:
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
"_PyErr_Format", referenced from:
SWIG_Python_UnpackTuple(_object*, char const*, long, long, _object**) in webrtc_audio_processing_wrap.o
SWIG_Python_UnpackTuple(_object*, char const*, long, long, _object**) in webrtc_audio_processing_wrap.o
swig_varlink_getattr(_object*, char*) in webrtc_audio_processing_wrap.o
swig_varlink_setattr(_object*, char*, _object*) in webrtc_audio_processing_wrap.o
"_PyErr_GivenExceptionMatches", referenced from:
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
"_PyErr_Occurred", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyErr_Restore", referenced from:
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
"_PyErr_SetString", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyErr_WriteUnraisable", referenced from:
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
"_PyExc_AttributeError", referenced from:
swig_varlink_getattr(_object*, char*) in webrtc_audio_processing_wrap.o
swig_varlink_setattr(_object*, char*, _object*) in webrtc_audio_processing_wrap.o
"_PyExc_OverflowError", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_system_delay(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyExc_SystemError", referenced from:
SWIG_Python_UnpackTuple(_object*, char const*, long, long, _object**) in webrtc_audio_processing_wrap.o
"_PyExc_TypeError", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyImport_AddModule", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
"_PyLong_AsLong", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"_PyLong_FromLong", referenced from:
_wrap_AudioProcessingModule_vad_level(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_ns_level(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_aec_level(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_agc_level(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyLong_FromVoidPtr", referenced from:
SwigPyObject_long(SwigPyObject*) in webrtc_audio_processing_wrap.o
"_PyModule_AddObject", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
"_PyModule_Create2", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
"_PyModule_GetDict", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
"_PyObject_Call", referenced from:
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
"_PyObject_CallFunctionObjArgs", referenced from:
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
"_PyObject_Free", referenced from:
SwigPyPacked_dealloc(_object*) in webrtc_audio_processing_wrap.o
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
"_PyObject_GenericGetAttr", referenced from:
l___const._ZL21SwigPyPacked_TypeOncev.slots in webrtc_audio_processing_wrap.o
l___const._ZL21SwigPyObject_TypeOncev.slots in webrtc_audio_processing_wrap.o
"_PyObject_GetAttr", referenced from:
SWIG_Python_GetSwigThis(_object*) in webrtc_audio_processing_wrap.o
"_PyObject_GetAttrString", referenced from:
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyObject_IsInstance", referenced from:
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyObject_IsTrue", referenced from:
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule__SWIG_0(_object*, long, _object**) in webrtc_audio_processing_wrap.o
_wrap_new_AudioProcessingModule__SWIG_0(_object*, long, _object**) in webrtc_audio_processing_wrap.o
...
"_PyObject_SetAttr", referenced from:
AudioProcessingModule_swiginit(_object*, _object*) in webrtc_audio_processing_wrap.o
AudioProcessingModule_swiginit(_object*, _object*) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
"_PyTuple_New", referenced from:
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
"_PyType_FromSpec", referenced from:
SwigPyPacked_TypeOnce() in webrtc_audio_processing_wrap.o
SwigPyPacked_dealloc(_object*) in webrtc_audio_processing_wrap.o
SwigPyObject_TypeOnce() in webrtc_audio_processing_wrap.o
SWIG_Python_DestroyModule(_object*) in webrtc_audio_processing_wrap.o
"_PyType_Modified", referenced from:
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
"_PyType_Type", referenced from:
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
"_PyUnicode_Concat", referenced from:
SwigPyObject_repr(SwigPyObject*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
"_PyUnicode_FromFormat", referenced from:
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
SwigPyPacked_repr(SwigPyPacked*) in webrtc_audio_processing_wrap.o
SwigPyPacked_str(SwigPyPacked*) in webrtc_audio_processing_wrap.o
SwigPyObject_repr(SwigPyObject*) in webrtc_audio_processing_wrap.o
"_PyUnicode_FromString", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
AudioProcessingModule_swiginit(_object*, _object*) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_GetSwigThis(_object*) in webrtc_audio_processing_wrap.o
SWIG_Python_TypeQuery(char const*) in webrtc_audio_processing_wrap.o
SwigPyPacked_str(SwigPyPacked*) in webrtc_audio_processing_wrap.o
...
"_PyUnicode_InternFromString", referenced from:
swig_varlink_repr(_object*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
swig_varlink_str(_object*) in webrtc_audio_processing_wrap.o
"__PyObject_New", referenced from:
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SwigPyObject_dealloc(_object*) in webrtc_audio_processing_wrap.o
SWIG_Python_DestroyModule(_object*) in webrtc_audio_processing_wrap.o
"__Py_Dealloc", referenced from:
_PyInit__webrtc_audio_processing in webrtc_audio_processing_wrap.o
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
AudioProcessingModule_swigregister(_object*, _object*) in webrtc_audio_processing_wrap.o
AudioProcessingModule_swiginit(_object*, _object*) in webrtc_audio_processing_wrap.o
SWIG_Python_RaiseOrModifyTypeError(char const*) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
SWIG_Python_NewPointerObj(_object*, void*, swig_type_info*, int) in webrtc_audio_processing_wrap.o
...
"__Py_NoneStruct", referenced from:
_wrap_AudioProcessingModule_process_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_process_reverse_stream(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_system_delay(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_reverse_stream_format(_object*, _object*) in webrtc_audio_processing_wrap.o
_wrap_AudioProcessingModule_set_vad_level(_object*, _object*) in webrtc_audio_processing_wrap.o
...
"__Py_NotImplementedStruct", referenced from:
SwigPyObject_richcompare(SwigPyObject*, SwigPyObject*, int) in webrtc_audio_processing_wrap.o
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [_webrtc_audio_processing.so] Error 1
I actually can't get past the python setup.py build command:
clang++ -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /Users/wnm3/miniforge3/envs/prx/include -arch arm64 -fPIC -O2 -isystem /Users/wnm3/miniforge3/envs/prx/include -arch arm64 -I/usr/local/opt/openssl/include:/usr/local/opt/sqlite/include -DWEBRTC_LINUX -DWEBRTC_POSIX -DWEBRTC_NS_FLOAT -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD -DWEBRTC_HAS_NEON -Isrc -Iwebrtc-audio-processing -I/Users/wnm3/miniforge3/envs/prx/include/python3.11 -c src/audio_processing_module.cpp -o build/temp.macosx-11.0-arm64-cpython-311/src/audio_processing_module.o -std=c++11 -mfloat-abi=hard -mfpu=neon
clang++: error: unsupported option '-mfloat-abi=' for target 'arm64-apple-darwin24.5.0'
clang++: error: unsupported option '-mfpu=' for target 'arm64-apple-darwin24.5.0'
error: command '/usr/bin/clang++' failed with exit code 1
By commenting out the lines in setup.py that add the -mfloat and -mfpu flags it gets further, but dies with this:
webrtc-audio-processing/webrtc/base/platform_thread.cc:18:10: fatal error: 'sys/prctl.h' file not found
18 | #include <sys/prctl.h>
| ^~~~~~~~~~~~~
1 error generated.
I gather MacOS doesn't support prctl.h any longer so it needs an ifdef in the include?
Please borrow a mac and test your code. pip install fails as do the build examples you've provide.