上面代码报错 提示 CS1061:"MMDevice"未包含"DeviceNumber"的定义 并且找不到可接受第一个"MMDevice"类型参数的可访问扩展方法”DeviceNumber"(是否缺少 usin 指今或程序集引用?
时间: 2023-07-02 22:16:01 浏览: 169
非常抱歉,再次犯了错误。MMDevice 类确实没有 DeviceNumber 属性。如果你想输出到指定的设备,可以在获取系统中所有音频设备的过程中,记录每个设备的设备 ID,然后在 WaveOutEvent 构造函数中传入该设备的设备 ID。以下是修正后的代码:
```csharp
using System.Speech.Synthesis;
using NAudio.CoreAudioApi;
using NAudio.Wave;
// 初始化 SpeechSynthesizer 对象
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
// 初始化要输出的文本
string textToSpeak = "Hello, world!";
// 获取系统中所有的音频输出设备
var outputDevices = new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);
int deviceNumber = 0;
// 输出到每个音频设备上
foreach (var outputDevice in outputDevices)
{
// 创建 AudioClient 对象
var audioClient = outputDevice.AudioClient;
// 获取设备 ID
string deviceId = outputDevice.ID;
// 创建播放器对象
var waveOut = new WaveOutEvent();
waveOut.DeviceNumber = deviceNumber;
// 初始化 WaveFormat 对象
var waveFormat = audioClient.MixFormat;
// 将文本转化为音频流
var stream = new MemoryStream();
synthesizer.SetOutputToWaveStream(stream);
synthesizer.Speak(textToSpeak);
// 播放音频流
stream.Position = 0;
var waveStream = new RawSourceWaveStream(stream, waveFormat);
waveOut.Init(waveStream);
waveOut.Play();
// 增加设备编号
deviceNumber++;
}
```
这段代码会获取系统中所有的音频输出设备,然后使用 MMDevice 类的 ID 属性获取设备 ID,使用 WaveOutEvent 对象播放音频。同时,使用 RawSourceWaveStream 将文本转化为音频流,使用 WaveOutEvent 对象输出到每个音频设备上。在 WaveOutEvent 构造函数中传入设备编号,即可输出到指定的设备上。
阅读全文