问题标签 [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 回答
63 浏览

ios - 以编程方式启用按钮需要几秒钟

我正在使用 AVFoundation 并使用 AVAudioPlayerNode 创建一个快速应用程序。我在播放时禁用播放按钮,并在播放器的完成部分启用它,但按钮保持透明超过 10 秒。该按钮可用,并且我的 print("complete") 立即显示,因此视图似乎没有更新。这是我的代码:

我试过以下没有运气:

0 投票
0 回答
128 浏览

objective-c - 如何使用 AVAudioPlayerNode 保存文件?

我使用avaudioplayernode对音频制作了一些效果。然后我想保存结果。我尝试这样做:

但是保存文件是错误的。我认为将输出设置为 NSData 是错误的步骤。但我不知道另一种方法。并尝试这样做。如何保存新文件?

0 投票
1 回答
2473 浏览

ios - 将单声道音频数据传递给 AVAudioEnvironmentNode

我正在尝试使用AVAudioEnvironmentNode为我正在开发的游戏制作 3D 空间化声音。文档指出,“重要的AVAudioEnvironmentNode是要注意,只有与环境节点具有单声道连接格式的输入才会被空间化。如果输入是立体声,则音频会通过而不被空间化。目前连接格式超过 2 的输入不支持频道。” 我确实发现情况确实如此。当我将具有两个通道的音频缓冲区加载到 anAudioPlayerNode并将节点连接到 anAVAudioEnvironmentNode时,输出声音不是空间化的。我的问题是,如何将单声道数据发送到AVAudioEnvironmentNode

我尝试.wav使用正弦波数据创建单声道文件Audacity以及以AVAudioPCMBuffer编程方式加载正弦波数据。我发现无论哪种方式,当我创建单通道音频缓冲区并尝试将缓冲区加载到AudioPlayerNode. 时,我的程序崩溃并出现以下错误:

2016-02-17 06:36:07.695 测试场景 [1577:751557] 06:36:07.694 错误:
[0x1a1691000] AVAudioPlayerNode.mm:423:ScheduleBuffer:所需条件为 false:_outputFormat.channelCount == buffer.format.channelCount 2016-02-17 06:36:07.698 测试场景 [1577:751557] *** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为假:_outputFormat.channelCount == 缓冲区.format.channelCount'

检查AVAudioPlayerNode输出总线确实表明它需要 2 个通道。我不清楚如何改变它,或者即使它应该改变。

我规定我通常很少有处理AVFoundation音频数据的经验。您能提供的任何帮助将不胜感激。

0 投票
2 回答
2627 浏览

swift - AVAudioPCMBuffer 以编程方式构建,不以立体声播放

我正在尝试在 Swift 中以编程方式填充 AVAudioPCMBuffer 以构建节拍器。这是我正在尝试构建的第一个真正的应用程序,所以它也是我的第一个音频应用程序。现在我正在尝试不同的框架和方法来准确地循环节拍器。

我正在尝试构建一个具有度量/条长度的 AVAudioPCMBuffer,以便我可以使用 AVAudioPlayerNode 的 scheduleBuffer 方法的 .Loops 选项。我首先将我的文件(2 ch,44100 Hz,Float32,non-inter,*.wav 和 *.m4a 都有相同的问题)加载到缓冲区中,然后将该缓冲区逐帧复制到 barBuffer 中,并用空帧分隔。下面的循环是我完成此任务的方式。

如果我安排播放原始缓冲区,它将以立体声播放,但是当我安排 barBuffer 时,我只得到左声道。正如我所说,我是编程初学者,没有音频编程经验,所以这可能是我对 32 位浮点通道或这种数据类型缺乏了解UnsafePointer<UnsafeMutablePointer<float>>。当我快速查看 floatChannelData 属性时,描述听起来好像应该是复制两个通道。

编辑:i += 1感谢hotpaw2,我删除了明显的错误。播放 barBuffer 时,仍然缺少正确的通道。

0 投票
2 回答
570 浏览

ios - 检查节点是否已附加到 AVAudioEngine

我成功地将 AVAudioPlayer 节点附加到我的 AVAudioEngine。但是,我需要稍后检查这些节点是否已经附加到它(所以我不重新添加它们)。

引擎上是否有任何特定属性可以检查以查看其是否已附加?

0 投票
0 回答
389 浏览

ios - AVAudioEngine 崩溃并出现错误 !nodeimpl->HasEngineImpl()'

在播放已连接到引擎的 AVAudioPlayerNode 后,我将其分离(以降低 CPU 使用率)。但是,当我再次将该 AVAudioPlayerNode 重新附加到引擎并尝试播放它时(虽然它仍在播放之前),我遇到了错误并崩溃:

'必需条件为假:!nodeimpl->HasEngineImpl()'

我无法理解这告诉我什么。

注意:只有当我尝试再次播放 AVAudiPlayerNode 时才会发生崩溃,而之前的声音仍在播放(例如,我连续两次点击通过同一个 AVAudioPlayerNode 产生相同声音的按钮一个接一个)。

如果我等待上一次播放完成,它不会崩溃。

0 投票
0 回答
977 浏览

ios - 在 AVAudioPlayerNode 中检测文件的结尾

我已经使用苹果的 AVFoundation 设置了一个音频多轨播放器。我使用了九个连接到 AVAudioEngine 的 AVAudioPlayerNode,它们同时播放。在 spriteKit 中,在我的游戏场景中,我想检测任何 AVAudioPlayerNodes 中的文件结尾,以便我可以运行后续代码。我怎么做?不幸的是 AVAudioPlayerNodes 没有像简单的 AVAudioPlayer 类那样方便的功能。这是多轨功能:

0 投票
2 回答
467 浏览

ios - AVAudioFile 无法从文档目录中读取文件

这无法读取音频文件,它返回 audioFile nil。当我从 NSBundle 传递 url 时,对于相同的代码

它工作正常,任何建议。谢谢

0 投票
1 回答
370 浏览

ios - AVAudioEngine 调度样本准确的参数变化

我正在尝试使用 AVAudioPlayerNode 实例和其他 AUAudioUnits 的组合来创建一个应用程序,用于 EQ 和压缩等。一切都很好地连接起来,使用 API 的 V3 版本当然可以使配置更容易将节点连接在一起。然而,在播放过程中,我希望能够自动化参数更改,例如混音器上的增益,以便更改渐变(例如淡出或淡入。)并且确信更改是样本准确的。
我考虑过的一种解决方案是在一个节点(可能是引擎的混频器节点)上安装一个抽头,并在其中调整给定单元的增益,但由于抽头位于一个单元的输出上,所以总是为时已晚所需的效果(我认为)而不进行偏移计算,然后延迟我的源音频播放以匹配参数更改。我也查看了scheduleParameterBlock属性,AUAudioUnit但似乎我需要实现我自己的自定义单元来使用它而不是使用内置单元,即使它在

WWDC session 508 : " ...所以第一个参数做 schedule 是一个采样时间,如果音频单元已经宣传它是可以斜坡的,参数值可以随着时间斜坡。例如,Apple Mixer 这样做。最后一个两个参数,当然是函数参数,分别是要改变的参数的地址和新的参数值...."

也许这意味着 Apple Mixer 在内部使用它,而不是我们可以利用任何可扩展的功能。除了在本次演讲中附加的 Apple 示例中实现自定义音频单元之外,我找不到很多文档或示例。

我见过的其他潜在解决方案包括使用NSTimer,CADisplayLink或者dispatchAfter...,与从单元输出上安装的抽头块偏移相比,这些解决方案感觉更糟,样本精度也更低。

我觉得我错过了一些非常明显的东西,因为新的 AVAudioEngine API 的其他部分很有意义,而旧的 AUGraph API 允许更多地访问样本准确的排序和参数更改。

0 投票
1 回答
638 浏览

ios - AVAudioPlayerNode 在使用 stop 时会产生咔嗒声/爆裂声

我需要一些帮助。我正在将我的部分 IOS 应用程序代码从 OpenAL 转换为 AVAudioEngine,因为 OpenAL 在 IOS 9 中似乎无法正常工作。我遇到了以下问题。当我为 AVAudioPlayerNode 调用 stop 方法时,我会听到非常响亮的咔嗒声/爆裂声。这发生在设备和模拟器中。

我尝试使用不同的音频文件和格式以防万一,但这不是问题。

有任何想法吗?