J'essaie d'utiliser la bibliothèque NAudio pour faire une conversion InLine de certains effets sonores pour la lecture avec mon application en utilisant le Media Soundplayer pour la lecture réelle. (Je trouve la lecture NAudio est un peu nerveux pour la lecture directe, d'où la conversion)Convertir MP3 en WAV dans Memorystream pour la lecture avec System.Media.Soundplayer
Je ne veux vraiment pas extraire les fichiers sur disque à la place je voudrais les convertir en WAV en mémoire en utilisant un memoryStream.
Si vous regardez la source NAudio, il apparaît qu'elle n'écrit pas certaines données dans le flux tant qu'elles ne sont pas éliminées, ce qui invalide le MemoryStream. Devrais-je retravailler cela ou est-ce que je fais tout faux?
en utilisant le code suivant je reçois un invalidheader.
Si je remplace le code et écrire le fichier sur le disque et disposer ensuite recharger un tout cours d'eau est bien (mais il va à l'encontre un peu le but)
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: L'en-tête de vague est corrompu. à System.Media.SoundPlayer.ValidateSoundData (byte []) données à System.Media.SoundPlayer.LoadAndPlay (drapeaux Int32) à System.Media.SoundPlayer.PlaySync() à NAudioConvert.ConvertAudio.Playfile (ms Stream) dans C: \ Développement \ Spikes \ NAudioConvert \ ConvertAudio.vb: ligne 78
Des conseils à ce propos? ou peut-être une autre bibliothèque que je pourrais utiliser pour convertir de très petits fichiers MP3 en WAV pour la lecture serait super.
Merci Mark, je vais voir comment je peux y arriver :-) –