【发布时间】:2014-04-23 09:31:00
【问题描述】:
根据我之前的问题的cmets,我太宽泛了。所以,我会试着问一些具体的问题。
上下文
我想用C++开发一个非常简单的软件“Audacity”;换句话说,一种用于处理具有图形用户界面的音频文件的软件。例如,我想选择声音 A 的提取(起点 - 在 XX:XX 和 YY:YY 之间),然后剪切/复制它,然后粘贴到另一个声音 B(在 ZZ:ZZ),混合两个或更多声音等。
我发现了什么
如有错误请随时纠正我。
首先,我想我会使用 Qt 来制作图形用户界面。我已经看到 Qt 也可以管理音频文件,但是我觉得它不能真正操纵它们(剪切/粘贴、混合......)。
我不确切知道音频文件的工作原理,并且由于多种格式、比特率、声音混合,操作它们也可能很复杂......所以,我搜索了一个库以方便操作,我发现FMOD Ex API。
然后,我阅读了安装中包含的文档,并找到了一些答案......和一些问题。
- 麦克风录音
可以使用 System::recordStart 和其他一些方法。
- 在扬声器上播放歌曲
这是可能的,它是默认输出:System::playSound。
- 同时播放多个声音
我已经看到它可以通过多个 Channel 来完成:我们首先初始化一个具有多个通道的 System object,然后,我们可以播放多个音乐:对于每个通道,我们调用 System::createSound,然后调用 System::播放声音。我们还需要使用 System::update 进行更新。
- 保存声音
播放歌曲的方式相同:System::playSound。 我们必须在使用 System::setOutput(FMOD_OUTPUTTYPE_WAVWRITER) 之前更改输出。
- 保存多种声音的混合
我认为我们只需要设置正确的输出(wav 编写器),然后执行前面描述的“同时播放多个声音”步骤。
- 改变音量
这要归功于 Channel 的方法(setVolume)。
问题
- 播放/混合多种声音
前面描述的解决方案是正确的吗?
- 播放/混合多种声音:不要同时启动所有声音
正如您在 multitracks screen 上看到的那样,我们可以有多种声音,它们可以在不同的时间开始。例如,如何在文件 A 开始六秒后开始播放文件 B(也继续播放)?是函数 Channel->setDelay 吗?这个怎么运作 ? (我不确定是否了解 DSP 时钟值...)。
- 选择摘录(起点 - 在 XX:XX 和 YY:YY 之间)
我不确定这一点,也许我们可以使用 Channel:setPosition 和/或 Channel->setDelay ?但是,它是如何工作的? (我不确定是否了解位置值和延迟的 DSP 时钟值......)。
- 剪切/复制/粘贴
在这里,我真的不知道我该怎么做。
- Qt 和音频文件
你同意我不能使用 Qt 来完成所有这些操作吗?
谢谢
我希望我很清楚。如果您不理解问题,请不要犹豫。
【问题讨论】: