MP3 download mit Silverlight

Nein dies ist kein Filesharing Anleitung um illegale MP3 Musik zu downloaden. Ich schreibe grad einen Vokabeltrainer für meinen Sohn. Dabei soll auch die Aussprache trainiert werden. Leo.org bietet neben Übersetzung auch den Service den Englischen Text vorzulesen. Für meine Lernanwendung möchte ich aber gelernte Vokabel speichern. Also das MP3 per Download im Isolatedstorage speichern. Die Download URL ist relativ simpel das gesprochene Wort mit der Endung mp3. Mittels dem Webclient wird ein asynchroner Download gestartet. Da es sich um binäre Daten handelt macht ein Stream mehr Sinn. Diesen erhält man per Openreadcompleted.

Dim url As String = "http://www.leo.org/dict/audio_en/" + txtenglisch.Text + ".mp3"
Dim wc As New WebClient
        AddHandler wc.OpenReadCompleted, AddressOf mp3fertig
wc.OpenReadAsync(New Uri(url, UriKind.Absolute)))

Wenn nun der Download der MP3 Datei fertig ist, muss man sich überlegen wie man die Datei speichert. Da gibt's im wesentlichen nur die Methode im IsolatedStorage. Für möglichst kurzen Code hole ich mir die Länge des Streams über einen kleinen Umweg StreamResourceInfo. Dann muss man Binär lesen und schließlich Binär schreiben.

Private Sub mp3fertig(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)
  Dim srInfo = New StreamResourceInfo(e.Result, Nothing)
  Dim sr As BinaryReader = New BinaryReader(srInfo.Stream)
  Dim iso As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication
  Using iosr As IsolatedStorageFileStream = iso.OpenFile(txtenglisch.Text + ".mp3", FileMode.OpenOrCreate)
     Using bw As BinaryWriter = New BinaryWriter(iosr)
        bw.Write(sr.ReadBytes(srInfo.Stream.Length))
     End Using
  End Using
 sr.Close()
End Sub

Schließlich noch der Hinweis. Wenn der Platz  (1 MB) nicht reichen sollte, kann dieser vergrößert werden. Der Benutzer muss das aber noch bestätigen. IncreaseQuotaTo(1000000)

Kommentar schreiben