WP7, SoundEffect, frequenza di campionamento e Audacity
Dunque, faccio un breve riassunto. Per fare il play di suoni all’interno di una applicazione Windows Phone 7, abbiamo essenzialmente due metodi diversi:
- usando un MediaElement
- usando la classe SoundEffect
Il primo è disponibile solo all’interno di applicazioni Silverlight, il secondo è disponibile sia in Silverlight che in XNA.
In questo post parliamo della classe SoundEffect, e dei files .wav che è in grado di prendere in pasto e da mandare in play. Essenzialmente si tratta di avere del codice che fa una cosa simile:
SoundEffect slideEffect; private void prepareSoundEffects() { slideEffect = SoundEffect.FromStream(TitleContainer.OpenStream("Slide.wav")); }
In questo caso carico il file Slide.wav. Quando ci sarà bisogno di farlo sentire all’utente è sufficiente chiamare il metodo Play(). Nulla di particolarmente complicato. Ricordiamoci che nel code-behind di App.xaml bisogna fare quanto segue:
readonly DispatcherTimer timer = new DispatcherTimer(); public App() { this.timer.Tick += (s, e) => { FrameworkDispatcher.Update(); }; this.timer.Interval = TimeSpan.FromMilliseconds(100); this.timer.Start(); UnhandledException += Application_UnhandledException; InitializeComponent(); InitializePhoneApplication(); }
Non so bene il perchè di questa cosa, so solo che bisogna farla!
Che tipo di files posso far sentire?
Soltanto files .wav: gli mp3 in questo frangente non sono ammessi. Se tentate di caricare un file .mp3 otterrete una InvalidOperationException. Potete caricare solamente files .wav campionati a 44100Hz.
Ora, se siete come me, probabilmente in questi giorni state scandagliando il Web alla ricerca di questo o quell’effetto sonoro che sì, sul click di quel Button ci sta proprio bene. Però non tutti i files sono a 44100Hz: cosa succede, in questo caso? Che otterrete ancora una bella InvalidOperationException, proprio al momento del caricamento che abbiamo visto prima.
E quindi? Quindi vi consiglio di scaricare Audacity, che è un free digital audio editor disponibile su SoundForge. Audacity è disponibile ovviamente in download, sia in formato zip, che nel classico installer .msi. Avviate Audacity, aprite il file .wav che volete modificare e reimpostate la frequenza di campionamento, impostandola su 44100Hz.
Ma anche qui c’è una piccola precisazione da fare. Date un’occhiata a questo screenshot:
Audacity riporta la frequenza di campionato in due punti diversi. Nell’esempio qui sopra ho aperto un file audio a 11025Hz. Se volete portare la frequenza a 44100Hz, per renderlo compatibile con la SoundEffect di XNA, cambiate quella che ho evidenziato dal rettangolo verde – in basso a sinistra nella finestra. Se toccate quella evidenziata dal rettangolo rosso, il suono risulterà distorto – perchè ovviamente modificare il campionamento significa anche “accelerare” il suono (un po’ come mandare un vecchio vinile 33 giri a 45).
Per salvare il file con le nuove impostazioni, usate il menu File –> Export As WAV… ed il gioco è fatto.