python-webrtc-audio-processing icon indicating copy to clipboard operation
python-webrtc-audio-processing copied to clipboard

Need to add instruction to run: autoreconf -i before running ./autogen.sh

Open wnm3 opened this issue 7 months ago • 3 comments

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.

wnm3 avatar Apr 25 '25 16:04 wnm3

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

wnm3 avatar Apr 25 '25 16:04 wnm3

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

wnm3 avatar Apr 25 '25 16:04 wnm3

By commenting out the lines in setup.py that add the -mfloat and -mfpu flags it gets further, but dies with this:

Image

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?

wnm3 avatar Apr 25 '25 17:04 wnm3

Please borrow a mac and test your code. pip install fails as do the build examples you've provide.

wnm3 avatar Jul 10 '25 17:07 wnm3