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

iphone - ExtAudioFileConvert 问题

我在获取压缩(mp3)声音并将其保存为 PCM 方面取得了一些进展。此外,我想在同一进程中将原始文件拆分为 2 秒长的块。我似乎成功了,但我有点困惑为什么。

当我读取音频块并将文件写出时,我检查我是否要写一个会使我的文件超过我的 2 秒限制的块。如果是这样,我写的足够多到 2 秒,关闭文件,然后打开一个新文件并将剩余部分写入新文件,然后读取更多数据。像这样的东西:

这是我的问题(我试图标记相关行):

A:有没有更好的方法来找到缓冲区的偏移量,这样我就不会错误地在其中硬编码一些值?例如,有没有一种幸运的方法可以从帧号中获取数据偏移量?

B:如果 ExtAudioFileWrite 正在做从压缩到解压缩的转换,那么我正在写入的数据还没有被解压缩(对吗?),所以我在处理时不必担心播放帧数和偏移量压缩数据?我是否应该先将文件转换为 PCM 文件或内存,然后拆分该 PCM?

谢谢!

-马布德

附言。

clientFormat 定义如下:

和 dst 格式:

0 投票
1 回答
872 浏览

iphone - AudioFileWriteBytes 失败,错误代码为 -40

我正在尝试使用 AudioFileWriteBytes() 将原始音频字节写入文件。这就是我正在做的事情:

然后我们将音频数据(存储为浮点数)复制到将直接写入文件的保持缓冲区(SInt16)。复制看起来很时髦,因为它来自环形缓冲区。

好的,现在我们实际上尝试将音频从 SInt16 缓冲区“holdingBuffer”写入音频文件。NSLog 会吐出一个错误 -40,但也声称它正在写入字节。没有数据写入文件。

这个错误-40是什么?顺便说一句,如果我直接从 ringBuffer 写入文件,一切正常。当然这听起来像垃圾,因为我在写浮点数,而不是 SInt16s,但 AudioFileWriteBytes 不会抱怨。

0 投票
1 回答
2202 浏览

iphone - 来自 ExtAudioFileWriteAsync 的 EXC_BAD_ACCESS

我正在使用音频单元来录制我们的声音。在我的回调函数中,我在 AudioBufferList 中获取数据。我必须将此缓冲区存储在文件中。

问题是;当我尝试将缓冲区存储在 .caf 文件中时,应用程序崩溃了。下面是代码。

错误:

请帮助某人解决此问题。

0 投票
2 回答
1213 浏览

ios - 在 iOS 中将 ExtAudioFileRef 类型转换为 AudioFileID 类型

我一直在使用 ExtAudioFile 服务,我想使用需要 AudioFileID 参数的 AudioFile 服务。此参数对应于 ExtAudioFile Services 中使用的 ExtAudioFileRef。如何从 ExtAudioFileRef 类型转换为 AudioFileID 类型?

0 投票
0 回答
1098 浏览

iphone - ios - 如何在新项目中使用 ExtAudioFileConvert 示例

我想要的只是读取一个 caf 文件并将其写入另一个文件,希望也许我可以操作它,例如将多个文件合并为一个文件,或修剪。所以我找到了 Apples 自己的iPhoneExtAudioFileConvertTest示例,它看起来非常具有挑战性,但我认为一旦我将这些部分放入我自己的项目中,我就可以使用它,这被证明是相当麻烦的。

现在,经过几个不眠之夜的信息挖掘和大量的反复试验;我相信我已经设法在我自己的项目中使用了iPhoneExtAudioFileConvertTest示例。我想我会发布这个来拯救一个程序员同事一些睡眠。

脚步:

  • 将iPhoneExtAudioFileConvertTest示例中的iPublicUtility文件夹和ExtAudioFileConvert.cpp文件添加到我的项目中。
  • 将 3 个新的 .cpp 文件的扩展名重命名为 .mm(.h 文件保持不变)。这允许 xcode 将 cpp 文件视为目标 c++ 文件。
    • ExtAudioFileConvert.mm
    • iPublicUtility/CAStreamBasicDescription.mm
    • iPublicUtility/CAXException.mm
  • 在我计划调用该方法的myViewController.m
    DoConvertFile(sourceURL, destinationURL, outputFormat, sampleRate); (UIViewController) 类中,我添加了一行以使 DoConvertFile 方法可见
    extern OSStatus DoConvertFile(CFURLRef sourceURL, CFURLRef destinationURL, OSType outputFormat, Float64 outputSampleRate);
  • 还将 myViewController.m重命名为 myViewController.mm,因为它使用 .cpp 文件来调用 convertFile 方法
  • 在我的目标/构建设置下的项目设置中,我搜索了键“标题搜索路径”并添加了以下值/Developer/Extras/CoreAudio/PublicUtility/ $(inherited)没有此行,编译器会给我超过 30错误,例如“DebugPrintfFile ”未在此范围内声明*
  • 我注意到该示例在应用程序委托中也有代码
    • 所以我直接从示例的appDelegate复制了2个方法的代码到我自己的appDelegate中,namly
      • static void interruptionListener(void *inClientData, UInt32 inInterruption)
      • static void propertyListener(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
    • #import并在原始语句 之后添加以下 4 行
      • #import "CAXException.h"
      • extern void ThreadStateInitalize();
      • extern void ThreadStateBeginInterruption();
      • extern void ThreadStateEndInterruption();
    • 当然也将示例中的代码添加applicationDidFinishLaunching到我的didFinishLaunchingWithOptions
    • 并再次将我的 appDelegate.m 重命名为 appDelegate.mm

现在,当我编译时,我没有收到任何错误,并且运行时只有在我注释掉 ExtAudioFileConvert.mm 中的断言时才有效

同样在启动时,我收到一个不会导致任何问题的错误,但我更愿意将其删除。任何人 ?

这似乎来自我的 appDelegate 中的这个调用


除了这些警告/错误,我可以编写/转换一个 caf 文件:)。我将不胜感激任何反馈。

0 投票
1 回答
436 浏览

ios - iOS 中的 ExtAudioFileWrite 失败,错误代码为 -66560

我正在使用 ExtAudioFileWrite 将音频数据写入文件。但是当它被警报中断时,虽然文件被保存了,但我得到了这个错误。这是什么错误?

0 投票
2 回答
719 浏览

buffer - 配置缓冲区列表来存储非交错的音频数据?

我有一个回调,我试图从音频图中的远程 I/O 单元捕获音频。在我的回调中,我有AudioBufferList一个AudioUnitRender函数,我需要存储来自两个通道的非交错数据。

这是上下文的代码片段:

有谁知道如何做到这一点?

谢谢。

0 投票
1 回答
463 浏览

c - 读取 AudioFileInitializeWithCallbacks 所需的回调?苹果音频文件 API

我正在尝试使用 AudioFile 和 ExtAudioFile API 编写一个低级音频编写器。我正在使用 AudioFileInitializeWithCallbacks 创建一个新的音频文件,但似乎这需要实现读取和获取大小回调。为什么这不能只接受一个写入回调并相信数据已成功写入。

如果我正在写入一个我无法找到的流(例如 CD 或网络套接字)怎么办?

当然,这应该只是不断地将数据推送到写入回调,如果操作不成功,我有责任在需要返回错误代码的地方写入这些数据。

AudioFile_SetSizeProc 和 AudioFile_WriteProc 的文档似乎不正确,因为它们都谈到了读取操作“inPosition 要读取的数据的偏移量。”、“@result 回调应该返回数据的大小。”。

目前我已经通过只写入文件来解决这个问题,但是在第一次写入过程之后我得到了一个 kExtAudioFileError_InvalidOperationOrder 。这是什么意思?文档中没有关于它的评论。

任何指示或帮助都会非常感激。

0 投票
2 回答
178 浏览

ios - 读取音频文件时出现大量内存峰值

我目前正在使用 Dirac(OSStatus) readFloatsConsecutive:(SInt64)numFrames intoArray:(float**)audio函数从文件中读取音频浮点数。我创建了一个浮点指针**

并将它传递给 Dirac 函数,当所有浮点数都被分配时,我会得到一个巨大的内存峰值。

在仪器中,我得到了大约 90MB 的峰值,并且由于某种原因,这个应用程序仍然在设备上运行。

例如 15839544 * 2 个浮点数会导致这些巨大的峰值吗?

怎么会占用这么多内存?是虚拟内存吗?我没有看到任何虚拟机分配。

我看不出加载单个文件(例如 5MB 音频文件)如何导致内存中出现如此巨大的峰值。

0 投票
1 回答
7720 浏览

iphone - 使用 iOS 的 ExtAudioFileWrite 将音频样本的缓冲区写入 aac 文件

更新:我已经弄清楚了,并将我的解决方案发布为我自己问题的答案(如下)

我正在尝试使用 AAC 格式的 ExtAudioFileWrite 将音频样本的简单缓冲区写入文件。

我已经使用下面的代码将单声道缓冲区写入 .wav 文件来实现这一点 - 但是,我不能为立体声或 AAC 文件执行此操作,这是我想要做的。

这是我到目前为止...

我的具体问题是:

  • 如何为 AAC 设置 AudioStreamBasicDescription?
  • 为什么我不能让立体声在这里正常工作?如果我将通道数('mChannels')设置为 2,那么我会正确获得左通道并在右通道中失真。

我非常感谢任何帮助 - 我想我已经阅读了几乎所有我能找到的页面并且我并不明智,因为虽然有类似的问题,但他们通常从一些输入音频文件中派生 AudioStreamBasicDescription 参数,我看不到结果。Apple 文档也无济于事。

提前谢谢了,

亚当