Skip to content

Commit 1418197

Browse files
committed
Fix architecture detection on Windows ARM64
When running an AMD64 Python on a Windows ARM64 host, platform.machine() returns the host architecture instead of the process architecture, causing sounddevice to try and load the wrong DLL. >>> import sounddevice Traceback (most recent call last): File "C:\Users\bagpuss\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\sounddevice.py", line 72, in <module> raise OSError('PortAudio library not found') OSError: PortAudio library not found During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<python-input-1>", line 1, in <module> import sounddevice File "C:\Users\bagpuss\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\sounddevice.py", line 91, in <module> _lib: ... = _ffi.dlopen(_libname) ~~~~~~~~~~~^^^^^^^^^^ OSError: cannot load library 'C:\Users\bagpuss\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\_sounddevice_data\portaudio-binaries\libportaudioarm64.dll': error 0x7e Switch to sysconfig.get_platform() which does the right thing under emulation.
1 parent 75b9efc commit 1418197

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

‎setup.py‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import platform
3+
import sysconfig
34
from setuptools import setup
45

56
MACOSX_VERSIONS = '.'.join([
@@ -11,7 +12,8 @@
1112
system = os.environ.get('PYTHON_SOUNDDEVICE_PLATFORM', platform.system())
1213
machine = platform.machine().lower()
1314
architecture0 = os.environ.get('PYTHON_SOUNDDEVICE_ARCHITECTURE',
14-
'arm64' if machine in ['arm64', 'aarch64'] else platform.architecture()[0])
15+
'arm64' if 'arm64' in sysconfig.get_platform() or 'aarch64' in sysconfig.get_platform()
16+
else platform.architecture()[0])
1517

1618
if system == 'Darwin':
1719
libname = 'libportaudio.dylib'

‎src/sounddevice.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import os as _os
5656
import platform as _platform
5757
import sys as _sys
58+
import sysconfig as _sysconfig
5859
from ctypes.util import find_library as _find_library
5960
from _sounddevice import ffi as _ffi
6061

@@ -75,7 +76,7 @@
7576
if _platform.system() == 'Darwin':
7677
_libname = 'libportaudio.dylib'
7778
elif _platform.system() == 'Windows':
78-
if _platform.machine().lower() in ('arm64', 'aarch64'):
79+
if 'arm64' in _sysconfig.get_platform() or 'aarch64' in _sysconfig.get_platform():
7980
_platform_suffix = 'arm64'
8081
else:
8182
_platform_suffix = _platform.architecture()[0]

0 commit comments

Comments
 (0)