0

我试图使用表达式编码器捕捉我的摄像头和系统音频,摄像头工作正常,但系统音频只是沉默。c# - 表达式编码器 - 不捕获系统音频

我按照这里的教程:CodeProject Expression Encoder Tutorial但它不适合我。

列出音频设备时,会列出“扬声器...”,“麦克风...”和“耳机...”(因为它们位于系统托盘中的播放设备中),但如果尝试从扬声器或耳机录音我什么都没有得到(如果我选择那个,我可以获得麦克风音质)。

这里是代码我使用:

job = new LiveJob(); 

LiveDeviceSource lds = job.AddDeviceSource(ledv[0], leda[1]); 

FileArchivePublishFormat fileOut = new FileArchivePublishFormat(); 
fileOut.OutputFileName = string.Format("C:\\Users\\user1\\Desktop\\testvideo-{0:yyyyMMdd_hhmmss}.wmv", DateTime.Now); 

job.PublishFormats.Add(fileOut); 

lds.PreviewWindow = new PreviewWindow(new System.Runtime.InteropServices.HandleRef(panel1, panel1.Handle)); 

job.StartEncoding(); 

job.ActivateSource(lds); 

没有人有任何想法,为什么它不记录系统的音频?在它应该工作之前,有没有其他需要处理的设置?

谢谢你的时间。

编辑:

我决定打印出来job.CurrentAudioVolume当它看到的编码,如果这是否会改变,但它始终只是在0.1坐在如果我改变音频设备的麦克风,此值上升当有声音时(如预期)。所以它看起来像SDK无法录制我的系统音频(来自扬声器或耳机)。

回答

0

好吧我用一位同事的帮助把它整理出来。

基本上耳机/扬声器等只是输出设备,所以你需要安装一个环回驱动器作为输入设备。

有一个免费的Sourceforge/Github伟大的工程。只要选择它作为音频设备。有一个小问题,我有一个调用job.StopEncoding()的“记录”/“停止”按钮。但是选择StopEncoding()挂接Window的环回音频驱动程序,我猜是因为环回驱动程序没有正常停止,但是如果调用job.RemoveDeviceSource(deviceSource);在调用StopEncoding()之后,然后在下一个StartEncoding()之前重新添加它可以正常工作。