2013-02-28 20 views
16

Sto provando a riprodurre un file audio nella mia applicazione WPF. Attualmente ho la seguente chiamata:Come riprodurre una risorsa file audio WPF

private void PlaySound(string uriPath) 
{ 
    Uri uri = new Uri(@"pack://application:,,,/Media/movepoint.wav"); 
    var player = new MediaPlayer(); 
    player.Open(uri); 
    player.Play(); 
} 

Ora se a specificare Media/movepoint.wav come azione accumulo Content e caricarlo come un percorso di file relativo o assoluto funziona benissimo, quindi ho il sospetto che questo ha qualcosa a che fare con la Pack URI, ma Non posso per la vita di me capire cosa.

L'obiettivo è archiviare il file come una risorsa in modo che non sia disponibile nella directory di output. Posso fornire la copia WAV o la copia MP3.

risposta

10

Ho provato questo con un file immagine, che funziona come un file audio per quanto riguarda l'uri perché è solo un'altra risorsa. Ho usato il codice qui sotto che essenzialmente corrisponde a quello che hai.

new Uri(@"pack://application:,,,/Resources/logo.png") 

Assicurarsi che la cartella "Media" non sia nidificata in nessun'altra cartella. Se lo è, è necessario includere anche quella cartella.

Utilizzo di .NET Framework 4.0, VS2012.

This link fornisce una descrizione abbastanza buona dell'intero schema "pacchetto" di cose.

EDIT

ulteriori ricerche su questo argomento sembra indicare che ciò che si vuole fare potrebbe non essere possibile con i file audio o video. L'estratto di seguito è tratto dalla sezione commenti di this MSDN page.

Anche se è possibile dichiarare un'istanza di questa classe in Extensible Application Markup Language (XAML), non è possibile caricare e riprodurre i suoi media senza l'utilizzo di codice. Per riprodurre solo contenuti multimediali in XAML, utilizzare un MediaElement. Inoltre, se dichiari un'istanza in XAML, l'unico uso pratico è la sintassi degli elementi proprietà di riempimento per la proprietà Player.

Durante la distribuzione di supporti con l'applicazione, non è possibile utilizzare un file di supporto come risorsa di progetto. Nel file di progetto, devi invece impostare il tipo di supporto su Contenuto e impostare CopyToOutputDirectory su PreserveNewest o Always.

MediaPlayer può essere utilizzato in due diverse modalità, a seconda di cosa è guida il lettore: modalità indipendente o modalità orologio. Nella modalità indipendente , MediaPlayer è analogo a un'immagine e il supporto è stato aperto tramite il metodo Open per la riproduzione. In modalità Orologio, il MediaPlayer può essere pensato come una destinazione per un'animazione, e quindi avrà le voci relative alla Timeline e all'Orologio nell'albero Timing che controlla la riproduzione. Per ulteriori informazioni sulle modalità multimediali, vedere Panoramica multimediale.

MediaPlayer è diverso da un MediaElement in quanto non è un controllo che può essere aggiunto direttamente all'interfaccia utente (UI) di un'applicazione . Per visualizzare i contenuti multimediali caricati con MediaPlayer, è necessario utilizzare un VideoDrawing o DrawingContext.

+0

A prima vista ero un po 'perplesso dal momento che la nostra sintassi URI del pacchetto è identica. Tuttavia, c'è qualcosa di speciale in "Resouces"? Al momento la cartella Media si trova nella radice dell'Assembly. Devo fare/Risorse/Media/? Grazie – xximjasonxx

+0

Ho appena provato PlaySound ("pacchetto: // applicazione: ,,,/Resources/Media/movepoint.mp3"); E nessuna fortuna da avere (sì ho aggiornato il codice) :) – xximjasonxx

+1

Grazie per il chiarimento. Posso capire perché farebbero questo dato rischi di violazione del copyright. Ho contrassegnato la tua risposta come corretta. Grazie – xximjasonxx

1

Quanto segue sembra funzionare in .NET Framework 4.5:

var sri = Application.GetResourceStream(new Uri("pack://application:,,,/MyAssemblyName;component/Resources/CameraShutter.wav")); 

if ((sri != null)) 
{ 
    using (s == sri.Stream) 
    { 
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(s); 
    player.Load(); 
    player.Play(); 
    } 
} 

CameraShutter.wav è incorporato come Resource nel mio progetto (e risiede all'interno delle risorse sottocartella, come indicato nella confezione URI).

Problemi correlati