diff --git a/.github/workflows/sounddevice-data.yml b/.github/workflows/sounddevice-data.yml index 5bdfaad..4a019e7 100644 --- a/.github/workflows/sounddevice-data.yml +++ b/.github/workflows/sounddevice-data.yml @@ -16,6 +16,8 @@ jobs: arch: 'x86' - os: windows-11-arm arch: 'arm64' + - os: windows-11-arm + arch: 'x64' runs-on: ${{ matrix.os }} steps: - name: Set up Python @@ -25,7 +27,7 @@ jobs: architecture: ${{ matrix.arch }} - name: Double-check Python version run: | - python --version + python --version --version - name: Clone Git repository (with submodules) uses: actions/checkout@v6 with: @@ -36,6 +38,7 @@ jobs: run: | python -m pip install . - name: Import module + shell: bash run: | python -m sounddevice python -c "import sounddevice as sd; print(sd._libname)" @@ -45,6 +48,7 @@ jobs: python -c "import sounddevice as sd; assert not any(a['name'] == 'ASIO' for a in sd.query_hostapis())" - name: Import module (using the ASIO DLL) if: startsWith(matrix.os, 'windows') + shell: bash env: SD_ENABLE_ASIO: 1 run: | diff --git a/setup.py b/setup.py index 46a82fa..503d811 100644 --- a/setup.py +++ b/setup.py @@ -10,8 +10,18 @@ # environment variables for cross-platform package creation system = os.environ.get('PYTHON_SOUNDDEVICE_PLATFORM', platform.system()) machine = platform.machine().lower() -architecture0 = os.environ.get('PYTHON_SOUNDDEVICE_ARCHITECTURE', - 'arm64' if machine in ['arm64', 'aarch64'] else platform.architecture()[0]) +if 'PYTHON_SOUNDDEVICE_ARCHITECTURE' in os.environ: + architecture0 = os.environ['PYTHON_SOUNDDEVICE_ARCHITECTURE'] +elif os.environ.get('PROCESSOR_ARCHITECTURE') in ['AMD64', 'x86', 'ARM64']: + architecture0 = { + 'AMD64': '64bit', + 'x86': '32bit', + 'ARM64': 'arm64', + }[os.environ['PROCESSOR_ARCHITECTURE']] +elif machine in ['arm64', 'aarch64']: + architecture0 = 'arm64' +else: + architecture0 = platform.architecture()[0] if system == 'Darwin': libname = 'libportaudio.dylib' diff --git a/src/sounddevice.py b/src/sounddevice.py index 00fc6f8..4361c62 100644 --- a/src/sounddevice.py +++ b/src/sounddevice.py @@ -75,10 +75,16 @@ if _platform.system() == 'Darwin': _libname = 'libportaudio.dylib' elif _platform.system() == 'Windows': - if _platform.machine().lower() in ('arm64', 'aarch64'): - _platform_suffix = 'arm64' - else: - _platform_suffix = _platform.architecture()[0] + _platform_suffix = { + 'AMD64': '64bit', + 'x86': '32bit', + 'ARM64': 'arm64', + }.get(_os.environ.get('PROCESSOR_ARCHITECTURE', ''), '') + if not _platform_suffix: + if _platform.machine().lower() in ('arm64', 'aarch64'): + _platform_suffix = 'arm64' + else: + _platform_suffix = _platform.architecture()[0] if 'SD_ENABLE_ASIO' in _os.environ: _libname = 'libportaudio' + _platform_suffix + '-asio.dll' else: