问题标签 [extaudiofileread]

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 投票
1 回答
524 浏览

ios - 使用 ExtAudioFileRead 循环 AAC 文件 - 错误?

使用 ExtAudioFileRead 在 iOS 上读取音频文件,似乎到达 eof 会完全冻结阅读器……例如,假设 _abl AudioBufferList 和 _eaf ExtendedAudioFileRef 已分配并正确配置:

没有错误,总是相同的行为,就像阅读器卡在文件末尾一样。ExtAudioFileTell 确认请求的搜索,顺便说一句。还尝试跟踪文件中的位置以仅请求 eof 处可用的帧数,结果相同:一旦读取最后一个数据包,seek 似乎没有任何效果。

在其他情况下愉快地寻求。

漏洞?特征?即将面掌?我非常感谢解决这个问题的任何帮助!

我正在 iPad 3 ( iOS7.1 ) 上对此进行测试。

干杯,

格雷佐

0 投票
1 回答
183 浏览

ios - Core Audio 大(压缩)文件播放和内存占用

因此,我设置了一个多通道混音器和一个远程 I/O 单元来混合/播放我从音频文件中读取的多个 PCM 数据缓冲区。对于我的游戏中的简短音效,我使用ExtAudioFileRead().

对于我的背景音乐,假设我有一个 3 分钟的压缩音频文件。假设它被编码为 mp3 @ 128 kbps(44,100 Hz 立体声),每分钟大约 1 MB,或总共 3 MB。未压缩,在记忆中,如果我没记错的话,我相信它大约是十倍。我可以使用与小文件完全相同的方法;我相信ExtAudioFileRead()会处理解码,在可用时使用(单个)硬件解码器,但我宁愿不一次读取整个缓冲区,而是定期从磁盘“流式传输”它。

想到的第一件事是往下走一步(非“扩展”)音频文件服务 API 和使用AudioFileReadPackets(),如下所示:

  1. 准备两个缓冲区 A 和 B,每个缓冲区都足够大,可以容纳(比如说)5 秒的音频。在播放过程中,从一个缓冲区开始读取并在到达末尾时切换到另一个缓冲区(即,它们构成了环形缓冲区的两半)。

  2. 将文件中前 5 秒的音频读入缓冲区 A。

  3. 将文件中接下来 5 秒的音频读入缓冲区 B。

  4. 开始播放(从缓冲区 A)。

  5. 一旦播放头进入缓冲区 B,将接下来 5 秒的音频加载到缓冲区 A。

  6. 一旦播放头再次进入缓冲区 A,将接下来 5 秒的音频加载到缓冲区 B。

  7. 转到#5

这是正确的方法,还是有更好的方法?

0 投票
0 回答
433 浏览

ios - AudioFileReadBytes 错误 -38

我有一个 .aif 文件,我尝试读取并添加到 char* 缓冲区。第一次阅读后,我得到 -38 错误。这是什么意思以及如何解决这个问题?这是我的代码:

0 投票
1 回答
119 浏览

ios - 减少 ExtAudioFileRead 的输出幅度

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

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

编辑:

这是我现在要走的路:

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

0 投票
1 回答
206 浏览

ios - 使用 ExtAudioFileRead 播放 .caf 音频文件不同步

我的应用程序对来自麦克风输入的音频进行大量数据处理。为了获得“演示模式”,我想基于本地 .caf 音频文件做同样的事情。我设法得到了音频文件。现在我正在尝试使用 ExtAudioFileRead 读取 .caf 文件,然后进行数据处理。

显然有一些我不明白的地方,或者我对 ExtAudioFileRead 做错了,因为这段代码根本不起作用。我有两个主要问题:

  1. 文件即刻播放。我的意思是 44'100 个样本显然不等于 1 秒。我的 3 分钟音频文件处理在几秒钟内完成......
  2. 在处理过程中,我需要更新 UI。所以我有一些 dispatch_syncprocessaudiorealtimeUpdate. ExtAudioFileRead 似乎真的不喜欢这并且它冻结了。谢谢你的帮助。
0 投票
0 回答
229 浏览

core-audio - 使用 kAudioUnitSubType_AudioFilePlayer 播放音频

我使用远程 I/O 音频单元和渲染回调成功地实现了音频文件播放器,其中我使用 ExtAudioFileRead 渲染音频帧。

此时我只是想知道使用 kAudioUnitSubType_AudioFilePlayer 而不是使用 ExtAudioFileRead 的渲染回调会有什么区别。这种方法有什么好处?

从苹果文档中我无法扣除差异。

0 投票
1 回答
95 浏览

objective-c - 使用 ExtAudioFile 结合循环缓冲区读取数据时会出现故障

我正在尝试处理使用ExtAudioFile. 但是,当我尝试将此数据放入循环缓冲区时,我听到了几个故障。

在下面的示例代码中,我将数据从“inBuffer”直接传递到“outBuffer”(两者都是TPCircularBufferMichael Tyson 的类型)。两个缓冲区的大小都是 10 x numberOfFrames * sizeof(float)。客户端流格式是带有浮点样本的单声道。

为什么我什至没有处理任何数据就听到这些故障?如果没有循环缓冲区,声音会很好地流动。我做错了什么或者另一种方法会更好?

编辑 根据下面的答案,我通过在回调函数之外分配和释​​放内存以及增加循环缓冲区的大小来修改代码。不幸的是,声音仍然比没有循环缓冲区的情况差。这些故障还有其他原因吗?

0 投票
0 回答
703 浏览

ios - 将 AAC ADTS 解码为 PCM(奇怪的声音)

我正在尝试将 AAC 解码为 PCM,一切似乎都正常。问题是我可以在我的音频文件中听到奇怪的声音(像蛇一样):)

音频文件是这个:https ://www.dropbox.com/s/2a6c1m38w1cu0km/myaudiofileWrite.m4a?dl=0

我将 AAC ADTS 解码为 PCM 的方法是:

格式:

你知道会发生什么吗?

0 投票
1 回答
223 浏览

ios - ExtAudioFileRead 太慢。如何让它更快?

我已经编写了自己的音频库。(傻,我知道,但我喜欢它。)现在,我用它来播放 iOS 上 iPod 库中的立体声文件。它运行良好,只是有时调用 ExtAudioFileRead() 需要超过 23 毫秒。由于我的 AudioUnits 输出设置以 44.1KHz 播放音频,并且每次回调要求 1024 帧。我的代码 + ExtAudioFileRead() 响应时间不得超过 23 毫秒。

我很惊讶 ExtAudioFileRead() 这么慢。我正在做的事情似乎很正常。我在想一定有一些我没有做的未记录的配置魔法。这是我的相关配置代码:

我没有设置 _extAudioFileRef 的任何其他属性。

我已经追查到这件事了。我已经在对 ExtAudioFileRead() 的调用中进行了时间测量,所以我知道不是我的代码减慢了这个过程。应该是配置问题吧?

非常感谢您的帮助甚至猜测!

干杯,克里斯托弗