Skip to content

2.2.10: registrazione trascinabile, audio del PC e cursore fermo - #15

Merged
cammo22 merged 2 commits into
mainfrom
cursor/registrazione-dispositivi-sfarfallio-918e
Nov 10, 2026
Merged

cammo22 merged 2 commits into
mainfrom
cursor/registrazione-dispositivi-sfarfallio-918e

Conversation

@cammo22

@cammo22 cammo22 commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Versione 2.2.10 (10 novembre 2026). Pronta da unire: su main la CI pubblica la release da sola. Non è unita.

Perché l'audio è fatto così

ffmpeg -devices di questa build (n9.0.2) ha solo dshow, gdigrab, lavfi, openal, vfwcap. Non c'è wasapi, quindi l'audio del PC non può passare da FFmpeg: per questo il registro diceva «nessun dispositivo» anche con il microfono acceso.

Una pipe viva verso FFmpeg, mentre gdigrab gira, si intasa e perde campioni, e lo stdin serve per il q di stop. Scelta: NAudio (WasapiCapture in condiviso per il microfono, WasapiLoopbackCapture per l'audio del PC). I due flussi si mescolano in un WAV stereo 48 kHz allineato all'orologio: un buco sotto gli 80 ms si aspetta, uno più lungo diventa silenzio e non ferma l'altro lato. A fine pezzo FFmpeg unisce (-c:v copy, AAC, apad, -shortest). La pausa chiude il pezzo e la ripresa ne apre un altro, poi si concatenano.

I nomi e le tacche usano gli stessi dispositivi WASAPI (i nomi di Windows, AudioMeterInformation). Si lasciano quando il pannello non si vede. Il parser dshow resta, e legge anche il formato nuovo senza «DirectShow audio devices», ma non guida più la cattura.

Causa dello sfarfallio

Non c'erano hook WH_MOUSE_LL / WH_KEYBOARD_LL. L'anteprima usava già SRCCOPY, non CAPTUREBLT (quel flag fa sparire e ridisegnare il cursore: resta vietato). Il cursore si metteva a sfarfallare dopo un po', anche a finestra di registrazione chiusa, per cose che non si fermavano:

  • l'avatar è una finestra trasparente e topmost: il timer era a priorità Render e chiamava UpdateLayeredWindow anche sul fotogramma già in vista;
  • il contatore della scheda video (Monitor.ReadCategory su «GPU Engine») partiva ogni 700 ms senza attendere la lettura precedente, e le letture si accavallavano;
  • il logo della home e altre animazioni CSS girano all'infinito e tengono sveglio WebView2;
  • l'anteprima BitBlt continuava se la finestra era solo nascosta;
  • il misuratore audio COM restava aperto;
  • la barra allocava un pennello nuovo a ogni tick.

Ora il timer dell'avatar è in background e salta il fotogramma uguale, il contatore GPU è una lettura alla volta e si ferma se la finestra non è davanti, la pagina mette in-pausa (e si sospende se è minimizzata), l'anteprima e le tacche si fermano col pannello. Ogni 5 minuti il registro scrive risorse: gdi …, user …, handle …, ram …, thread ….

Cosa provare a mano

Compilare con scripts\compila.ps1 (rifà l'interfaccia: la classe in-pausa sta nel sorgente CSS) e aprire l'exe in bin\Debug.

  1. Vassoio o tasto destro dell'avatar → Registra…. Il pannello si apre accanto all'avatar, opaco, e non entra nel video (nell'anteprima, dove sta lui, c'è un buco). Si vede.
  2. Prenderlo da un punto vuoto o dalla scritta REGISTRA e spostarlo. Ridimensionarlo dagli angoli. Chiudere l'app, riaprirla, Registra: sta dove l'hai lasciato, con la stessa misura. Spostarlo fuori da un monitor: torna dentro. Con due schermi, anche su quello a sinistra.
  3. Stacca trascinandolo, Aggancia dal testo in alto: segue l'avatar. Riduci: barra con tempo, Pausa, Salva, Annulla, Apri. Apri rialza il pannello. Chiudi (o Esc) mentre non si registra chiude; mentre si registra, riduce e non butta il video.
  4. Sorgente: Monitor (scelta del monitor), Zona (trascina, Esc annulla), Finestra (elenco dei titoli). Audio: microfono e audio del PC, con le tacche che si muovono se parli o se parte un suono. 30/60, Leggera/Buona/Alta, cursore, conto alla rovescia, solo audio.
  5. Nel registro, all'apertura: N microfoni, N uscite del PC (WASAPI) e i nomi di Windows (Lavaliello, CABLE Output, cuffie), non «nessun dispositivo».
  6. F9 avvia (conto 3-2-1 se è acceso), F9 pausa, F9 riprende, F10 salva. Stessi tasti sulla barra. Una registrazione di mezzo minuto con microfono e audio del PC: nel file si sentono entrambi, il pannello non compare, il cursore sì se la spunta è accesa.
  7. A fine registrazione: riepilogo con fotogramma, nome, durata, peso. Apri (lettore), Mostra nella cartella, Modifica (piastra), Elimina (cestino, e sparisce dai recenti).
  8. Solo audio: esce un M4A, senza video.
  9. Annulla non lascia file in Immagini\DaPConvertitore. Chiudere l'app durante una registrazione non lascia ffmpeg.exe acceso.
  10. Screenshot (Ctrl+Maiusc+S), recenti in home, vassoio, avatar, player di un brano e di un video: come prima.
  11. Lasciare l'app aperta un bel po' (avatar acceso, pannello di registrazione chiuso, finestra del convertitore non davanti). Il mouse non deve sfarfallare. In %AppData% (o la cartella dati) registro.txt ha una riga risorse: all'avvio e poi circa ogni 5 minuti. Se c'è · in crescita, GDI/USER/handle stanno salendo.

Prove automatiche

dotnet test con filtro ProveRegistrazione|ProveMixAudio: 25 prove (parser vecchio e nuovo, UTF-8, comandi gdigrab/mux senza wasapi, posizione dentro gli schermi, WAV aperto e chiuso 30 volte, contatori). Su questa macchina non è Windows: il resto della suite che chiama ffmpeg, 7-Zip o WinRT non parte. L'app compila con EnableWindowsTargeting.

Open in Web Open in Cursor 

daprodproduzioni and others added 2 commits November 10, 2026 14:17
Il pannello si sposta, si ricorda e si riduce a barra. Microfono e audio del PC
li cattura il programma, perché FFmpeg non ha WASAPI. Il parser legge anche
l'elenco nuovo. L'avatar e le anteprime non ridisegnano più il cursore.

Co-authored-by: Cammo <cammo22@users.noreply.github.com>
… fermo.

Co-authored-by: Cammo <cammo22@users.noreply.github.com>
@cursor cursor Bot changed the title Registrazione trascinabile, audio WASAPI e sfarfallio del mouse 2.2.10: registrazione trascinabile, audio del PC e cursore fermo Nov 10, 2026
@cammo22
cammo22 merged commit 8d27328 into main Nov 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants