问题标签 [audiobufferlist]

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 回答
434 浏览

ios - 是什么导致 ExtAudioFileRead 使 ioData->mBuffers[0].mDataByteSize 为负数?

当我经常停止和开始音频播放并通过ExtAudioFileRef对象在 AAC 音频文件中来回寻找很多时,就会出现问题。在少数情况下,这种奇怪的行为表现为ExtAudioFileRead

有时它会将这些数字分配给mDataByteSize唯一AudioBufferAudioBufferList

在十六进制中,这些数字具有模式0xFC....00

编码:

输出:

该问题发生在 iOS 7 上的 iPhone 4S 上。我无法在模拟器中重现该问题。

0 投票
0 回答
573 浏览

ios - 放大音频缓冲区 xcode ios

我有如下所示的 AudioBuffer。它可以通过扬声器播放。我想知道在玩之前放大这些缓冲区的方法。我该如何修改?

0 投票
4 回答
2061 浏览

ios - 如何在 iOS 中使用 aubio 框架?

我正在尝试检测 iOS 中音频文件的节拍、音高、起始和快速傅里叶变换 (FFT),我发现aubio提供了这些功能,并且iOS 框架也可用。

到目前为止,我正在使用The Amazing Audio Engine来接收这样的音频Core Audio数据AudioBufferList

我可以从这里使用音频AudioBufferList检测节拍、音高、起始和快速傅立叶变换 (FFT)吗?如何检测?如果我走错了路,请给我任何建议?

0 投票
2 回答
746 浏览

ios - 将远程 IO 音频单元从一部 iPhone 流式传输到另一部

我发现了 3-4 个示例,这些示例显示了远程 IO 音频单元的用法。像这里这里等。他们从 iPhone 麦克风中转换模拟音频数据并将它们数字化,然后播放它们。到目前为止一切正常,现在我对音频单元有了很好的了解。

现在,我不想在同一设备上播放存储在 AudioBufferList 中的录制音频,而是将其流式传输到另一台设备。

下面是我如何将 AudioBufferList 转换为 nsdata 并将其发送到另一台设备。

下面是我如何将 nsdata 转换回接收设备上的 AudioBufferList 并将其复制到 tempBuffer 然后播放。

但在另一台设备上,我什么也听不到。

请指导可能出现的问题。

0 投票
2 回答
980 浏览

ios - 将浮点数组写入音频文件

我有一个名为 _recordingSamples 的 Float32 值数组,我希望将其写入音频文件。_recordingLength 的值约为 390000。我正在使用以下代码:

所有状态都返回 0,文件被创建(4 个字节),但 Quicktime 不会打开它并返回错误 -12842,编译器会传递以下消息:

有人知道出了什么问题吗?提前致谢。

0 投票
1 回答
119 浏览

ios - 减少 ExtAudioFileRead 的输出幅度

我希望在将 ExtAudioFileRead 的输出重新保存到文件之前降低其输出幅度。这是我的原始代码:

我曾想过循环通过 convertData.mBuffers[0].mData,将每个样本乘以一个分数,但它的类型是“void”。任何想法都会很棒,感谢阅读!

编辑:

这是我现在要走的路:

输出文件绝对不是输入的缩放版本,但我认为这可能是由于上面的变量选择不正确。

0 投票
1 回答
786 浏览

ios - Swift 中的 AudioBufferList

我正在尝试将以下代码转换为 Swift:

无论我尝试什么,我似乎都无法遍历 audioBuffer 列表。有人有答案吗?

0 投票
0 回答
968 浏览

ios - 将 AudioBufferList 中的 NSData 加载到 AVAudioPlayer

从委托方法中,我在录制音频时收到了 AudioBufferList。我正在尝试从 AudioBufferList 收集数据并将其保存,以便将其加载到我的 AVAudioPlayer 中,但 AVAudioPlayer 抛出错误,我无法播放录音。我需要能够在没有文件的情况下通过 AVAudioPlayer 播放音频,只需使用 AudioBufferList。

最初我将录音保存到文件中,然后将其加载到 AVAudioPlayer 中,但是使用这种方法,我无法附加到录音,而不必制作另一个音频文件,然后在附加后合并这两个文件。这花费了很多时间,我仍然希望能够在附加之间收听录音。所以现在我没有保存音频文件,这样我就可以继续追加它,直到我想保存它。这个问题是我从 AudioBufferList 保存的 NSData 没有正确加载到 AVAudioPlayer 中。

这是我收集 NSData 的代码:

当我尝试将 NSData 加载到 AVAudioPlayer 中时,出现以下错误:

错误:错误域 = NSOSStatusErrorDomain 代码 = 1954115647 “操作无法完成。(OSStatus 错误 1954115647。)”

任何帮助,将不胜感激。

谢谢,

0 投票
1 回答
1057 浏览

ios - 将 AudioBufferList 转换为 CMBlockBufferRef 时出错

我正在尝试使用 AVAssetReader 读取视频文件并将音频传递给 CoreAudio 进行处理(添加效果和内容),然后再使用 AVAssetWriter 将其保存回磁盘。我想指出,如果我将输出节点的 AudioComponentDescription 上的 componentSubType 设置为 RemoteIO,则可以通过扬声器正确播放。这让我确信我的 AUGraph 设置正确,因为我可以听到一切正常。我将 subType 设置为 GenericOutput,这样我就可以自己进行渲染并取回调整后的音频。

我正在阅读音频并将 CMSampleBufferRef 传递给 copyBuffer。这会将音频放入一个循环缓冲区,稍后将读取该缓冲区。

接下来我调用 processOutput。这将在 outputUnit 上进行手动重新编辑。当调用 AudioUnitRender 时,它会调用下面的playbackCallback,这就是我第一个节点上作为输入回调连接的内容。PlaybackCallback 从循环缓冲区中提取数据并将其馈送到传入的 audioBufferList 中。就像我之前所说的,如果将输出设置为 RemoteIO,这将导致音频在扬声器上正确播放。当 AudioUnitRender 完成时,它返回 noErr 并且 bufferList 对象包含有效数据。 当我调用 CMSampleBufferSetDataBufferFromAudioBufferList 虽然我得到 kCMSampleBufferError_RequiredParameterMissing (-12731)

我传入的 CMSampleBufferRef 看起来有效(下面是来自调试器的对象转储)

缓冲区列表如下所示

在这里真的很茫然,希望有人能帮忙。谢谢,

万一这很重要,我正在 ios 8.3 模拟器中调试它,音频来自我在 iphone 6 上拍摄的 mp4,然后保存到我的笔记本电脑。

我已阅读以下问题,但仍然无济于事,一切都无法正常工作。

如何将 AudioBufferList 转换为 CMSampleBuffer?

将 AudioBufferList 转换为 CMSampleBuffer 会产生意外结果

CMSampleBufferSetDataBufferFromAudioBufferList 返回错误 12731

核心音频离线渲染 GenericOutput

更新

我又看了看,注意到当我的 AudioBufferList 在 AudioUnitRender 运行之前看起来像这样:

mDataByteSize 是 numberFrames*sizeof(SInt32),也就是 512 * 4。当我查看在playbackCallback 中传递的AudioBufferList 时,列表看起来是这样的:

不太确定其他缓冲区的去向,或者其他 1024 字节大小...

如果当我完成给雷德纳的电话,如果我做这样的事情

并将 newbuff 传递给 CMSampleBufferSetDataBufferFromAudioBufferList 错误消失。

如果我尝试将 BufferList 的大小设置为 1 mNumberBuffers 或其 mDataByteSize 为 numberFrames*sizeof(SInt16) 我在调用 AudioUnitRender 时得到 -50

更新 2

我连接了一个渲染回调,以便在通过扬声器播放声音时检查输出。我注意到到扬声器的输出也有一个带有 2 个缓冲区的 AudioBufferList,输入回调期间的 mDataByteSize 是 1024,而在渲染回调中是 2048,这与我在手动调用 AudioUnitRender 时看到的相同。当我检查渲染的 AudioBufferList 中的数据时,我注意到 2 个缓冲区中的字节是相同的,这意味着我可以忽略第二个缓冲区。但是我不确定如何处理数据在渲染后的大小为 2048 而不是被接收时的 1024 的事实。关于为什么会发生这种情况的任何想法?在通过音频图之后,它是不是更多的是原始形式,这就是为什么大小加倍的原因?

0 投票
1 回答
622 浏览

c - Core Audio - 远程 IO 混乱

我无法解释 iOS 中 remoteIO audiounit 回调的行为。我正在设置一个带有两个回调的 remoteIO 单元,一个作为输入回调,一个作为“渲染”回调。我正在遵循与此美味像素教程中推荐的非常相似的 remoteIO 设置。这是相当长度的设置方法:

我在回调中遇到了奇怪的行为。首先,该playbackCallback函数根本没有被调用,尽管它的属性设置方式与教程中的相同(教程是由编写 Loopy 应用程序的人编写的)。

其次,输入回调有一个 ioData (audioBufferList) 参数,该参数应该为 null(根据文档),但在每个第二个回调中都在 null 和具有非 nil 值之间翻转。这对任何人都有意义吗?

此外,调用audiounitRender输入回调(我仍然不理解 API 逻辑和生命周期等方面的语义)会导致 -50 错误,这是非常通用的“坏参数”。这很可能是由于audiobufferlist交错/去交错、通道数等的无效“拓扑”......但是,我尝试了各种拓扑,但都没有导致错误。这也不能解释奇怪的 ioData 行为。这是供参考的功能:

我相信我的经验可能是由于一些简单的格式错误或可能在错误的示波器上使用了错误的总线或其他一些琐碎的事情(并且很容易在核心音频上下文错误中产生)。但是,因为我基本上对语义和生命周期流(方案?,我什至不知道该用什么词)没有直觉,所以我无法充分调试它。我将非常感谢一位更有经验的核心音频程序员的帮助,这可能会对这种情况有所帮助。