问题标签 [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.

0 投票
1 回答
1334 浏览

ios - 斯威夫特:AVAudioPCMBuffer vs AVAudioBuffer vs AVAudioCompressedBuffer

我目前正在使用 AVAudioPCMBuffer 在一个简单的游戏中播放 .wav 文件。但是,在查看它的文档时,我发现了另外两种我从未在其他任何地方见过的缓冲区,标题中的缓冲区:AVAudioBuffer 和 AVAudioCompressedBuffer。

我的问题是,我应该使用哪一个,为什么?我试图找出另外两个,但我找不到一个例子。任何帮助,将不胜感激!

0 投票
0 回答
592 浏览

ios - IOS 将 AVAudioPCMBuffer 的一部分复制到另一个

我有 AVAudioPCMBuffer ,我想将其中的一部分复制到其他缓冲区(从它的末尾剪掉一部分声音)

当我尝试播放 newPlayFile 时,它​​会播放静音(或根本不播放)我知道问题出在 for 循环中,这样做的正确方法是什么?

0 投票
0 回答
654 浏览

avaudiopcmbuffer - 如何使用 AVAudioConverter convertToBuffer:error:withInputFromBlock:

我想使用 AVAudioConverter 将 AVAudioPCMFormatFloat32 非交错 44.1 KHz 缓冲区转换为 AVAudioPCMFormatInt16 交错 48 KHz。

传入的 AVAudioPCMBuffer 有 800 个样本,我需要返回 1920 容量的 AVAudioPCMBuffer。

当我有一些音频但还不够时,块中提供的音频将转换为 outputBuffer。

当更多传入音频可用时,我再次调用 convertToBuffer 并重用相同的 outputBuffer。

问题是转换器而不是将转换后的音频附加到末尾,而是覆盖现有内容。

有没有办法在最后附加音频而不是覆盖它?

如果不是,我将不得不在返回任何传入的音频缓冲区之前等待获得请求数量的样本。

任何建议将不胜感激。

0 投票
1 回答
1412 浏览

ios - 将 Int16 写入 AVAudioPCMBuffer swift

我在 swift 中有一个 Data 对象,它是一个 Int16 对象的数组。由于某种原因,使用“.pcmFormatInt16”不适用于我的 AVAudioPCMBuffer 格式,并且没有产生声音或内存错误。最终,通过将 Int16 转换为浮点数并将其放到我的 AVAudioPCMBuffer 的两个通道上,我能够从扬声器播放白噪声/静电。我有一种接近答案的感觉,因为每当我对着麦克风说话时,我都会听到不同频率的静电声。我认为问题在于我没有将转换后的 Int16 转换为缓冲区 floatChannelData。

这是我的代码:

0 投票
1 回答
1071 浏览

ios - AVAudioPCMBuffer - 读取(进入缓冲区:AVAudioPCMBuffer)内存崩溃?(缓冲区溢出)

以下代码适用于我所有设备(iPhone、Apple Watch、模拟器)上持续时间短的音频文件:

let file = try! AVAudioFile(forReading: url!) let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: file.fileFormat.sampleRate, channels: file.fileFormat.channelCount, interleaved: false) let buf = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: UInt32(file.length)) try! file.read(into: buf!)

崩溃发生在try! file.read(into: buf!) 但是尝试读取 5 分钟例如长音频文件导致我的 Apple Watch 上运行崩溃(尽管适用于 Apple Watch 模拟器)。与Program ended with exit code: 0.

观察调试工具,显然这个过程在 Apple Watch 上比在 iPhone 上更费力。我试图在不同的线程、背景等上运行它,但无济于事。

我知道我可以将缓冲区发送到 iPhone 进行处理,但是我想看看(即使需要更长的时间)我是否可以严格从手表读取缓冲区。

0 投票
1 回答
925 浏览

ios - Swift AVAudioEngine AVAudioPCMBuffer 到 PowerLevel

我一直在做一个项目来创建一个显示麦克风功率级别的应用程序。我知道提供平均/峰值功率的 AVAudioRecorder 类,但我希望只能记录某些频段的功率电平。我使用 AudioUnitEQ 类来设置频段,并将其附加到 AVAudioEngine 并开始录制。目前,我一直在使用 installTap 方法来获取 AVAudioPCMBuffer,这是我卡住的地方。有没有办法将其转换为功率级别?另外,我的处理方法可能完全错误吗?

0 投票
1 回答
1044 浏览

ios - 将 AVAudioPCMBuffer 转换为 NSData

我目前正在尝试将音频样本从转换AVAudioPCMBufferNSData- 我已经查看了这个SO Post上接受的答案和来自 GitHub的这段代码,但似乎一些AVFAudioAPI 已经改变......下面是我的扩展AVAudioPCMBuffer

我看到Value of type 'UnsafePointer<AudioStreamBasicDescription>' has no member 'inTotalBitsPerChannel'. 到目前为止,我还没有找到任何其他方法来找出inTotalBitsPerChannel价值......任何帮助表示赞赏!

0 投票
2 回答
878 浏览

ios - How do I write AVAudioCompressedBuffer to an AAC file in iOS?

I've successfully converted the AVAudioPCMBuffers from AVAudioEngine into AVAudioCompressedBuffers with an AAC format. Now I'm trying to write those buffers to a file but don't know how to do it. AVAudioFile only accepts AVAudioPCMBuffers.

Any help would be greatly appreciated!

0 投票
1 回答
1196 浏览

ios - AVAudioCompressedBuffer 到 UInt8 数组,反之亦然

我想知道如何获取 AVAudioCompressedBuffer 的字节,然后从字节中重建 AVAudioCompressedBuffer。

下面的代码采用 AVAudioPCMBuffer,使用 AVAudioConverter 将其压缩为 AVAudioCompressedBuffer (iLBC) 并获取字节,然后将字节转换回 AVAudioCompressedBuffer (iLBC) 并解压缩回 AVAudioPCMBuffer 并播放缓冲区。将 AVAudioCompressedBuffer 转换为字节并返回时出现问题。如果我跳过此转换,音频将按预期播放。

我什至可以匹配compressedBuffer 和compressedBuffer2 的内容,这让我相信获取字节的机制并不完全正确。

压缩和解压缩函数

0 投票
1 回答
5281 浏览

ios - 使用 AVAudioConverter Swift 将 AAC 解码为 PCM 格式

如何在 Swift 上使用 AVAudioConverter、AVAudioCompressedBuffer 和 AVAudioPCMBuffer 将 AAC 转换为 PCM?

在 WWDC 2015 上,507 Session 说,AVAudioConverter 可以对 PCM 缓冲区进行编码和解码,显示了编码示例,但没有显示解码示例。我尝试解码,但有些东西不起作用。我不知道是什么:(

来电:

这是转换代码:

结果 AVAudioPCMBuffer 的数据为零。在消息中我看到错误: