【问题标题】:Get sound level from device while recording in C++在 C++ 中录制时从设备获取声级
【发布时间】:2010-10-10 16:42:10
【问题描述】:

我想获得声级,所以我可以在录制声音时在我的 SDL 应用程序(平台是 Linux)中显示它。我怎样才能做到这一点?我在我的应用程序中使用 FMOD API,但为了录制,我使用 SoX(分叉并使用 exec() 来设置它 - 可能这可以做得更好,但我不知道如何:()。我应该使用一些SoX、FMOD API的函数,或者直接访问/dev/dsp获取声音数据?

【问题讨论】:

    标签: c++ linux audio sox fmod


    【解决方案1】:

    如果您愿意,您可以在 FMOD 中进行录制。可以使用 FMOD API,例如 System::recordStart 和 System::getRecordDriverInfo。 FMOD 提供了记录示例,您可以将其用作解决方案的基础。

    特别是为了获取声音级别,如果您想将它作为运行时的事情来做,您可以使用 Channel::getWaveData 它将为您提供当前正在播放的音频的快照,为此您需要播放录音数据。

    或者,如果没有播放,您也可以使用 Sound::lock / Sound::unlock 来访问录制的声音数据。

    一旦您可以通过任一方法访问声音数据,您就可以读取这些值以获取声级/峰值信息。

    【讨论】:

    • 我尝试使用 FMOD,但我想即时获得 MP3 编码,据我了解,它在 Linux flatform 上的 FMOD 中不起作用。
    • FMOD 无法在编码方面提供帮助,通过使用 Sound::lock 和 unlock 您可以访问原始 PCM。如果您想将这些数据块提供给 lame 之类的东西,那绝对可以生成 MP3,但 FMOD 没有内置的编码支持。
    【解决方案2】:

    不,至少您应该使用“安全”的 ALSA API。但是您应该考虑使用更高级别的东西,例如 Gstreamer 或 PulseAudio。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      相关资源
      最近更新 更多