【发布时间】:2010-10-10 16:42:10
【问题描述】:
我想获得声级,所以我可以在录制声音时在我的 SDL 应用程序(平台是 Linux)中显示它。我怎样才能做到这一点?我在我的应用程序中使用 FMOD API,但为了录制,我使用 SoX(分叉并使用 exec() 来设置它 - 可能这可以做得更好,但我不知道如何:()。我应该使用一些SoX、FMOD API的函数,或者直接访问/dev/dsp获取声音数据?
【问题讨论】:
我想获得声级,所以我可以在录制声音时在我的 SDL 应用程序(平台是 Linux)中显示它。我怎样才能做到这一点?我在我的应用程序中使用 FMOD API,但为了录制,我使用 SoX(分叉并使用 exec() 来设置它 - 可能这可以做得更好,但我不知道如何:()。我应该使用一些SoX、FMOD API的函数,或者直接访问/dev/dsp获取声音数据?
【问题讨论】:
如果您愿意,您可以在 FMOD 中进行录制。可以使用 FMOD API,例如 System::recordStart 和 System::getRecordDriverInfo。 FMOD 提供了记录示例,您可以将其用作解决方案的基础。
特别是为了获取声音级别,如果您想将它作为运行时的事情来做,您可以使用 Channel::getWaveData 它将为您提供当前正在播放的音频的快照,为此您需要播放录音数据。
或者,如果没有播放,您也可以使用 Sound::lock / Sound::unlock 来访问录制的声音数据。
一旦您可以通过任一方法访问声音数据,您就可以读取这些值以获取声级/峰值信息。
【讨论】:
不,至少您应该使用“安全”的 ALSA API。但是您应该考虑使用更高级别的东西,例如 Gstreamer 或 PulseAudio。
【讨论】: