问题标签 [extaudiofile]

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

core-audio - Using ExtAudioFileWrite to write at the end of a file

I'm trying to open a file and append data to it using ExtAudioFileWrite. Now, creating/initial writing(on creation)/converting works just fine, but unfortunately I can't seem to be able to open the file for writing afterwards. There is only one function that seems to open the file: ExAudioFileOpenURL but only for reading. So, how can I write at the end of a file if I'm not able to open the file for writing?

0 投票
1 回答
450 浏览

cocoa - 使用 AudioToolBox 将 Wave 文件保存到 NSFileWrapper

我使用 AudioToolBox 框架中的 ExtAudioFileCreateWithURL 和 ExtAudioFileWrite 将我的样本保存到文件中。但现在我需要将它保存到 NSFileWrapper,因为我现在使用的是 NSDocument:

有什么方法可以将 ExtAudioFileXXX 函数与 NSMutableData 对象一起使用,以便我可以使用 NSFileWrapperinitRegularFileWithContents:(NSData*)contents方法?

剥离代码以保存到文件(有效):

0 投票
3 回答
514 浏览

c++ - ExtAudioFileOpenURL 泄漏

我正在打开一个音频文件来阅读它,每次我都会从这个调用者那里得到一个废弃的 malloc 块。

在一个循环中,我设置了这样的数据(在仪器中标记为内存使用率为 99.7%)data = (short*)malloc(kSegmentSize*sizeof(short));

free(data);并在每次迭代结束时像这样释放它。

我不太确定这里发生了什么,如果有任何帮助,我将不胜感激。

编辑: KSegmentSize 变化数千,从最小 6000 - 最大 50000(推测)

仪器跟踪:

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
270 浏览

macos - 从 AudioUnit 格式转换为 ExtAudioFileWrite

我有一个完全由 Apple AudioUnits 组成的 AUGraph - DLSSynth、Delay、Stereo Mixer。我正在尝试将其输出捕获到 ExtAudioFile 中。我的问题是我认为我需要将 AudioUnit 格式转换为 ExtAudioFile 可以使用的文件格式。如果我从 AUGraph 中获取 ASBD,我会得到

但是如果没有 fmt,我不能用那个 ASBD 创建一个 ExtAudioFile 吗?错误。有人可以指出将此流记录到文件的正确方向吗?

0 投票
1 回答
2335 浏览

ios - iOS 中的 ExtAudioFileRead 出现错误代码 -50

我使用 ExtAudioFileRead 函数将音频文件加载到内存中。但是我发现代码-50总是有错误。这意味着我将错误的参数传递给函数。但我不知道哪一个是错误的参数。

Audio File 的数据格式是 alac,sampleRate 44100k,有 2 个通道。

我的代码如下所示:

0 投票
1 回答
72 浏览

macos - 设置 ClientDataFormat 时出错

我在编码多通道 Apple 无损文件的某些配置时遇到了一些问题。我对 2、4 和 6 通道配置没有任何问题,但是在生成 12 通道文件时遇到了麻烦。

使用 ExtAudioFile API,我可以创建具有 12 通道 AudioStreamBasicDescription 和 12 通道 FileChannelLayout 的音频文件。在设置 12 通道 ClientDataFormat 时(在设置客户端布局之前完成,显然也失败了),我得到“fmt?”错误代码。

我的 ClientDataFormat 的 AudioStreamBasicDescription 生成如下:

采样率为 176.4 kHz,m_channels 设置正确。这适用于 2、4 和 6 通道设置,所以我不认为它有问题。我也尝试过使用 32 位有符号整数而不是 64 位浮点数,但结果是一样的。

我不确定我错过了什么。Apple Lossless 编解码器是否可能不支持 12 通道编码?

0 投票
1 回答
286 浏览

ios - ExtAudioFile API 是否曾经使用硬件来解码音频?

我正在使用该ExtAudioFile接口来解码音频,并且想知道它是否曾经使用过硬件辅助音频解码。

kExtAudioFileProperty_CodecManufacturer物业的文档说:

通过指定 kAppleHardwareAudioCodecManufacturer 或 kAppleSoftwareAudioCodecManufacturer,在 iOS 中使用此属性在硬件或软件编码器之间进行选择。

这似乎表明ExtAudioFile确实可以利用解码硬件。

在其他地方,在音频格式服务文档中,我发现:

基于硬件的编解码器只能在使用音频队列服务或使用接口(如使用音频队列服务的 AV Foundation)播放或录制时使用。特别是,您不能将基于硬件的音频编解码器与 OpenAL 一起使用或在使用 I/O 音频单元时使用。

...这并不完全清楚;如果ExtAudioFile在其实现中使用音频队列服务,那么它也许可以利用硬件,但我们实际上并不知道它是如何实现的。

我试图在运行时测试是否正在使用硬件,但这本身就很困难。音频格式服务参考中给出的一种方法是用于AudioFormatGetProperty测试kAudioFormatProperty_HardwareCodecCapabilities属性。但是示例代码不起作用,总是返回kAudioFormatUnsupportedPropertyError. (在网上搜索后,我发现有这个问题的人提出了一些其他问题,但没有成功使用它的报告。)

所以......我想知道是否有人知道任何方法来测试硬件解码器当前是否处于活动状态(在这种情况下,我可以自己测试是否ExtAudioFile正在使用它)。或者,如果有人对是否ExtAudioFile使用硬件有任何明确的了解(不仅仅是基于 Apple 文档中的模糊提及)。

0 投票
0 回答
181 浏览

ios - 无法使用 ExtAudioFile 读取音频文件

我正在尝试使用 ExtAudioFile 读取音频文件并通过 IO 单元播放它。我已经学习音频单元 2 个月了,我想我现在知道一两件事了。但我找不到解决问题的方法,这让我非常抓狂。基本上它读起来很好,没有错误,但输出静音(就像样本不会从我的缓冲区复制到输出缓冲区)。

我在这里上传了我的整个代码:https ://gist.github.com/skiny-n/9050804

任何人都可以尝试/通过它并真正让我摆脱痛苦吗?

感谢您的任何提示,干杯

0 投票
1 回答
1019 浏览

ios - 如何在 iOS 中获取现有 MP3 或 AAC 的比特率?

我想向用户显示现有 MP3 文件和 AAC 文件的比特率,但我不知道如何正确提取这些文件的比特率。

到目前为止,我已经尝试获取 的AudioConverterRef指针,ExtAudioFileRef然后我想从转换器中获取比特率,但我的问题已经从第一步开始了。我得到NULLkExtAudioFileProperty_AudioConverter财产:

AudioStreamBasicDescription我可以成功地从中读取fileRef,所以fileRef很好。

如何获得压缩音频文件的比特率?

0 投票
0 回答
285 浏览

macos - 使用客户端通道布局的核心音频 ExtAudioFile

我正在尝试使用ExtAudioFile's自动频道布局映射,但它似乎没有像我预期的那样工作。

这就是我所做的:

  • 我打开一个 6 通道 WAVE 文件ExtAudioFileOpenURL()

  • 将客户端数据格式属性 ( kExtAudioFileProperty_ClientDataFormat) 设置为 6-Channel PCM Audio Unit Canonical

  • 只是出于好奇阅读文件的通道布局属性 ( kExtAudioFileProperty_FileChannelLayout) 生成的AudioChannelLayout结构有一个kAudioChannelLayoutTag_MPEG_5_1_A正确的(文件是 LRC-LFE-LS-RS)

  • 现在设置客户端通道布局属性 ( kExtAudioFileProperty_ClientChannelLayout),我使用稍微不同的kAudioChannelLayoutTag_MPEG_5_1_C,即 LCR-LS-RS-LFE,这是我想在音频图中使用的

  • 然后,将文件读ExtAudioFileRead()AudioBufferList

  • 缓冲区列表由音频图播放:预定的声音播放器 -> 矩阵混音器(将 5.1 信号下转换为立体声) -> 默认输出

一切正常,除了通道映射没有。矩阵混频器仍接收 LRC-LFE-LS-RS 流。

我检查了文档kExtAudioFileProperty_ClientChannelLayout

此属性的值指定AudioBufferList您传递给ExtAudioFileReadand ExtAudioFileWrite函数的列表中缓冲区的通道布局。此布局可能与文件的通道布局不同,在这种情况下,扩展音频文件对象的底层音频转换器执行重新映射。该属性必须在设置thekExtAudioFileProperty_ClientDataFormat属性后设置,并且两个布局中的通道数必须匹配。

我觉得我做对了,但我一定遗漏了一些东西……有没有人知道如何使这项工作发挥作用?