2 Stimmen

Wie kann eine Silverlight-App herunterladen und spielen eine mp3-Datei von einer URL?

Ich habe eine kleine Silverlight-Anwendung, die alle Bilder et texte von einer URL benötigt, etwa so:

if (dataItem.Kind == DataItemKind.BitmapImage)
{
    WebClient webClientBitmapImageLoader = new WebClient();
    webClientBitmapImageLoader.OpenReadCompleted += new OpenReadCompletedEventHandler(webClientBitmapImageLoader_OpenReadCompleted);
    webClientBitmapImageLoader.OpenReadAsync(new Uri(dataItem.SourceUri, UriKind.Absolute), dataItem);
}
else if (dataItem.Kind == DataItemKind.TextFile)
{
    WebClient webClientTextFileLoader = new WebClient();
    webClientTextFileLoader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClientTextFileLoader_DownloadStringCompleted);
    webClientTextFileLoader.DownloadStringAsync(new Uri(dataItem.SourceUri, UriKind.Absolute), dataItem);
}

und:

void webClientBitmapImageLoader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.SetSource(e.Result);
    DataItem dataItem = e.UserState as DataItem;

    CompleteItemLoadedProcess(dataItem, bitmapImage);
}

void webClientTextFileLoader_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    DataItem dataItem = e.UserState as DataItem;
    string textFileContent = e.Result.ForceWindowLineBreaks();
    CompleteItemLoadedProcess(dataItem, textFileContent);
}

Die Bilder und Textdateien werden dann jeweils in eine Wörterbuch so dass die Anwendung jederzeit Zugriff darauf hat. Das funktioniert gut.

Jetzt möchte ich dasselbe tun mit mp3 Dateien, aber alle Informationen, die ich im Internet über die Wiedergabe von mp3-Dateien in Silverlight finde, zeigen, wie man einbetten sie im .xap Datei, was ich nicht tun möchte, da ich sie dann nicht mehr herunterladen könnte dynamisch wie ich es oben tue.

Wie kann ich mp3-Dateien in Silverlight herunterladen und abspielen, so wie ich Bilder und Text herunterlade und anzeige?

1voto

AnthonyWJones Punkte 182582

Sie würden die MP3-Datei als Binärstrom herunterladen und das Ergebnis in einem Byte-Array speichern. Dieses Byte-Array würden Sie in Ihrem Wörterbuch speichern.

An dem Punkt, an dem Sie das Byte-Array einem MediaElement zuweisen möchten, würden Sie folgenden Code verwenden:-

void SetMediaElementSource(MediaElement me, byte[] mp3)
{
  me.SetSource(new MemoryStream(mp3));
}

0 Stimmen

Hat gut funktioniert, nachdem das MediaElement im Wörterbuch ist, muss ich es nur noch herausziehen und .Play() darauf aufrufen, danke

0 Stimmen

Damit das MediaElement abspielt einmal aber wie bekomme ich es zum Abspielen zweimal stackoverflow.com/questions/2489906/

0 Stimmen

@Edward: Ich würde mich davor hüten, zu viele MediaElements gleichzeitig am Leben zu halten. Vielleicht sollten Sie sich die Speicherkosten Ihrer gesamten Wörterbuchstrategie ansehen, um sicherzustellen, dass sie am Ende nicht zu teuer wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X