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

swift - 使用 AVAudioPCMBuffer 的 AVAudioPlayerNode - 不播放音频

我正在尝试从 PCMBuffer 播放音频。当我运行以下代码时,由于某种原因,没有播放音频。我没有收到任何错误。

样本audioData值:

为什么什么都没有播放?随时询问更具体的细节。

0 投票
1 回答
881 浏览

swift - 播放 AVAudioPCMBuffer 的片段

我正在为 iOS 应用程序创建这个简单的录音机和编辑器界面:

记录器/编辑器界面截图

音频被记录到用于创建波形的浮点数组中。录制后,我将浮动数据复制到一个AVAudioPCMBuffer用于播放的AVAudioPlayerNode. 我可以从一开始就播放缓冲区,但我不知道如何只播放缓冲区的一部分。该scheduleSegment功能仅适用于文件。

0 投票
1 回答
433 浏览

swift - 将使用 AudioKit 录制的音频文件读取到 AVPlayer 实例中时出现问题

我的情况是需要导出使用 AudioKit 录制的音频文件,然后稍后重新导入以通过AVAudioPCMBuffer.

下面是我用于从 AudioKit 导出的代码:

这是我稍后尝试将该音频文件读回我的 macOS 应用程序的地方,并填写一个AVAudioPCMBufferfile我要读取的音频文件在哪里):

但是,我一直收到以下错误:

异常(-50):“缓冲区数量错误”

[avae] AVAEInternal.h:103:_AVAE_CheckNoErr: [AVAudioFile.mm:445:-[AVAudioFile readIntoBuffer:frameCount:error:]: (ExtAudioFileRead(_imp->_extAudioFile, &ioFrames, buffer.mutableAudioBufferList)): 错误 -50

这与导出和导入音频时使用的文件格式无关。

但是,如果我使用从应用程序内部直接读取的这个 .wav 文件,它确实可以正常工作。

有没有人知道为什么我似乎无法将音频文件中的数据读入AVPCMBuffer.

0 投票
0 回答
511 浏览

swift - 快速从 mp3 文件中提取 CMSampleBuffer

我正在尝试CMSampleBuffer从 mp3 文件中提取以将其用于录制视频。这是代码:

首先从 mp3 获取 PCM 缓冲区

我如何将 pcm 缓冲区转换为 cmsamplebuffer 的代码:

但我总是得到错误代码:-12771: kCMSimpleQueueError_RequiredParameterMissing. 这是我的音频格式和样本缓冲区的日志:

知道为什么CMSampleBufferSetDataBufferFromAudioBufferList总是返回错误

0 投票
0 回答
102 浏览

ios - 从现有的实际音频文件生成相位反转音频文件以快速取消其语音

我正在通过音频引擎录制声音并创建一个文件名my_file.caf并尝试制作另一个文件,这将使其相位相反,我可以取消它的单声道声音。

但是当我进行一些操作和计算时,它会反转其正弦波,但也会反转声音。

0 投票
0 回答
248 浏览

swift - AVAudioPCMBuffer 只能获取带有静态/白噪声的音频

感谢您抽出时间阅读我的问题。

目标

我从 UDP 服务器获取了一些音频数据,我必须将它们转换为 PCM 格式才能实时播放实际的音频。

询问:

由于某种原因,使用下面的代码不适用于我的 AVAudioPCMBuffer 格式,并且没有产生声音或内存错误。但是,我可以通过将 NSData 转换为 AVAudioPCMBuffer 来从扬声器播放白噪声/静态。我有一种接近答案的感觉,因为每当我对着麦克风说话时,我都会听到不同频率的静电声。

这是我的代码:

1.将接收到的数据转换为PCM Buffer:

2. 将转换后的缓冲区播放到播放器中。

我不明白这是什么问题?您的帮助将不胜感激。谢谢 :)

编辑1:

正如@Vladimir 的建议,我更新了我的代码如下:

编辑2:

正如@Vladimir 的建议,我将我的更新configAudioEngine()如下:

这解决了我的异常,我正在接收数据。但是没有声音传来。它是静音的。

0 投票
2 回答
1829 浏览

arrays - 使用 AVAudioPCMBuffer int16 数据调度缓冲区

我正在尝试以 pcmInt16 数据格式播放来自网络的字节数组中的音乐。

如何设置 byteArray 的前 512 个数据?我尝试了这样的事情,但它不起作用: memcpy(pcmBuffer.audioBufferList.pointee.mBuffers.mData, byteArray[0..<512], len * 2)

0 投票
0 回答
424 浏览

swift - 播放音频流PCMBuffer、AVAudioPCMBuffer

我的任务是接收音频流并播放它。在服务器端,音频采用 pcmInt16 编码(16bit,44100 采样率,2 通道)

我接受字节流并在 AVAudioPCMBuffer 中编码,然后在 playMusicFromBuffer 函数中将其传递给播放器。

起初,在AVAudioPCMBuffer中编码,我使用了bytesToAudioBuffer方法(参数与服务器设置不匹配),但是,应用程序启动并且在转换时没有崩溃,但仍然没有声音。

接下来,我尝试通过更改设置并编写 bytesToAudioBuffer16 函数来解决此问题。但是在这里启动应用程序时,当我将流转换为 AVAudioPCMBuffer 并将其传输到播放器时,会出现错误: [reason __NSCFString * "[[busArray objectAtIndexedSubscript: (NSUInteger) element] setFormat: format error: & nsErr]: returned false, error Error Domain = NSOSStatusErrorDomain Code = -10868 \" (null) \ "" 0x0000600000d2e00.

问题是如何解决这种情况。我需要修复 bytesToAudioBuffer16 或 playMusicFromBuffer。如果是这样,怎么做?

0 投票
1 回答
728 浏览

floating-point - javascript中的音频Float32到Int16转换

我正在尝试使用编译成 wasm 并从 Javascript 调用的 C 库在 WebRtc 中创建噪声消除过滤器。

我能够使用 WebAudioApi 捕获 pcm 音频并使用 wasm 处理帧。

我的库只接受 int16 中的输入。

这是我的代码:我尝试了 2 种方法

方法一:

该方法的优点是它保留了字节数,因此不会有数据丢失

但是当我将它转换回 Float32Array 时,浮点值超出了音频缓冲区限制值 [-1,1]。所以没有音频数据被推送。

方法二:

这种方法的优点是它转换回范围 [-1,1] 内的值。

但是由于字节丢失,音频质量(失真)受到很大影响。

无论如何都可以保留字节并有效地转换 float32 - int16 并返回。

Anyhelp 将是巨大的。

0 投票
0 回答
222 浏览

swift - 将 PCM 缓冲区转换为 AAC ELD 格式,反之亦然

我无法将线性 PCM 缓冲区转换为压缩的 AAC ELD(增强型低延迟)缓冲区。

我从这个问题中得到了一些用于转换为 ilbc 格式的工作代码: AVAudioCompressedBuffer to UInt8 array,反之亦然

这种方法效果很好。

我将格式的输入更改为:

转换为压缩缓冲区工作正常,我能够将缓冲区转换为 UInt8 数组。

但是,转换回 PCM 缓冲区不起作用。转换回缓冲区的输入块如下所示:

convert 方法后的错误块触发并打印出“输入缓冲区中剩余的位太少”。此外,似乎输入块只被调用一次。

我尝试了不同的代码,这似乎是最常见的结果之一。我也不确定问题是否出在从 pcm 缓冲区到 uint8 数组的初始转换中,尽管我得到一个 UInt8 数组,每 0.1 秒填充 768 个值(有时数组最后包含几个零,这不会以 ilbc 格式发生。

问题:

1.从 pcm 缓冲区到 uint8 数组的初始转换是否使用正确的方法完成?packetCapacity、capacity 和 maximumPacketSize 是否有效?-> 再次,似乎工作

2.我在转换回 pcm 缓冲区时遗漏了什么吗?另外,我是否以正确的方式使用变量?

3.有没有人在项目中不使用 C 的情况下实现了这种转换?

** 编辑:** 我还使用了这篇文章中的方法: Decode AAC to PCM format using AVAudioConverter Swift

它适用于 AAC 格式,但不适用于 AAC_LD 或 AAC_ELD