{"library":"pystoi","title":"pystoi","description":"pystoi is a Python library that computes the Short Term Objective Intelligibility (STOI) measure, a metric highly correlated with the subjective intelligibility of degraded speech signals. It is an intrusive measure, requiring both clean and degraded speech inputs. It serves as an objective alternative for evaluating the effect of non-linear processing like noise reduction or binary masking on speech intelligibility. The current version is 0.4.1, and its development appears to be in maintenance mode.","language":"python","status":"maintenance","last_verified":"Sat May 16","install":{"commands":["pip install pystoi"],"cli":null},"imports":["from pystoi import stoi"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import soundfile as sf\nimport numpy as np\nfrom pystoi import stoi\nimport os\n\n# Create dummy audio files for demonstration\nfs = 10000 # Sample rate\nduration = 1 # seconds\n\nclean_signal = np.random.rand(fs * duration).astype(np.float32) * 0.5 # Clean speech\ndenoised_signal = clean_signal + (np.random.rand(fs * duration).astype(np.float32) - 0.5) * 0.1 # Denoised (noisy) speech\n\n# Save dummy files\nsf.write('clean.wav', clean_signal, fs)\nsf.write('denoised.wav', denoised_signal, fs)\n\n# Load the audio files (replace with your actual paths)\nclean_audio, fs_clean = sf.read('clean.wav')\ndenoised_audio, fs_denoised = sf.read('denoised.wav')\n\n# Ensure sample rates are consistent, pystoi will resample if needed to 10kHz internally\nassert fs_clean == fs_denoised, \"Sample rates must match\"\n\n# Compute STOI\nscore = stoi(clean_audio, denoised_audio, fs_clean, extended=False)\n\nprint(f\"STOI score: {score:.4f}\")\n\n# Clean up dummy files\nos.remove('clean.wav')\nos.remove('denoised.wav')","lang":"python","description":"This quickstart demonstrates how to compute the STOI score between a clean and a degraded speech signal. It uses `soundfile` to read the audio, then calls the `stoi` function with the clean signal, degraded signal, and sampling frequency. The `extended` parameter can be set to `True` for extended STOI.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.4.1","pypi_latest":"0.4.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":7.3,"avg_import_s":2.9,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.24,"mem_mb":38.7,"disk_size":"230.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7,"import_time_s":1.63,"mem_mb":38.7,"disk_size":"222M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.99,"mem_mb":49.9,"disk_size":"245.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.3,"import_time_s":3.71,"mem_mb":49.9,"disk_size":"235M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.67,"mem_mb":48.9,"disk_size":"231.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.3,"import_time_s":3.81,"mem_mb":48.9,"disk_size":"221M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.14,"mem_mb":48.8,"disk_size":"230.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.1,"import_time_s":3.24,"mem_mb":48.8,"disk_size":"220M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.83,"mem_mb":37.3,"disk_size":"232.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pystoi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.8,"import_time_s":1.74,"mem_mb":37.4,"disk_size":"229M"}]}}