Ich versuche, Text in C# mithilfe der Microsoft Speech-Objektbibliothek in Audio zu konvertieren. Ich habe dies erfolgreich gemacht, wenn ich das Audio direkt in eine WAV-Datei speicherte, aber mein Hauptziel ist es, das Audio in einem Byte-Array zu speichern, das ich dann in die Antwort in asp.net schreiben kann (damit der Endbenutzer es herunterladen kann) ihre Maschine).Wie wav Byte-Array zu Antwort mit Microsoft Speech Object Library schreiben?
Wenn ich versuche, die WAV-Datei zu öffnen, die auf die heruntergeladene Antwort geschrieben wurde, wird nichts abgespielt und es wird ein Fehler angezeigt, wie Windows Media Player die Datei nicht öffnen kann.
Der folgende Code zeigt, was ich arbeite und was nicht.
Hat jemand irgendwelche Ideen von dem, was ich im zweiten Teil fehlen kann, wenn ich nur versuche, das Byte-Array als WAV in die Antwort zu schreiben?
////////////////////////////////////////////////
// THIS WORKS
//SpVoice my_Voice = new SpVoice(); //declaring and initializing SpVoice Class
//SpeechVoiceSpeakFlags my_Spflag = SpeechVoiceSpeakFlags.SVSFlagsAsync; // declaring and initializing Speech Voice Flags
//SpFileStream spFileStream = new SpFileStream(); //declaring and Initializing fileStream obj
//SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite; //declaring fileStreamMode as to Create or Write
//spFileStream.Open("C:\\temp\\hellosample.wav", spFileMode, false);
//my_Voice.AudioOutputStream = spFileStream;
//my_Voice.Speak("test text to audio in asp.net", my_Spflag);
//my_Voice.WaitUntilDone(-1);
//spFileStream.Close();
////////////////////////////////////////////////
////////////////////////////////////////////////
// THIS DOES NOT WORK
SpVoice my_Voice = new SpVoice(); //declaring and initializing SpVoice Class
SpeechVoiceSpeakFlags my_Spflag = SpeechVoiceSpeakFlags.SVSFlagsAsync; // declaring and initializing Speech Voice Flags
SpMemoryStream spMemStream = new SpMemoryStream();
spMemStream.Format.Type = SpeechAudioFormatType.SAFT11kHz8BitMono;
object buf = new object();
my_Voice.AudioOutputStream = spMemStream;
my_Voice.Speak("test text to audio!", my_Spflag);
my_Voice.WaitUntilDone(-1);
spMemStream.Seek(0, SpeechStreamSeekPositionType.SSSPTRelativeToStart);
buf = spMemStream.GetData();
byte[] byteArray = (byte[])buf;
Response.Clear();
Response.ContentType = "audio/wav";
Response.AppendHeader("Content-Disposition", "attachment; filename=mergedoutput.wav");
Response.BinaryWrite(byteArray);
Response.Flush();
////////////////////////////////////////////////
Ich denke, ich würde eine Lösung nur mit Sapi brauchen ... Haben Sie eins damit? – Yashasvi
Sie meinen, dass Sie Microsoft Speech Object Library verwenden sollten? Wenn ja, kann ich fragen, warum es so ist? –
bietet der Sprachsynthesizer eine asynchrone Möglichkeit, den gesuchten Text zurückzugeben? – Yashasvi