跨平台音频(Windows、Linux、MacOS)

问题描述 投票:0回答:1

有关 .NET 跨平台音频库的一些讨论已有 10 多年的历史。现在我们已经迁移到 .NET8 Core,我们有哪些选择?

为了清楚起见,我相信为功能添加一些上下文将是......

  • 列出输入/输出音频设备
  • 以用户定义的比特率/频率/通道打开输入/输出音频设备
  • 使用流对象(不是字节数组)与音频设备进行流式传输

很高兴拥有...

  • 来自多个流媒体源的流输入混合器
  • MP3 和 WAV 阅读器

这是我在筛选了几个废弃的项目后发现的……

  1. NAudio NAudio 似乎已针对 .NET Standard 进行了重写 - 好消息。我不确定它在 Linux/MacOS 和 Windows 上的效果如何。 MP3 支持吗?搅拌机?流?到目前为止,在我的测试中,他们的 GitHub 文档上发布的示例代码不起作用。此外,包的命名也很混乱,例如 NAudio.Core。这是 NAudio 库的“核心”吗?或者这是一个用于 .NET Core 的库? :)

NAudio 不起作用的示例... 来自:https://github.com/naudio/NAudio/blob/master/Docs/EnumerateOutputDevices.md

for (int n = -1; n < WaveOut.DeviceCount; n++)
{
    var caps = WaveOut.GetCapabilities(n);
    Console.WriteLine($"{n}: {caps.ProductName}");
}

for (int n = -1; n < WaveIn.DeviceCount; n++)
{
    var caps = WaveIn.GetCapabilities(n);
    Console.WriteLine($"{n}: {caps.ProductName}");
}

因此,当文档不正确时,NAudio 的使用信心很低。

  1. 认知服务.语音.音频 我注意到该库在使用 Microsoft 认知语音服务时访问音频设备。这似乎是认知服务包中一个被忽视的功能。有各种比特率/频率配置的跨平台音频输入和输出类。 参考:https://learn.microsoft.com/en-us/dotnet/api/microsoft.cognitiveservices.speech.audio?view=azure-dotnet

按照微软一贯的风格,没有太多关于如何使用它的文档。现有的文档围绕使用语音服务展开,而提及 Audio 类是事后才想到的。但对于 .NET 8 Core 跨平台音频解决方案来说,它看起来很有前途。

  1. PortAudioSharp 这是 PortAudio 库的包装器。 NuGet 包具有适用于 MacOS、Linux64 和 Win64 的本机库。它缺少 Linux-ARM64,但这很容易解决。

参考:https://github.com/csukuangfj/PortAudioSharp2

要获取 ARM64 Linux 的 libportaudio.so,只需执行以下操作...

sudo apt-get install libasound2-dev

git clone https://github.com/PortAudio/portaudio.git

cd portaudio

./configure --with-alsa

make -j4

echo "1) find the libportaudio.so in  lib/.libs/"
echo "2) rename libportaudio.so.2.0.0 to libportaudio.so"

*注意:我在 Pi4 上使用 -j4 来使用 4 个核心。 Ubuntu 控制台模式下 2 GB 内存足够。如果出现“内存不足”错误,请删除 -j4 选项。

我对 PortAudio 的体验很好,但它缺乏许多编解码器功能。它仅适用于原始输入/输出音频,但跨平台很好。将 PortAudio 与 WAV 和/或 MP3 库相结合可能足以满足您的用例。

理想情况下,我希望某个混音器能够同时播放多个声音文件。这可能需要多个流。我还没有走到那一步。我会向您提供更多反馈。

  1. 微软 PSI 参考:https://github.com/microsoft/psi/wiki/Audio-Overview 这看起来很有趣。这是微软的另一个跨平台音频库。我认为它唯一的问题是它是一个更大框架的一部分。理想情况下,最好使用库的音频部分,但相反,它附带了一堆其他东西。

图书馆是否可以分离可能值得探索。

  1. 其他 NuGet 中的几个 ooooooold 音频包已经 5 年多没有更新了。在我的研究中,我没有找到足够的证据在这里提及它们,因为很长一段时间没有任何修订。

所以我的问题是 - 你们都使用什么来实现 .NET 8 Core 的跨平台音频选项?

c# .net-core audio cross-platform .net-8.0
1个回答
0
投票

sdcsd sdgvd dsgsd dsgsdd dssvs scsd

© www.soinside.com 2019 - 2024. All rights reserved.