From 415175ec4db2cc4a9f6b21427379d7e17eb3430f Mon Sep 17 00:00:00 2001 From: luzadev Date: Tue, 9 Jun 2026 20:58:51 +0200 Subject: [PATCH] v1.7.10: fix registrazione BlackHole muta (device by name) QuickTime registrava da BlackHole, MusicTools no: il bug era che list_input_devices passava al record l'index AVFoundation, ma l'index puo' rinumerarsi tra l'elenco e l'apertura (iPhone in continuita', Multi-Output Device, hot-plug). Quando ffmpeg apriva : col numero sbagliato, registrava silenzio dal device "vero" mappato a quel numero. Fix: in _list_macos uso il NOME del device come id (es. "BlackHole 2ch"). ffmpeg AVFoundation accetta sia : sia : ed il nome e' stabile. Aggiunto campo 'index' solo per log/diagnostica. Nessun cambio Windows (gia' faceva by-name). --- core/config.py | 2 +- core/recorder.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/config.py b/core/config.py index d3f308b..b44eb1c 100644 --- a/core/config.py +++ b/core/config.py @@ -5,7 +5,7 @@ import os import sys from pathlib import Path -VERSION = "v1.7.9" +VERSION = "v1.7.10" APP_NAME = "MusicTools" diff --git a/core/recorder.py b/core/recorder.py index ca9818f..32172af 100644 --- a/core/recorder.py +++ b/core/recorder.py @@ -73,7 +73,14 @@ def _is_virtual(name: str) -> bool: def _list_macos(ffmpeg: str) -> list[dict]: """Parsa l'output di `ffmpeg -f avfoundation -list_devices true -i ""`. - L'output va su stderr.""" + L'output va su stderr. + + IMPORTANTE: come 'id' usiamo il NOME del device (non l'index numerico). + AVFoundation rinumera silenziosamente i device quando cambia il set di + hardware collegato (es. iPhone in continuita', Multi-Output Device, ecc). + Il nome e' invece stabile; ffmpeg AVFoundation accetta sia ':' + sia ':' come specifica del device input. + """ try: proc = subprocess.run( [ffmpeg, "-hide_banner", "-f", "avfoundation", @@ -105,7 +112,12 @@ def _list_macos(ffmpeg: str) -> list[dict]: if not m: continue idx, name = m.group(1), m.group(2).strip() - devices.append({"id": idx, "name": name, "is_virtual": _is_virtual(name)}) + devices.append({ + "id": name, # nome stabile (vedi docstring) + "index": idx, # solo informativo per debug + "name": name, + "is_virtual": _is_virtual(name), + }) return devices