gpt4 book ai didi

c++ - 使用FMOD处理音频文件

转载 作者:行者123 更新时间:2023-12-03 02:13:02 28 4
gpt4 key购买 nike

根据我先前问题的评论,我太宽容了。因此,我将尝试提出一些具体问题。

上下文

我想用C++开发非常简单的软件“Audacity”版本;换句话说,该软件可用于通过图形用户界面处理音频文件。例如,我想选择声音A的摘录(起点-在XX:XX和YY:YY之间),然后剪切/复制,然后粘贴到另一个声音B(在ZZ:ZZ中),将两者混合或更多声音等

我发现了什么

如果观点有误,请立即纠正我。

首先,我想我将使用Qt制作图形用户界面。我已经看到Qt也可以管理音频文件,但我感觉它不能真正操纵它们(剪切/粘贴,混合...)。

我不确切知道音频文件的工作方式,由于多种格式,比特率,声音混合,操作它们也可能很复杂。因此,我搜索了一个库以方便操作,并找到了FMOD Ex API 。

然后,我阅读了安装随附的文档,并找到了一些答案……和一些问题。

  • 从麦克风录制

  • 使用System::recordStart和其他一些方法是可能的。
  • 在扬声器上播放歌曲

  • 这是可能的,并且它是默认输出:System::playSound。
  • 同时播放多种声音

  • 我已经看到可以使用多个Channel来完成:我们首先要初始化一个具有多个Channel的System对象,然后可以播放多种音乐:对于每个音乐,我们依次调用System::createSound和System::playSound。我们还需要使用System::update进行更新。
  • 保存声音

  • 播放歌曲的方式相同:System::playSound。
    我们只需要在System::setOutput(FMOD_OUTPUTTYPE_WAVWRITER)之前更改输出即可。
  • 保存多种声音的混合形式

  • 我认为我们必须设置正确的输出(wav writer),然后执行前面所述的“同时播放多个声音”步骤。
  • 更改音量

  • 这要归功于Channel的方法(setVolume)。

    问题
  • 播放/混合多种声音

  • 前面描述的解决方案正确吗?
  • 播放/混合多种声音:不要同时开始所有声音

  • 如您在 multitracks screen上看到的,我们可以有多种声音,它们可以在不同的时间开始。例如,如何在开始播放FILE A后六秒钟开始播放FILE B(该文件也会继续播放)?是功能Channel-> setDelay吗?这个怎么运作 ? (我不确定是否了解DSP时钟值...)。
  • 选择一个提取(起点-XX:XX和YY:YY之间)

  • 我不确定这一点,也许我们可以使用Channel:setPosition和/或Channel-> setDelay吗?但是,它是如何工作的? (我不确定是否了解位置值和DSP时钟值的延迟...)。
  • 剪切/复制/粘贴

  • 在这里,我真的不知道该怎么办。
  • Qt和音频文件

  • 您是否同意我无法使用Qt进行所有此类操作?

    谢谢

    我希望我清楚。如果您不了解任何问题,请不要犹豫。

    最佳答案

    我对Qt不熟悉。我的经验是使用Java。即使这样,我也可以提出一些想法。就混合音频而言,并涉及多种格式,我认为最好的途径是计划将所有有用的声音文件转换为选定帧速率的PCM值(从-1到1)。值可以是浮点数或 double 数。 (我实际上在我的Java调音台中使用了ints,尽管短裤足以满足16位编码的要求。)

    然后,从每个轨道上将相应的(时间上的)值以数字方式相加以进行混合,或者进行其他形式的操作并不是那么困难。然后将结果转换回您正在使用的播放所需的特定格式,例如,用于“CD品质”的16位44100 fpm立体声。对所有数据采用单一格式也有助于制作图形界面工具和显示。

    此项旨在帮助您解决问题,而不是为您的问题提供完整的解决方案。

    关于c++ - 使用FMOD处理音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466873/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com