import sounddevice as sd
import numpy as np
from scipy.io.wavfile import write

# --- 1. Identificazione del Dispositivo ---
# Esegui questo blocco di codice per primo per trovare l'indice del tuo dispositivo.
# print(sd.query_devices())
# Una volta trovato, inserisci l'indice corretto qui sotto.

# --- 2. Impostazioni della Registrazione ---
DEVICE_INDEX = 26      # ESEMPIO: Sostituisci con l'indice del tuo dispositivo Yamaha TF5
CHANNELS = 2          # Numero di canali da registrare (la TF5 ne supporta fino a 34)
SAMPLE_RATE = 48000    # Frequenza di campionamento in Hz (deve corrispondere a quella della console)
DURATION = 10          # Durata della registrazione in secondi
OUTPUT_FILENAME = 'registrazione_multicanale.wav'

try:
    # --- 3. Registrazione dell'Audio ---
    print(f"Inizio registrazione di {DURATION} secondi dal dispositivo {DEVICE_INDEX}...")

    # sd.rec() avvia una registrazione non bloccante e restituisce immediatamente
    # I dati audio vengono memorizzati in un array NumPy
    myrecording = sd.rec(int(DURATION * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, device=DEVICE_INDEX, dtype='float32')

    # sd.wait() attende che la registrazione sia completata
    sd.wait()

    print("Registrazione completata.")

    # --- 4. Salvataggio del File WAV ---
    print(f"Salvataggio della registrazione in corso su '{OUTPUT_FILENAME}'...")

    # Scrive l'array NumPy in un file WAV
    # La funzione si aspetta dati in un formato specifico (es. int16 o float32)
    # È consigliabile scalare i dati se necessario, ma sounddevice con dtype='float32'
    # di solito produce un output compatibile.
    write(OUTPUT_FILENAME, SAMPLE_RATE, myrecording)

    print("File salvato con successo.")

except Exception as e:
    print(f"Si è verificato un errore: {e}")