问题标签 [avaudiopcmbuffer]
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.
swift - 如何使用 AVAudioPCMBuffer 播放声音
我不能用 AVAudioPCMBuffer 播放声音(虽然我可以用 AVAudioFile 播放)。我得到了这个错误。
错误:AVAudioBuffer.mm:169:-[AVAudioPCMBuffer initWithPCMFormat:frameCapacity:]:所需条件为假:isCommonFormat
下面是我的代码,非常感谢您的帮助。
swift - 将 AVAudioPCMBuffer 转换为 NSData 并返回
如何转换AVAudioPCMBuffer
为NSData
?如果应该这样做
那么如何计算bufferLength
呢?
以及如何转换NSData
为AVAudioPCMBuffer
?
ios - 在 iOS (Swift) 中通过 AVAudioPlayerNode 播放缓冲区时出现声音故障 *在模拟器中工作,但在设备上不工作
当使用 AVAudioPlayerNode 安排一个短缓冲区以在触摸事件(“Touch Up Inside”)上立即播放时,我注意到在测试时播放时会出现可听见的故障/伪影。iOS 模拟器中的音频完全没有故障,但是当我在实际的 iOS 设备上运行该应用程序时,播放时会出现声音失真。声音失真随机发生(触发的声音有时听起来很棒,而其他时候听起来失真)
我尝试过使用不同的音频文件、文件格式,并使用 prepareWithFrameCount 方法准备播放缓冲区,但不幸的是结果总是一样的,我想知道可能出了什么问题。
为了清晰和简单起见,我将代码简化为全局变量。任何帮助或见解将不胜感激。这是我第一次尝试开发 iOS 应用程序,也是我在 Stack Overflow 上发布的第一个问题。
更新:
好的,我想我已经确定了失真的来源:节点的音量在输出时太大并导致削波。通过在我的 startEngine 函数中添加这两行,失真不再发生:
但是,我仍然不知道为什么我需要降低输出 - 我的音频文件本身没有剪辑。我猜这可能是 AVAudioPlayerNodeBufferOptions.Interrupts 实现方式的结果。当一个缓冲区中断另一个缓冲区时,是否会因中断而导致输出音量增加,从而导致输出削波?我仍在寻找关于为什么会发生这种情况的可靠理解。如果有人愿意/能够对此提供任何澄清,那就太好了!
objective-c - 用于音乐文件的 AVAudioPCMBuffer
我一直在尝试在我的 SpriteKit 游戏中播放音乐,并AVAudioPlayerNode
通过AVAudioPCMBuffer
s. 每次我导出我的 OS X 项目时,它都会崩溃并给我一个关于音频播放的错误。在过去的 24 小时内我的头撞到墙上后,我决定重新观看WWDC 会话 501(见 54:17)。我对这个问题的解决方案是演示者使用的方法,即将缓冲区的帧分成更小的部分,以分解正在读取的音频文件。
我目前的问题是播放器只播放读入缓冲区的最后一帧。我正在播放的音乐只有 2 分钟长。显然,这太长了,不能直接读入缓冲区。每次readIntoBuffer:
在循环内调用方法时是否都会覆盖缓冲区?我对这些东西很陌生……我怎样才能播放整个文件?
如果我不能让它工作,那么在多个SKScene
s 上播放音乐(2 个不同的文件)的好方法是什么?
ios - 如何从音频文件中删除静音
我使用 AVAudioEngine 录制了一个音频文件:
现在我想获取该文件的样本并删除文件开头和结尾的静音部分。我正在使用缓冲区来读取文件:
然后我试图访问音频文件样本的浮点值:
如果我 NSLog sampleLevel 总是返回 0.0。我究竟做错了什么?我是以正确的方式获取音频文件的样本还是我完全错了?
swift - 如何快速修改 AVAudioPCMBuffer
有人知道如何修改 AVAudioPCMBuffer 对象的缓冲区内容吗?我想做以下事情:
- 将音频文件加载到 AVAudioPCMBuffer - 这有效。
- 修改 AVAudioPCMBuffer 的样本数据。- 我在这里卡住了
- 将 AVAudioPCMBuffer 写入文件 - 这也有效。
如文档中所述,不幸的是 AVAudioPCMBuffer.floatChannelData 是只读的。此外 itAudio.audioBufferList.memory.mBuffers.mData 似乎是只读的。编译器显示:不能通过下标赋值:下标是 get-only。目前我正在使用音频工具箱,它适用于我的目的。不过我想问一下是否有人知道做这项工作的(最佳实践)方式?非常感谢您的帮助!!!
ios - 将单声道 AVAudioPCMBuffer 写入立体声 AVAudioFile
我正在使用 AVAudioEngine 录制音频,并将其保存为声音文件。
用户可以选择导入音频文件,然后如果愿意,他们可以在此文件的末尾继续录制。我通过将导入的文件读取到 AVAudioPCMBuffer 中来获取音频数据,然后将其写入我正在录制的文件中。如果导入的文件是立体声的(因为我正在写入的文件也是立体声的),这非常有用。但是如果导入的文件是单声道的,当我尝试将 AVAudioPCMBuffer 写入文件时,代码会崩溃,这仅仅是因为通道数不匹配。
是否可以将处理格式设置为立体声的单声道 AVAudioPCMBuffer 读入 av AVAudioFile?我可以将缓冲区转换为立体声吗?
这是我如何从导入的文件中获取音频缓冲区的示例:
这就是我使用 AVAudioEngine 创建要写入的 AVAudioFile 的地方:
最后,这就是我将音频缓冲区写入文件的方式:
如果我将音频转换为立体声,一切正常。
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 时,仍然缺少正确的通道。
avaudioengine - AVAudioFile 不能在 AVAudioEngine 中播放
我正在尝试使用 AVAudioEngine 播放 AVAudioFile。代码大部分取自 Apple Developer 的在线视频并改编,但没有播放。花了一些时间浏览论坛,但似乎没有任何亮点。
我有两种方法。第一个调用标准打开文件对话框,打开音频文件,分配一个 AVAudioBuffer 对象(我稍后会用到)并用音频数据填充它。第二个设置 AVAudioEngine 和 AVAudioPlayerNode 对象,将所有内容连接起来并播放文件。下面列出了这两种方法。
我检查了功能正在执行,音频引擎正在运行并且音频文件已被读取。我也尝试过使用不同的音频文件格式,包括单声道和立体声。有任何想法吗?
我正在运行 Xcode 7.3.1。