Silverlight - Audio peak meter

Cristian Civera

di Cristian Civera, in Silverlight, sabato 23 maggio 2009 ore 18.59

Qualche tempo fa realizzai un controllo per l'analisi dello stream audio e la visualizzazione dei picchi attraverso WPF. Nel tempo libero del tempo libero, da appassionato di DirectShow e di fuffologie mi son chiesto se si poteva fare una cosa simile anche in Silverlight.

Il problema è che in Silverlight non si ha a disposizione DirectShow, non si può usare codice unmanaged ne si può accedere allo stream audio. L'unico oggetto che abbiamo è MediaElement che permette di riprodurre audio e video; nella versione 2.0 c'è la classe MediaStreamSource, ma sebbene non abbia avuto ancora modo di provarla a fondo, permette di accedere allo stream codificato e non quello decodificato, perciò scrivere un decoder mp3 in codice managed non è proprio una passeggiata :-). Per poter applicare FFT e calcolare decibel e picchi dobbiamo infatti avere i byte grezzi, come i file wav.

Siccome per la maggior parte dei casi può bastare un piccolo loop su una canzone ho trovato una facile soluzione: precalcolare. In pratica ho realizzato una console application, interamente managed, che apre un file audio, calcola FFT ecc e salva in un file tutti i byte rappresentativi dei picchi, circa 12 suddivisi per 19 frequenze al secondo.

Una volta che si ha il file audio e il file .dat contenente i picchi, tramite un controllo posso mostrarne i valori. Il controllo AudioMeter ha bisogno del file .dat e del MediaElement sul quale basarsi per mostrare i picchi in funzione della posizione. Ecco il risultato:

Per rendere il più fluido possibile l'animazione intercetto CompositionTarget.Rendering che viene scatenato ad ogni frame dell'applicazione Silverlight che viene renderizzato. Le barre che vanno su e giù sono invece animate da DoubleAnimation.

Devo dire che sono molto soddisfatto del risultato. Anche se il video non rende moltissimo, l'animazione è molto fluida e ben sincronizzata, meglio di quanto avevo fatto con WPF.

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

Nella stessa categoria
I più letti del mese
IL CONTENUTO
TagCloud
.NET Framework, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Framework 4.0, AJAX, Architettura, ASP, ASP.NET, ASP.NET 2.0, ASP.NET 2.0 per tutti, ASP.NET 4.0, ASPItalia.com, Custom Control, Databinding, Datagrid, Entity Framework, HttpRuntime, IIS, Javascript, LINQ, LINQ to Entities, LINQ to SQL, Media Center, Microsoft Expression, Object Oriented Programming, Off Topic, PDC 2008, SharePoint, Silverlight, Silverlight - animazioni, Silverlight 2.0, Silverlight 3.0, User Control, Visual Studio, Windows 7, Windows Azure, Windows Client, Windows Communication Foundation, Windows Identity Foundation, Windows Live Services, Windows Presentation Foundation, Windows Server, Windows Vista, Windows Workflow Foundation, XAML, XBox 360, XHTML, XML, XPS, XSLT
BLOG INFO
  • 200 post, 87 commenti, 42 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA