2017-07-11 1 views
1

J'ai le client de chatbot fonctionnant avec le texte mais voudrait maintenant le changer en voix mais je ne suis pas sûr de savoir comment obtenir le flux du micro pour la poste. Pour l'enregistrement audio J'utilise NAudio mais lors de l'envoi du flux de mémoire je reçois une erreur indiquantLex chatbot client C# avec la voix

System.IO.IOException: Impossible de flux près jusqu'à ce que tous les octets sont écrits .

Voici mon code:

private void recordAudio() 
     { 
      if (memoryStream == null) 
       memoryStream = new MemoryStream(); 
      sourceStream = new NAudio.Wave.WaveIn(); 
      sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); 
      waveIn = new NAudio.Wave.WaveInProvider(sourceStream); 
      waveWriter = new WaveFileWriter(new IgnoreDisposeStream(memoryStream), waveIn.WaveFormat); 
      sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable); 
      buff = new BufferedWaveProvider(waveIn.WaveFormat); 
      sourceStream.StartRecording(); 
      mytimer.Enabled = true; 

     } 
     private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e) 
     { 
      buff.AddSamples(e.Buffer, 0, e.BytesRecorded); 

      Console.WriteLine("test"); 
     } 
      void mytimer_Tick(object sender, EventArgs e) 
     { 

      if (sourceStream != null) 
      { 
       sourceStream.StopRecording(); 
       waveWriter.Flush(); 



       var amazonLexClient = new AmazonLexClient(Amazon.RegionEndpoint.USEast1); 
       var amazonPostRequest = new Amazon.Lex.Model.PostContentRequest(); 
       var amazonPostResponse = new Amazon.Lex.Model.PostContentResponse(); 
       amazonPostRequest.BotAlias = "voiceBot"; 
       amazonPostRequest.BotName = "voiceBot"; 
       amazonPostRequest.ContentType = "audio/l16; rate=16000; channels=1"; 
       amazonPostRequest.UserId = "user"; 
       amazonPostRequest.InputStream = memoryStream; 
       amazonPostRequest.UserId = "test"; 
       try 
       { 
        amazonPostResponse = amazonLexClient.PostContent(amazonPostRequest); 
        Console.WriteLine("Got a response"); 
       } 

       catch (Exception w) 
       { 
        Console.WriteLine("{0} Exception caught.", e); 
        Console.WriteLine(w.Message); 
       } 
+0

Essayez d'afficher les fichiers audio existants en premier, puis enregistrez. –

+0

Copie possible de [Impossible de fermer le flux jusqu'à ce que tous les octets soient écrits (API GoodData)] (https://stackoverflow.com/questions/19025834/cannot-close-stream-until-all-bytes-are-written-gooddata-api) –

Répondre