c# – NAudio:使用ASIO用吉他录制音频和输出

c# – NAudio:使用ASIO用吉他录制音频和输出,第1张

概述我目前正在研究SR.设计项目是一个 Windows窗体应用程序,允许用户插入他们的吉他并实时创建扭曲并使用输入和输出播放,并自动将其选中到ASCII选项卡.目前我正在努力让实时听力部分正常工作,我对失真的记录和实现工作得很好,只是在使用ASIO时遇到了一些问题.我看过这篇文章 How to record and playback with NAudio using AsioOut,但它对我的问题没 我目前正在研究SR.设计项目是一个 Windows窗体应用程序,允许用户插入他们的吉他并实时创建扭曲并使用输入和输出播放,并自动将其选中到ASCII选项卡.目前我正在努力让实时听力部分正常工作,我对失真的记录和实现工作得很好,只是在使用ASIO时遇到了一些问题.我看过这篇文章 How to record and playback with NAudio using AsioOut,但它对我的问题没什么帮助,这是我的代码:

private BuffereDWaveProvIDer buffer;private AsioOut input;private AsioOut output;private voID ListenBtn_Click(object sender,EventArgs e){    input = new AsioOut(RecordInCBox.Selectedindex);    WaveFormat format = new WaveFormat();    buffer = new BuffereDWaveProvIDer(format);    buffer.discardOnBufferOverflow = true;    input.InitRecordAndplayback(buffer,1,44100);    input.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(AudioAvailable);    //output = new AsioOut(RecordInCBox.Selectedindex);    //output.Init(buffer);    input.Play();    //output.Play();}public voID AudioAvailable(object sender,AsioAudioAvailableEventArgs e){    byte[] buf = new byte[e.SamplesPerBuffer];    e.WrittenToOutputBuffers = true;    for (int i = 0; i < e.inputBuffers.Length; i++)    {        Array.copy(e.inputBuffers,e.OutputBuffers,1);        Marshal.copy(e.inputBuffers[i],buf,e.SamplesPerBuffer);        buffer.AddSamples(buf,buf.Length);    }}

目前它正在获取音频并将其推入缓冲区但输出无效.如果我将录制设置设置为在窗口上监听,我可以让它d吉他但是我觉得这是不必要的,因为我希望能够执行失真并将其视为输出.谢谢!

解决方法 您不需要在缓冲区中添加样本.缓冲区仅用于确定所需的输出通道数.
我这样做了:

[Dllimport("Kernel32.dll",EntryPoint = "RtlMoveMemory",SetLastError = false)]private static unsafe extern voID MoveMemory(IntPtr dest,IntPtr src,int size);private voID OnAudioAvailable(object sender,AsioAudioAvailableEventArgs e)    {        for (int i = 0; i < e.inputBuffers.Length; i++)        {            MoveMemory(e.OutputBuffers[i],e.inputBuffers[i],e.SamplesPerBuffer * e.inputBuffers.Length);        }        e.WrittenToOutputBuffers = true;    }

但这样做会感觉有点延迟和一点回声,我不知道如何解决它们.所以,如果你有任何想法我会在这里听.

总结

以上是内存溢出为你收集整理的c# – NAudio:使用ASIO用吉他录制音频和输出全部内容,希望文章能够帮你解决c# – NAudio:使用ASIO用吉他录制音频和输出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存