问题标签 [avaudioplayernode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11364 浏览

ios - 通过 AudioEngine 使用音效

背景 - 我在 Apple 最近的 WWDC 上发布的以下视频列表中看到了一个名为“实践中的 AVAudioEngine”的视频,用于将音效应用于音频。 https://developer.apple.com/videos/wwdc/2014/

之后,我成功地使用以下代码更改了音频的音高:

据我了解,我使用 AudioEngine 将 AudioPlayerNode 与 AudioEffect 连接起来,然后我将其连接到输出。

我现在对在音频中添加多种音效感到好奇。例如,音高变化和混响。我将如何为音频添加多种音效?

另外,在 viewDidLoad 中附加和连接节点是否有意义,而不是我在 IBAction 中如何完成?

0 投票
6 回答
6318 浏览

swift - 如何使用 AVAudioPlayerNode 显示歌曲当前时间和持续时间

我正在使用 AVAudioPlayerNode 制作音频播放器并播放具有某些效果(延迟、音高变化、速率变化等)的歌曲,但我坚持显示歌曲当前时间和持续时间。AVAudioPlayerNode 似乎没有像 AVAudioPlayer.currentTime 或 .duration。

如果您能帮助我使用 AVAudioPlayerNode 显示当前时间和持续时间,我将不胜感激。

0 投票
5 回答
8894 浏览

swift - 如何使用 AVAudioPCMBuffer 播放声音

我不能用 AVAudioPCMBuffer 播放声音(虽然我可以用 AVAudioFile 播放)。我得到了这个错误。

错误:AVAudioBuffer.mm:169:-[AVAudioPCMBuffer initWithPCMFormat:frameCapacity:]:所需条件为假:isCommonFormat

下面是我的代码,非常感谢您的帮助。

0 投票
2 回答
7566 浏览

ios - 使用 AVAudioEngine 重复播放音频文件

我正在使用 Swift 和 Xcode 6 开发 iOS 应用程序。我想做的是使用 AVAudioEngine 播放音频文件,直到此时一切正常。但是我怎样才能不停地播放它,我的意思是,当它结束播放时它会重新开始?

这是我的代码:

在说我应该为此使用 AVAudioPlayer 之前,我不能,因为以后我将不得不使用一些效果并同时播放三个音频文件,还要重复播放。

0 投票
1 回答
2037 浏览

ios - 在 iOS (Swift) 中通过 AVAudioPlayerNode 播放缓冲区时出现声音故障 *在模拟器中工作,但在设备上不工作

当使用 AVAudioPlayerNode 安排一个短缓冲区以在触摸事件(“Touch Up Inside”)上立即播放时,我注意到在测试时播放时会出现可听见的故障/伪影。iOS 模拟器中的音频完全没有故障,但是当我在实际的 iOS 设备上运行该应用程序时,播放时会出现声音失真。声音失真随机发生(触发的声音有时听起来很棒,而其他时候听起来失真)

我尝试过使用不同的音频文件、文件格式,并使用 prepareWithFrameCount 方法准备播放缓冲区,但不幸的是结果总是一样的,我想知道可能出了什么问题。

为了清晰和简单起见,我将代码简化为全局变量。任何帮助或见解将不胜感激。这是我第一次尝试开发 iOS 应用程序,也是我在 Stack Overflow 上发布的第一个问题。

更新:

好的,我想我已经确定了失真的来源:节点的音量在输出时太大并导致削波。通过在我的 startEngine 函数中添加这两行,失真不再发生:

但是,我仍然不知道为什么我需要降低输出 - 我的音频文件本身没有剪辑。我猜这可能是 AVAudioPlayerNodeBufferOptions.Interrupts 实现方式的结果。当一个缓冲区中断另一个缓冲区时,是否会因中断而导致输出音量增加,从而导致输出削波?我仍在寻找关于为什么会发生这种情况的可靠理解。如果有人愿意/能够对此提供任何澄清,那就太好了!

0 投票
1 回答
1137 浏览

ios8 - AVAudioEngine 不正确的时间管理和 AVAudioPlayerNode 回调

我对 iOS8 中的新音频引擎有一个严重的问题。我有一个应用程序,它是用 AVAudioPlayer 构建的,我正试图找出一种迁移到新架构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重的基本障碍) :

我的头文件:

我的 m 文件(在 viewDidLoad 内):

上面的代码初始化引擎和一个节点,然后开始播放我正在使用的任何文件。首先打印出音乐文件的时长,播放完毕后,在回调函数中打印播放器的当前时间。这两个应该是相同的,或者在最坏的情况下,非常非常接近,但事实并非如此,这两个值之间的差异非常大,例如

难道我做错了什么?这应该很简单,我尝试过不同的文件格式、文件长度、数十个音乐文件,但差异总是在 1 秒左右或不到 1 秒。

0 投票
2 回答
3748 浏览

swift - SWIFT - 是否可以从 AVAudioEngine 或 AudioPlayerNode 保存音频?如果是,如何?

我一直在寻找 Swift 文档以保存来自 AVAudioEngine 的音频输出,但我找不到任何有用的提示。
有什么建议吗?

解决方案 感谢马特的回答,我找到了解决方法。这是通过 AVAudioEngine 传递音频后如何保存音频的示例代码(我认为从技术上讲它是以前的)

希望这可以帮助 !

要解决的一个问题:

有时,您的 outputNode 比输入短:如果您将时间速率加快 2,您的音频将缩短 2 倍。这是我现在面临的问题,因为我保存文件的条件是(第 10 行)

这里有什么帮助吗?

0 投票
2 回答
4169 浏览

ios - 斯威夫特:所需条件为假:文件!= nil

该应用程序运行良好,但只要我点击 ChimunkBut​​ton,应用程序就会崩溃并提供以下错误:

错误:AVAudioPlayerNode.mm:678:-[AVAudioPlayerNode scheduleFile:atTime:completionHandler:]:所需条件为假:文件!= nil 2015-05-10 17:24:25.269 Pitch Perfect[50278:1897012] *** 终止应用程序由于未捕获的异常“com.apple.coreaudio.avfaudio”,原因:“所需条件为假:文件!= nil”

0 投票
3 回答
2621 浏览

ios - 使用 AVAudioEngine 为低延迟节拍器安排声音

我正在创建一个节拍器作为更大应用程序的一部分,并且我有一些非常短的 wav 文件可用作单独的声音。我想使用 AVAudioEngine 因为 NSTimer 存在严重的延迟问题,而且 Core Audio 在 Swift 中实现似乎相当令人生畏。我正在尝试以下操作,但我目前无法实现前 3 个步骤,我想知道是否有更好的方法。

代码大纲:

  1. 根据节拍器的当前设置创建一个文件 URL 数组(每小节的节拍数和每节拍的细分;文件 A 代表节拍,文件 B 代表细分)
  2. 根据文件的速度和长度,以编程方式创建具有适当数量的静音帧的 wav 文件,并将其插入到每个声音之间的数组中
  3. 将这些文件读入单个 AudioBuffer 或 AudioBufferList
  4. audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)

到目前为止,我已经能够播放单个声音文件的循环缓冲区(步骤 4),但我无法从文件数组构造缓冲区或以编程方式创建静音,也没有在 StackOverflow 上找到任何答案解决这个问题。所以我猜这不是最好的方法。

我的问题是:是否可以使用 AVAudioEngine 安排一系列低延迟的声音,然后循环该序列?如果不是,在 Swift 中编码时,哪种框架/方法最适合调度声音?

0 投票
1 回答
222 浏览

ios - 如何使用 AVAudioSession 从音乐中删除/降低人声

我正在开发需要在播放音乐时录制音频的应用程序。我可以成功地用音乐录制声音。但我无法从音乐中删除人声。如果我能在人声上升时降低音量,那也很棒。

我在播放音乐时使用 AVAudioSession、AVAudioPlayerNode 进行录制。

任何帮助将不胜感激。