2012-03-26 97 views
0

我想将现有的Windows应用程序移植到Unix上,并且我无法找到有关Unix音频系统的某些信息,如果有人能分享他们的经验,我将不胜感激。Unix音频系统API

如何我:

  • 得到连接到电脑上的所有声卡?
  • 获取声卡通道数?
  • 每通道获取当前声卡的音量?
  • 挂钩到音频系统并计算正在播放的声音的响度(类似于Windows 7音量控制 - 用绿色条显示“响度”)。 (我明白涉及的数学,但看看系统是否已经提供了类似的包)?

是否可以为每个Unix系统执行此操作,还是必须以不同的方式为每个系统执行此操作(在FreeBSD,Ubuntu上)?

+1

这里是一个类似的问题与答案: http://stackoverflow.com/questions/9345766/playing-sound-in-c-using-native-system-calls/9349574#9349574 – 2012-03-27 15:48:31

回答

1

Unix有一大堆音频框架。您可能最终不得不以平台/框架相关的方式进行一些工作。我建议开始使用PortAudio/PortMixer。它被Audacity使用,所以希望它可以覆盖你的大部分需求。但它应该支持像Mac OS X,Linux-Alsa,Linux-OSS,FreeBSD这样的最常见的Unix变体,我想还有更多。

1

在各种仍然存在的Unix中有很多不同的竞争声音API。

Linux似乎已经聚合在PulseAudio API上用于通用声音输出;我的理解是,这与DirectSound具有类似的功能。您还应该调查ALSA(这是一个仍被广泛使用的较低级别的API)和JACK,它与PulseAudio的级别相同,但专门用于录制演播室类型的工作。这些应该适用于所有合理的最新Linux发行版。 (注:如果您正试图为Linux分发编译代码因为你做错了第三方软件供应商分发源,并且分布将编译它。)

文档说: PulseAudio和JACK也可以在FreeBSD上工作,但我不知道他们在那里流行。我不知道任何其他BSD或其他专有的Unix。

远离任何称自己为“OSS”的东西,除非你别无选择。这最初只是用于Linux的旧的,过时的内核级声音API的名称。最近尝试复活它(“OSSv4”)AFAICT只能设法产生一个僵尸。

+0

你碰巧知道什么是获得声音流(用数字信号处理计算响度)还是当前音频的更好声音“响度”的最简单方法(哪个API)? – blejzz 2012-03-26 15:52:08

+0

不,对不起,我从来没有实际编程过任何这些。 – zwol 2012-03-26 16:14:10