首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多通道同步录制和回放

多通道同步录制和回放
EN

Stack Overflow用户
提问于 2016-11-14 10:21:06
回答 1查看 3.7K关注 0票数 0

我有一个usb音频板,支持asio驱动程序4输入和4输出。我想同时发送和接收数据。但目前我只能一次接收和发送数据到一个频道。我不知道如何在asioOut类中从c#库中设置它。

每个通道有一个AudioAvailable事件是可能的吗?类似于waveIn / waveOut类。我怎么才能做到这一点?

这是我的代码:

代码语言:javascript
复制
int sampleRate = 44100;
int channels = 4;

buffWaveProvider = new BufferedWaveProvider(new NAudio.Wave.WaveFormat(sampleRate, 32, channels));
asioOut = new AsioOut(radioForm.driverName);
asioOut.ChannelOffset = OUTdevID;
asioOut.InputChannelOffset = INdevId;
asioOut.AudioAvailable += OnAsioOutAudioAvailable;
asioOut.InitRecordAndPlayback(buffWaveProvider, channels, sampleRate);
asioOut.Play();

对于AudioAvailable事件,我必须为每个输入通道发送不同多播地址上的输入流:

代码语言:javascript
复制
public void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
    if (speakersOn && e.InputBuffers.Length != 0 && !monitorRequest)
    {
        byte[] buf = new byte[e.SamplesPerBuffer*4];
        for (int i = 0; i < e.InputBuffers.Length; i++)
        {
            Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer*4);
        }
        e.WrittenToOutputBuffers = true;
        udp4VoiceSend.Send(buf, buf.Length);
    }
}

是否有办法访问每个通道的输入缓冲区?

对于输出,我已经检查了n音频源代码,我看到可以将输出通道的数量设置为waveProvider.WaveFormat.Channels。因此,我假设在调用InitRecordAndPlayback方法时,IWaveProvider缓冲区应该有4个通道。

关于这个问题的堆积如山的帖子对我没有任何帮助。我都试过了。

https://stackoverflow.com/questions/22543513/naudio-using-asio-to-record-audio-and-output-with-a-guitar

NAudio Asio记录和回放

如何使用NAudio记录和播放AsioOut

NAudio AsioOut +套接字

谢谢!

更新:

我已经检查了N音频演示项目,Asio记录面板,似乎我一次只能听一个频道:

N音频驱动程序类按预期创建4个输入和4个输出缓冲区,但我无法访问它们。

在AsioRecordingPanel文件中,如果asioOut对象侦听1个通道,用户希望更改通道,则释放对象。

库限制还是驱动程序限制?

当我向asio缓冲区添加示例时,是否可以直接将数据发送到输出通道?

代码语言:javascript
复制
if (Main.buffWaveProvider != null)
Main.buffWaveProvider.AddSamples(data, 0, dataLen);

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 19:47:25

下面是我创建的一个简单例子,它访问输入和输出ASIO缓冲区,并对示例执行低级别操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40586400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档