我正在使用Microsoft语音合成,并希望将输出重定向到我选择的输出音频设备。
到目前为止,我有以下代码:
SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
speechSynthesizer.SpeakAsync("Yea it works!");目前我正在使用:
speechSynthesizer.SetOutputToDefaultAudioDevice();但我真的想把它寄到我选择的设备上。我正在寻找一个如何指导我所选择的输出设备的切分例子。我看到我可以用:
speechSynthesizer.SetOutputToWaveStream();这需要一个“流”,但我不知道如何喂养它。
谢谢。
发布于 2017-05-08 06:25:34
您可以创建一个MemoryStream并将其附加到CSCore的WaveOut类。WaveOut需要一个IWaveSource参数,因此您可以使用CSCore的MediaFoundationDecoder从SpeechSynthesizer转换波形流。我制作了一个小型控制台应用程序来说明:
using System;
using System.IO;
using System.Speech.Synthesis;
using CSCore;
using CSCore.MediaFoundation;
using CSCore.SoundOut;
namespace WaveOutTest
{
class Program
{
static void Main()
{
using (var stream = new MemoryStream())
using (var speechEngine = new SpeechSynthesizer())
{
Console.WriteLine("Available devices:");
foreach (var device in WaveOutDevice.EnumerateDevices())
{
Console.WriteLine("{0}: {1}", device.DeviceId, device.Name);
}
Console.WriteLine("\nEnter device for speech output:");
var deviceId = (int)char.GetNumericValue(Console.ReadKey().KeyChar);
speechEngine.SetOutputToWaveStream(stream);
speechEngine.Speak("Testing 1 2 3");
using (var waveOut = new WaveOut { Device = new WaveOutDevice(deviceId) })
using (var waveSource = new MediaFoundationDecoder(stream))
{
waveOut.Initialize(waveSource);
waveOut.Play();
waveOut.WaitForStopped();
}
}
}
}
}https://stackoverflow.com/questions/43791428
复制相似问题