Konvertieren Sie MP3 in WAV in Memorystream für die Wiedergabe mit System.Media.Soundplayer

StackOverflow https://stackoverflow.com/questions/3810305

  •  25-09-2019
  •  | 
  •  

Frage

Ich versuche, die NAudio Bibliothek zu verwenden, um einige InLine Umwandlung einiger Soundeffekte für die Wiedergabe mit meiner Anwendung zu tun, um die Medien Soundplayer für die aktuelle Wiedergabe verwendet wird. (Ich finde NAudio Wiedergabe ist ein bisschen nervös für die direkte Wiedergabe, damit die Conversion)

Ich möchte wirklich nicht auf die Dateien auf der Festplatte zu extrahieren, anstatt um die Wiedergabe ich sie im Speicher zu WAV ist konvertieren möchte einen Memorystream verwenden.

Mit Blick auf die NAudio Quelle scheint es, dass es nicht einen Teil der Daten in den Stream schreiben, bis es angeordnet ist, aber dies entkräftet daher die Memorystream. Soll ich Nacharbeit, dass, oder bin ich das alles falsch?

mit dem folgenden Code, den ich einen invalidheader erhalten.

Wenn ich den Code ersetzen und die Datei auf die Festplatte schreiben und dann in einen Stream alles Deponieren Sie neu zu laden ist in Ordnung (aber es besiegt irgendwie den Zweck)

Private Sub PlaySound(ByVal ms As Stream)
    Dim ss As System.Media.SoundPlayer
    ss = New System.Media.SoundPlayer
    ss.Stream = ms
    ss.Load()
    Try
        ss.PlaySync()
    Catch ex As InvalidOperationException
        Debug.Print(ex.ToString)
    End Try
End Sub

Private Sub ConvertToStream()
    Using reader As New Mp3FileReader("C:\KMSounds\sound12.mp3")
        Using convertedStream As WaveStream = WaveFormatConversionStream.CreatePcmStream(reader)
            'File.Delete("c:\test2.wav")
            'Using ms As New FileStream("c:\test2.wav", FileMode.Create)
            Using ms As New MemoryStream
                Using w As New WaveFileWriter(ms, convertedStream.WaveFormat)
                    Dim buffer() As Byte = CType(Array.CreateInstance(GetType(Byte), convertedStream.GetReadSize(4000)), Byte())
                    While True
                        Dim bytesRead As Integer = convertedStream.Read(buffer, 0, buffer.Length)
                        If (bytesRead = 0) Then
                            w.Flush()
                            Exit While
                        Else
                            w.WriteData(buffer, 0, bytesRead)
                        End If
                    End While
                    PlaySound(ms)
                End Using
            End Using
        End Using
    End Using
End Sub

System.InvalidOperationException: Der Wave-Header ist beschädigt.    bei System.Media.SoundPlayer.ValidateSoundData (Byte [] data)    bei System.Media.SoundPlayer.LoadAndPlay (Int32 flags)    bei System.Media.SoundPlayer.PlaySync ()    bei NAudioConvert.ConvertAudio.Playfile (Stream ms) in C: \ Entwicklung \ Spikes \ NAudioConvert \ ConvertAudio.vb: Zeile 78

Alle Tipps in Bezug auf das? oder vielleicht eine andere Bibliothek, dass ich verwenden könnte einige sehr kleine MP3-Dateien in WAV für die Wiedergabe zu konvertieren wäre toll.

War es hilfreich?

Lösung

ist es nur, wenn Sie die WaveFileWriter entsorgen, dass es zurück in den WAV-Header und Füllungen in der richtigen Anzahl von Datenbytes geht (spart tut es bei jedem Aufruf zu Writedata). Doch für Ihre Bedürfnisse, dann werden Sie am besten dran macht eine benutzerdefinierte WaveFileWriter werden, dass die Daten-Bytes Wert auf dem neuesten Stand ist zu halten. Ich betrachte das Hinzufügen dieser als Option für eine zukünftige Version von NAudio

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top