我正在 iPhone 上开发一个音乐混合应用程序。它将混合音乐,用户可以从中创作新音乐。我需要录制这最后的音乐。我用 AVAudiorecorder 来录制这个。但没有改变。它可以录制麦克风的声音,但我需要录制应用程序的声音。

我使用音频队列回调函数来录制音频。但是,当应用程序运行时,我可以听到应用程序中的音频,但听不到录制的音频中的任何声音。录音没有问题,因为我可以听到通过麦克风录制的音频。但我需要一个离线录音机,它可以录制iPhone的音频输出,而不是通过麦克风输入的音频。我需要一个可以使用 iPod touch(无麦克风)录制音频的录音机。

有什么帮助吗?

有帮助吗?

解决方案

我通过另一种方式找到了解决方案。我使用了由两个音频单元组成的音频图。数字混音器和输出音频单元。我创建了具有六个通道的混音器,以便我可以同时演奏六种乐器。当用户创作音乐时,我将保存内容,并在离线录制期间将保存的乐器排序到混音器。

为了获得更好的性能,我将在加载新音频或乐器文件时停止音频图。加载文件后,录音将再次恢复。

在混音器的输入播放功能中,根据输入总线编号,音频数据包将被馈送到混音器。在输出音频单元的输入播放中,分配一个新的缓冲区来存储混音器输出。混音器输出是使用音频渲染功能创建的。由于我没有修改音频输入缓冲区,因此应用程序外部不会有声音。我终于有了一个离线录音机。

脚步

  1. 使用录制和播放模式创建音频会话
  2. 使用混音器和音频输出单元创建音频图。
  3. 配置混音器通道或输入总线编号(音频流的数量)。
  4. 创建混音器和音频单元的输入播放方法。
  5. 配置音频单元输入和输出总线的源和目标音频格式。
  6. 使用目标格式创建音频文件(对于 AAC 编码,检查 AAC 编码支持)。
  7. 获取音频文件并开发一种方法来为指定通道提供音频数据包。
  8. 在混音器的音频输入播放中配置音频文件获取。
  9. 在输出单元的音频输入播放中,使用音频渲染函数在新的音频缓冲区中获取混音器输出。将音频缓冲区存储到打开的音频文件中。
  10. 使用音频图停止方法暂停录制,并使用音频图启动方法恢复录制。在此间隔期间配置新的声音文件获取。
  11. 最后停止录音并关闭音频文件。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top