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

swift - 如何将内存中的 mp3 数据加载到 Swift 中的 AVAudioPCMBuffer 中?

我有一个将 mp3 文件读入 AVAudioPCMBuffer 的类方法,如下所示:

但是,我现在需要能够在不使用文件系统的情况下将相同的 mp3 信息从内存(而不是文件)读取到 AVAudioPCMBuffer 中,其中信息保存在 Data 类型中,例如使用表单的函数声明

如何才能做到这一点?我已经查看是否存在从保存 mp3 信息的数据到 AVAudioPCMBuffer 的路由(例如通过 AVAudioBuffer 或 AVAudioCompressedBuffer),但还没有看到前进的方向。

0 投票
0 回答
63 浏览

ios - 增加 AVAudioPCMBuffer 的音量(标准化)

AVAudioPCMBuffer从麦克风接收到一个,我想在将缓冲区传递给SFSpeechAudioBufferRecognitonRequest. 最好的方法是什么?关于如何测量 的音量有很多答案AVAudioPCMBuffer,但我找不到关于如何修改其音量的答案。

这个问题在这里播放 AVAudioPCMBuffer 的片段提供了一种获取片段的方法AVAudioPCMBuffer,但我不确定如何修改它以增加音量。

我的代码:

0 投票
0 回答
82 浏览

audiokit - 使用 AudioKit 的 AVAudioPCMBuffer normalize 函数对多个音频文件进行归一化

我有一系列要标准化的音频文件,因此它们都具有相似的感知响度。出于测试目的,我决定改编AVAudioPCMBuffer.normalizeAudioKit 中的方法以适应我的目的。见这里实现:https ://github.com/AudioKit/AudioKit/blob/main/Sources/AudioKit/Audio%20Files/AVAudioPCMBuffer%2BProcessing.swift

我将每个文件转换为AVAudioPCMBuffer,然后reduce在该缓冲区数组上执行 a 以获得所有缓冲区的最高峰。然后我创建了一个新版本的 normalize,称为normalize(with peakAmplitude: Float) -> AVAudioPCMBuffer获取峰值幅度,计算 againFactor然后遍历floatDatafor eachchannel并将floatData乘以gainFactor。然后我将我的新风格称为我normalizepeak.amplitude所有reduce音频缓冲区的操作中获得的。

这有时会产生有用的结果。

这是有问题的实际代码:

三个问题:

  1. 我的方法对多个文件是否合理?
  2. 这似乎是使用“峰值归一化”与 RMS 或 EBU R128 归一化。这就是为什么当我给它一批 3 个音频文件并且其中 2 个正确地变大时,即使ffmpeg-normalize在同一批文件上使 1 个文件明显更安静,其中 1 个也变大了?
  3. 关于如何改变floatData跨倍数AVAudioAudioPCMBuffers以使它们具有相似的感知响度的任何其他建议?
0 投票
0 回答
36 浏览

ios - 将音频从 AVAsset 写入 AVAudioPCMBuffer

我有点迷茫,试图将我加载到 AVAsset 中的视频文件的音轨写入 AVAudioPCMBuffer。

我在 C 中找到了一些教程,但我只知道 swift。有人知道怎么做吗?

会很好!

0 投票
0 回答
148 浏览

ios - 将传入的音频原始数据写入 AVAudioFile 的 AVAudioPCMBuffer 并播放 AVAudioFile

我在具有以下属性的回调函数中接收音频原始数据包:

  • 每包 640 个样本
  • 32 kHz 采样率
  • 带符号的 16 位 PCM 编码
  • 单通道

换句话说,每个传入的音频数据包都是一个包含 640 个指向音频原始数据值的指针的数组。每个音频原始数据值的位深度为 2 字节(16 位),采用 PCM 编码。

我在接收传入的音频原始数据之前创建了一个 AVAudioFile。录制开始后,我将音频原始数据包保存到 AVAudioPCMBuffer 中,使用 AVAudioConverter 将 AVAudioPCMBuffer 的处理格式转换为 AVAudioEngine 主混音器节点的输出格式,并将转换后的 AVAudioPCMBuffer 写入 AVAudioFile。由于 AVAudioEngine 的主混音器节点的输出格式为 2 ch, 48000 Hz, Float32, non-interleaved,因此需要进行 AVAudioPCMBuffer 格式的转换。最后,一旦录音停止,我使用 AVAudioEngine 播放 AVAudioFile。

问题:播放 AVAudioFile 时,我对着麦克风说话时只听到白噪声。然而,白噪声的持续时间与我对着麦克风说话的时间长度相同,这似乎表明我已经接近解决方案,但还没有完全解决。

我在 Swift 5 中的代码如下:

1.创建AVAudioFile

2. 在回调函数中处理传入的音频原始数据

3. 录音停止后播放音频文件

我对使用 Swift 在 iOS 上进行音频处理非常陌生,非常感谢有关解决此问题的任何建议或提示。

非常感谢您提前提供的帮助。

0 投票
1 回答
65 浏览

ios - AVAudioPCMBuffer 内存管理

我正在使用通常的设置从设备的麦克风AVAudioEngine获取流。AVAudioPCMBuffersinstallTap(onBus:)

为了将音频流分发到程序的其他部分,我将缓冲区发送到类似于以下内容的组合发布者:

我开始怀疑缓冲区存在某种并发或内存管理问题,因为在其他地方使用缓冲区时,我遇到了一系列崩溃,表明缓冲区中的某些内部指针为 NULL(具体来说,我是vDSP.convertElements(of:to:)当我尝试使用 ) 从缓冲区中读取样本时看到崩溃floatChannelData

这些崩溃正在生产中并且相当罕见——我无法在本地重现它们。

我从不修改音频缓冲区,只读取它们进行分析。


我的问题是:是否可以放入AVAudioPCMBuffers组合管道?该类不会像我假设的AVAudioPCMBuffer那样保留/释放底层的内存吗?AudioBufferList这是一个根本有缺陷的方法吗?

0 投票
1 回答
31 浏览

avfoundation - 将 NSData 转换为 AVAudioPCMBuffer

我有一个数据流,特别是来自 MP3 流。为了将其转换为AVAudioPCBBuffer,我正在创建一个 AVAudioFormat 来描述它,如下所示:

打印格式时,输出为:

现在,当我尝试AVAudioPCMBuffer像这样初始化时:

我得到一个例外:

我究竟做错了什么?

谢谢

0 投票
1 回答
20 浏览

avfoundation - 无法初始化 AVAudioCompressedBuffer

我正在尝试AVAudioCompressedBuffer使用这种格式初始化一个:

像这样:

但我得到了这个例外:

我错过了什么?

谢谢

0 投票
0 回答
28 浏览

ios - 将视频文件加载到使用 AVAudioPCMBuffer swift 的缓冲区中

是否可以使用 AVAudioPCMBuffer 从视频文件中读取缓冲区?

应用程序崩溃说“缓冲区的格式与播放器 swift 不匹配”

0 投票
1 回答
18 浏览

buffer - STM32代码中4通道PCM数据缓冲区中buffer_data的提取及处理查询

我试图了解 ST(AMicArray_Microphones_Streaming)提供的一个 4 通道麦克风阵列代码。

在代码中,PCM 缓冲区数据通过此函数在 USB 上发送。在这段代码中,我实际上想对接收到的数据进行一些处理,然后我想在 USB 上发送它。我的问题是如何提取原始数据并进行处理?

对于初学者来说,这个主题似乎非常广泛,如果有人可以帮助我提供一些入门材料或指南,将不胜感激。