c# - BufferedWaveProvider 的问题
问题描述
我一直在为此绞尽脑汁。我已经查看了所有内容,但在这里找不到任何问题的答案。我试图完成的是一个功能,它允许我选择麦克风的输入卡和输出卡去收音机。此代码在初次尝试时有效,但是一旦我停止“传输”,您就会听到听起来像是双倍音频流的声音,并且它变得迟钝并最终因缓冲区满异常而崩溃。我不确定我在这里做错了什么。
public WaveOutEvent outputDevice = new WaveOutEvent() { DeviceNumber = -1 };
public WaveInEvent inputDevice = new WaveInEvent() { DeviceNumber = -1 };
public bool transmit = false;
public bool markerActive = false;
public bool alert1Active = false;
public SerialPort port = new SerialPort();
public string[] ports = SerialPort.GetPortNames();
private BufferedWaveProvider bufferedWaveProvider;
public string keyTransmitter()
{
string label;
if (transmit)
{
transmit = false;
port.DtrEnable = false;
port.RtsEnable = false;
label = "Transmit";
bufferedWaveProvider.ClearBuffer();
inputDevice.StopRecording();
inputDevice.Dispose();
outputDevice.Dispose();
outputDevice.Stop();
}
else
{
transmit = true;
port.DtrEnable = true;
port.RtsEnable = true;
label = "Transmitting";
bufferedWaveProvider = new BufferedWaveProvider(inputDevice.WaveFormat);
inputDevice.DataAvailable += OnDataAvailable;
inputDevice.StartRecording();
outputDevice.Init(bufferedWaveProvider);
outputDevice.Play();
}
return label;
}
public void OnDataAvailable(object sender, WaveInEventArgs args)
{
bufferedWaveProvider.AddSamples(args.Buffer, 0, args.BytesRecorded);
//bufferedWaveProvider.DiscardOnBufferOverflow = true;
}
解决方案
BufferedWaveProvider 有大小限制,所以如果它想要更多音频就必须更改它,但它最终会过载,所以我们将使用“DiscardOnBufferOverflow”,所以这里是代码示例:
注意:如果您使用的是单个复制品,则无需将 BufferedWaveProvider 更改为新的。
BufferedWaveProvider waveChannel = new BufferedWaveProvider(INFO HERE);
waveChannel.BufferDuration = new TimeSpan(0, 1, 0); //BufferDuration, 1 minute
waveChannel.DiscardOnBufferOverflow = true; //The name says
不需要再次使用“init”或“play”,因为 BufferedWaveProvider 在没有缓冲时会为 WaveOut 生成静音
来自谷歌翻译的英语
推荐阅读
- r - 基于 2 个条件的行值的条件减法
- python - 如何定期重复一个函数,直到在 Django 的后台成功?
- git - git pull 对文件名太长不起作用
- docker - 使用远程 docker 容器中的 vs 代码调试 webpack 开发服务器
- java - 通过 Java JDBC 从 Azure VM 连接 Azure SQL 数据库问题
- performance - 指数 vs 均匀 vs 精确平均响应时间
- javascript - 在父组件中测试子组件的按钮
- typescript - 获取只读数组元素成员的 TypeScript 类型
- python - 如何从外部类访问内部属性类?
- c++ - 基于不同字段的对象向量的排序函数