NAudio流播放器没有声音输出
NAudio stream player no sound output
我的 c# 代码如下,它没有给出任何错误,但没有声音输出 also.I 使用了来自 COM14 端口的腻子和监控数据流 fine.this 是我第一次使用 NAudio,所以不知道那我做错了什么。
WaveInEvent waveSource;
WaveOut waveOut = new WaveOut();
WaveFormat format = new WaveFormat(8000, 16, 1);
public int audioCounter = 0;
public byte[] buffer;
private BufferedWaveProvider _bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 1));
private void btn_scan_Click(object sender, EventArgs e)
{
string temppoteName = "COM14";
SerialPort tempSerialPort = new SerialPort(temppoteName, 57600, Parity.None, 8, StopBits.One);
tempSerialPort.Open();
tempSerialPort.DataReceived += new SerialDataReceivedEventHandler(comPort14_DataReceived);
}
private void comPort14_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Started Reciving :" + sp.PortName);
waveSource = new WaveInEvent();
waveSource.WaveFormat = new WaveFormat(8000, 16, 1);
waveOut.DesiredLatency = 100;
int x = sp.BytesToRead;
buffer = new byte[x];
sp.Read(buffer, 0, x);
_bufferedWaveProvider.AddSamples(buffer, 0, x);
if (audioCounter == 0)
{
waveOut.Init(_bufferedWaveProvider);
}
waveOut.Play();
++audioCounter;
}
我对您的代码有一些疑问
- 什么是 waveSource - 为什么每次从 COM 端口接收数据时都创建一个?
- 你应该只在 waveOut 上调用
Init
和 Play
一次,但你在收到的每个音频缓冲区上调用 Play
。
我推荐的解决此类问题的方法是使用 WaveFileWriter
将您收到的音频写入 WAV 文件。这样您就可以在常规波形编辑器中检查它,看看它是否包含您期望的信号。
我的 c# 代码如下,它没有给出任何错误,但没有声音输出 also.I 使用了来自 COM14 端口的腻子和监控数据流 fine.this 是我第一次使用 NAudio,所以不知道那我做错了什么。
WaveInEvent waveSource;
WaveOut waveOut = new WaveOut();
WaveFormat format = new WaveFormat(8000, 16, 1);
public int audioCounter = 0;
public byte[] buffer;
private BufferedWaveProvider _bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 1));
private void btn_scan_Click(object sender, EventArgs e)
{
string temppoteName = "COM14";
SerialPort tempSerialPort = new SerialPort(temppoteName, 57600, Parity.None, 8, StopBits.One);
tempSerialPort.Open();
tempSerialPort.DataReceived += new SerialDataReceivedEventHandler(comPort14_DataReceived);
}
private void comPort14_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Started Reciving :" + sp.PortName);
waveSource = new WaveInEvent();
waveSource.WaveFormat = new WaveFormat(8000, 16, 1);
waveOut.DesiredLatency = 100;
int x = sp.BytesToRead;
buffer = new byte[x];
sp.Read(buffer, 0, x);
_bufferedWaveProvider.AddSamples(buffer, 0, x);
if (audioCounter == 0)
{
waveOut.Init(_bufferedWaveProvider);
}
waveOut.Play();
++audioCounter;
}
我对您的代码有一些疑问
- 什么是 waveSource - 为什么每次从 COM 端口接收数据时都创建一个?
- 你应该只在 waveOut 上调用
Init
和Play
一次,但你在收到的每个音频缓冲区上调用Play
。
我推荐的解决此类问题的方法是使用 WaveFileWriter
将您收到的音频写入 WAV 文件。这样您就可以在常规波形编辑器中检查它,看看它是否包含您期望的信号。