【问题标题】:CSCore loopback recording when muted静音时的 CSCore 环回录音
【发布时间】:2014-07-30 21:29:09
【问题描述】:

我正在使用CSCore.WasapiLoopbackCapture 来录制系统声音。但是当系统没有声音时,它根本不录音!例如,在播放音乐和录制音乐时,输出文件的持续时间小于曲目的持续时间。即使系统中没有声音,我也希望它继续录制,但我没有找到任何属性来控制这种行为。这是我的代码 sn-p:

WasapiCapture waveLoop = new WasapiLoopbackCapture();
waveLoop.Initialize();
waveLoop.DataAvailable += waveLoop_DataAvailable;
waveLoop.Stopped += waveLoop_Stopped;
waveLoop.Start();

【问题讨论】:

    标签: c# audio-recording cscore


    【解决方案1】:

    您的“问题”没有“好的”解决方案。但是你的问题已经被描述了here:

    另一个奇怪的是 WASAPI 只会在有活动流时将数据推送到渲染端点。当什么都没有播放时,就没有什么可捕捉的了。

    这意味着您对这种行为无能为力。如果没有播放任何内容,则不会捕获任何内容。最简单的解决方案是:

    但我特别喜欢的处理方式是运行silence.exe。这样就不会出现任何“什么都没有播放”的故障,因为总会有一些东西在播放。

    因此,请确保您的应用程序或任何其他应用程序静音。这将是一种确保您的应用程序记录静音而不是中断捕获的方法。

    【讨论】:

    • 谢谢。我应该在哪里找到这个silence.exe?不运行另一个程序集就不能在 .net 中实现吗?
    • 当然可以。例如,您可以使用 CSCore 来实现。
    • 你能给我一些提示吗?我是 CSCore 的新手!
    • 好吧。你基本上只需要实现一个新的 WaveSource。例如。像这样的东西:pastebin.com/9MYM3yFN。之后,只需按照本教程进行操作:cscore.codeplex.com/…。将return CodecFactory.Instance.GetCodec(@"C:\Temp\sound.mp3"); 替换为new SilenceGenerator()。就是这样。
    • 嘿!谢谢 thefiloe,只是为了在您的 pastebin 示例中添加它,我们必须将第 13 行:“get { throw new NotImplementedException(); }”替换为“get { return _waveFormat; }”。这很容易弄清楚,但乍一看并不那么明显
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2011-08-13
    • 2019-09-08
    • 2023-03-21
    • 2019-09-20
    • 2016-09-16
    相关资源
    最近更新 更多