如何在 c# 中捕获 wpf window 或 cscore 输出的音频?
How do I capture the audio of a wpf window or cscore output in c#?
我使用 cscore 在 wpf 中制作了一个音乐播放器。现在,我想添加一项功能,以便我可以通过互联网将输出实时(如收音机)流式传输到音乐播放器的另一个实例。稍后我可以看到如何流式传输数据,但首先我需要知道如何获取音频输出的字节。我正在寻求帮助,因为我迷路了,我做了一些研究,除了如何流式传输桌面音频外什么也没发现。这不是解决方案,因为我想在 Discord 上闲逛时和一些朋友听同样的音乐,所以如果我流式传输桌面音频,他们除了音乐之外还会听自己的音乐。欢迎任何帮助。提前致谢!
我没有使用过cscore,我主要使用naudio 一个类似的库,可以方便地从声卡中获取音频。因此,我将尝试以一种允许您在 cscore 中找到所需内容的方式来回答。
在您的播放器代码中,您将从音频文件中提取数据。在 naudio 中,这是通过音频文件 reader 完成的。我认为它在 cscore 中称为 wavFileReader,此文件 reader 将音频文件转换为字节数组形式的音频样本流,然后使用字节数组将 WASAPI 输出以允许音频在声卡上播放。
您的流式传输系统的理想起点是在这两个进程的中间。因此,您需要获取包含样本的字节数组的副本,而不仅仅是将音频样本传递到声卡。您需要将这些数据流式传输给您的朋友。
从这里开始,您将需要了解压缩音频和流媒体协议(如 RTP),所有这些都可以在 C# 中完成。问题将是,因为它总是在音频中让您的数据流与声卡保持同步。每次 WASAPIOut 要求更多样本时,您需要准备好,否则音频会断断续续。
我希望这能帮助您指明正确的方向。其他有 cscore 经验的人可能有一些代码示例可以更直接地帮助您,我只是想为您指明正确的方向
我使用 cscore 在 wpf 中制作了一个音乐播放器。现在,我想添加一项功能,以便我可以通过互联网将输出实时(如收音机)流式传输到音乐播放器的另一个实例。稍后我可以看到如何流式传输数据,但首先我需要知道如何获取音频输出的字节。我正在寻求帮助,因为我迷路了,我做了一些研究,除了如何流式传输桌面音频外什么也没发现。这不是解决方案,因为我想在 Discord 上闲逛时和一些朋友听同样的音乐,所以如果我流式传输桌面音频,他们除了音乐之外还会听自己的音乐。欢迎任何帮助。提前致谢!
我没有使用过cscore,我主要使用naudio 一个类似的库,可以方便地从声卡中获取音频。因此,我将尝试以一种允许您在 cscore 中找到所需内容的方式来回答。
在您的播放器代码中,您将从音频文件中提取数据。在 naudio 中,这是通过音频文件 reader 完成的。我认为它在 cscore 中称为 wavFileReader,此文件 reader 将音频文件转换为字节数组形式的音频样本流,然后使用字节数组将 WASAPI 输出以允许音频在声卡上播放。
您的流式传输系统的理想起点是在这两个进程的中间。因此,您需要获取包含样本的字节数组的副本,而不仅仅是将音频样本传递到声卡。您需要将这些数据流式传输给您的朋友。
从这里开始,您将需要了解压缩音频和流媒体协议(如 RTP),所有这些都可以在 C# 中完成。问题将是,因为它总是在音频中让您的数据流与声卡保持同步。每次 WASAPIOut 要求更多样本时,您需要准备好,否则音频会断断续续。
我希望这能帮助您指明正确的方向。其他有 cscore 经验的人可能有一些代码示例可以更直接地帮助您,我只是想为您指明正确的方向