问题标签 [avaudioengine]
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.
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
音频数据的经验。您能提供的任何帮助将不胜感激。
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 时,仍然缺少正确的通道。
ios - 在某些设备上没有声音
我有一个使用 AVAudioSession 的音板应用程序。我将 AVAudioPlayerNodes 附加到 AVAudioEngine 以播放音频文件。
在 iOS 9.2 上一切都很好,但是我的很多评论说声音不起作用。我刚刚在运行 iOS 8 的 iPhone 5s 上进行了尝试,但声音不起作用。
我无法弄清楚为什么会这样,因为该应用程序在我更新之前运行良好。而且我没有对声音的产生方式进行任何重大更改。AVFoundation 和 iOS8 或我不知道的旧设备是否存在兼容性问题?
更新:当我减少连接到引擎的节点数量时,声音再次起作用。似乎有些设备无法处理我附加的节点数量?想知道是否有一种解决方法是制作多个引擎对象而不仅仅是一个?
ios - 检查节点是否已附加到 AVAudioEngine
我成功地将 AVAudioPlayer 节点附加到我的 AVAudioEngine。但是,我需要稍后检查这些节点是否已经附加到它(所以我不重新添加它们)。
引擎上是否有任何特定属性可以检查以查看其是否已附加?
ios - AVAudioEngine 崩溃并出现错误 !nodeimpl->HasEngineImpl()'
在播放已连接到引擎的 AVAudioPlayerNode 后,我将其分离(以降低 CPU 使用率)。但是,当我再次将该 AVAudioPlayerNode 重新附加到引擎并尝试播放它时(虽然它仍在播放之前),我遇到了错误并崩溃:
'必需条件为假:!nodeimpl->HasEngineImpl()'
我无法理解这告诉我什么。
注意:只有当我尝试再次播放 AVAudiPlayerNode 时才会发生崩溃,而之前的声音仍在播放(例如,我连续两次点击通过同一个 AVAudioPlayerNode 产生相同声音的按钮一个接一个)。
如果我等待上一次播放完成,它不会崩溃。
ios - 将音频文件保存在后台
我有一个应用程序可以在选择音高按钮时更改音频的音高,现在我正在使用installTapOnBus
它来保存文件,但是在我按下音高按钮后会调用此方法,因此只保存了部分音频,我想保存整个音频无论何时选择音高按钮,有什么办法
此方法用于播放音频
以及这种保存音高影响音频的方法
任何解决方法都会有帮助
swift - 插入/拔出耳机时 SKAudioNode() 崩溃
我正在使用 aSKAudioNode()
在我的游戏中播放背景音乐。我有播放/暂停功能,在插入耳机之前一切正常。根本没有声音,当我调用暂停/播放功能时出现此错误
AVAudioPlayerNode.mm:333:开始:所需条件为假:_engine->IsRunning() com.apple.coreaudio.avfaudio',原因:'所需条件为假:_engine->IsRunning()
有谁知道这意味着什么?
代码:
ios - 使用 AVAudioEngine 实时检测音高是否可行?
我正在尝试编写一个音乐应用程序,其中音高检测是这一切的核心。我已经看到了这个问题的解决方案以及 AppStore 上的应用程序。然而,它们中的大多数都已经过时了,我想做的是 Swift。我一直在寻找 AVAudioEngine 作为一种方法来做到这一点,但我发现缺少文档,或者我可能还不够努力。
我发现我可以像这样点击 inputNode 总线:
总线每秒被点击 2-3 次,每个点击缓冲区包含超过 16000 个浮点数。这些幅度样本来自麦克风吗?
文档至少声称它是从节点输出的:“缓冲区参数是从 AVAudioNode 的输出中捕获的音频缓冲区。 ”
是否可以使用 AVAudioEngine 实时检测音高,还是我应该以另一种方式进行?
ios - 应用过滤器(AVAudioUnitEQ)后保存音频文件,最后保存为mp3?
应用过滤器后保存音频文件让我非常沮丧。该过滤器仅适用于 AVAudioPlayerNode,这意味着在播放器中播放期间过滤器非常适合应用,但我该如何保存呢?过去 3 天我很挣扎,请任何帮助将不胜感激。我使用了以下这些代码,
engine = [[AVAudioEngine alloc] init];
这些是它工作正常的样本。但是我如何存储具有相同频率的音频文件?音频文件应为 mp3 格式。在苹果中,他们只将保存文件定位为 m4a。
ios - AVAudioEngine:一次启动一组 AVAudioPlayerNodes
我正在开发一个同时启动多个循环的应用程序,并且应该保持它们的同步。
使用以前的幼稚方法解决问题(不使用 AVAudioEngine),我发现以编程方式依次启动多个音频播放器会在调用之间产生足够的延迟,从而使结果无用;节拍听上去不同步。
我可以使用 AVAudioEngine 实现这种功能吗?
目前我正在将 AVAudioPlayerNodes 连接到混音器,并且我已经将缓冲区附加到它们并从那里控制输入。但是我可以让它们同时启动吗?
似乎在我调用播放之前节点不会开始产生声音,并且在引擎启动之前无法完成......