2012-11-11 2 views
1

je en C# et WinRT:flux d'enregistrer le fichier dans C# et WinRT

var stream = await speech.GetSpeakStreamAsync(SpeechText.Text, language); 

stream est un Windows.Storage.Streams.IRandomAccessStream

Je suis à nouveau completly C# et WinRT. Comment puis-je sauvegarder ce flux contenant un fichier wav dans un fichier? Merci à l'avance, Basilius

Répondre

6

Le IRandomAccessStream a une méthode appelée GetInputStreamAt http://msdn.microsoft.com/en-US/library/windows/apps/windows.storage.streams.irandomaccessstream

IInputStream inputStream = stream.GetInputStreamAt(0); 

Cela vous obtient un IInputStream.

L'interface IInputStream définit une seule méthode, ReadAsync, qui vous permet de lire des octets dans un objet IBuffer. Windows.Storage.Stream inclut également une classe DataReader que vous créez en fonction d'un objet IInputStream, puis lisez de nombreux objets .NET du flux ainsi que des tableaux d'octets. http://www.charlespetzold.com/blog/2011/11/080203.html, http://msdn.microsoft.com/library/windows/apps/BR208119

using (var stream = new InMemoryRandomAccessStream()) 
{ 
    // for example, render pdf page 
    var pdfPage = document.GetPage((uint)i); 
    await pdfPage.RenderToStreamAsync(stream); 

    // then, write page to file 
    using (var reader = new DataReader(stream)) 
    { 
     await reader.LoadAsync((uint)stream.Size); 
     var buffer = new byte[(int)stream.Size]; 
     reader.ReadBytes(buffer); 
     await Windows.Storage.FileIO.WriteBytesAsync(file, buffer); 
    } 
} 

maintenant vous avez un tampon contenant tous les octets lus.

vous pouvez maintenant enregistrer ce tampon dans un fichier http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html

var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("MyWav.wav", Windows.Storage.CreationCollisionOption.ReplaceExisting); 
await Windows.Storage.FileIO.WriteBytesAsync(file, buffer); 
+0

Merci beaucoup, il est tard donc je vais essayer demain. l'indice avec getiputstremat et datareader semble très utile. – basilius

+0

Merci beaucoup. Je vais essayer demain parce qu'il est tard. L'indice avec getinputstreamat et datareader semble très utile. Sur winrt system.io.filestream n'est pas disponible. Basilius – basilius

+0

J'ai mis à jour ma réponse. Je pensais que vous utilisiez winrt une partie d'une application de bureau, vous n'étiez pas particulièrement spécifique;) –

0

Je ne peux pas ajouter le code au commentaire, voici donc le code vb.net: Dim gesprochenesWort Comme Windows.Storage. Streams.IRandomAccessStream gesprochenesWort = Attendent Sprich.GetSpeakStreamAsync ("Das ist ein MODÈLE dE TEXTE", "de")

Dim Eingabestream As Windows.Storage.Streams.IInputStream = gesprochenesWort.GetInputStreamAt(0) 

    Dim Datenleser As New Windows.Storage.Streams.DataReader(Eingabestream) 
    Await Datenleser.LoadAsync(CUInt(gesprochenesWort.Size)) 

    'Dim Dateipuffer As Byte() = New Byte(CInt(gesprochenesWort.Size) - 1) {} 
    Dim Dateipuffer(gesprochenesWort.Size - 1) As Byte 

    Datenleser.ReadBytes(Dateipuffer) 

    Dim Dateiname As String = "MybestWav.wav" 

    Dim Datei = Await Windows.Storage.KnownFolders.MusicLibrary.CreateFileAsync(Dateiname, Windows.Storage.CreationCollisionOption.ReplaceExisting) 

    Await Windows.Storage.FileIO.WriteBytesAsync(Datei, Dateipuffer) 

, Un grand merci à vous.

Cordialement, Basilius