问题标签 [avaudiofile]

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 投票
5 回答
8894 浏览

swift - 如何使用 AVAudioPCMBuffer 播放声音

我不能用 AVAudioPCMBuffer 播放声音(虽然我可以用 AVAudioFile 播放)。我得到了这个错误。

错误:AVAudioBuffer.mm:169:-[AVAudioPCMBuffer initWithPCMFormat:frameCapacity:]:所需条件为假:isCommonFormat

下面是我的代码,非常感谢您的帮助。

0 投票
1 回答
1137 浏览

ios8 - AVAudioEngine 不正确的时间管理和 AVAudioPlayerNode 回调

我对 iOS8 中的新音频引擎有一个严重的问题。我有一个应用程序,它是用 AVAudioPlayer 构建的,我正试图找出一种迁移到新架构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重的基本障碍) :

我的头文件:

我的 m 文件(在 viewDidLoad 内):

上面的代码初始化引擎和一个节点,然后开始播放我正在使用的任何文件。首先打印出音乐文件的时长,播放完毕后,在回调函数中打印播放器的当前时间。这两个应该是相同的,或者在最坏的情况下,非常非常接近,但事实并非如此,这两个值之间的差异非常大,例如

难道我做错了什么?这应该很简单,我尝试过不同的文件格式、文件长度、数十个音乐文件,但差异总是在 1 秒左右或不到 1 秒。

0 投票
2 回答
3748 浏览

swift - SWIFT - 是否可以从 AVAudioEngine 或 AudioPlayerNode 保存音频?如果是,如何?

我一直在寻找 Swift 文档以保存来自 AVAudioEngine 的音频输出,但我找不到任何有用的提示。
有什么建议吗?

解决方案 感谢马特的回答,我找到了解决方法。这是通过 AVAudioEngine 传递音频后如何保存音频的示例代码(我认为从技术上讲它是以前的)

希望这可以帮助 !

要解决的一个问题:

有时,您的 outputNode 比输入短:如果您将时间速率加快 2,您的音频将缩短 2 倍。这是我现在面临的问题,因为我保存文件的条件是(第 10 行)

这里有什么帮助吗?

0 投票
1 回答
1792 浏览

swift - Swift Playground 中的 AVAudioFile 导致“错误 -54”

我决定在 Swift Playground 中玩 AVAudioPlayer。以下代码在普通 Swift 项目中运行良好,但在 Playground(在助手编辑器中)运行时返回以下错误:

2015-05-12 00:08:04.374 AVAudioFile[2481:141158] 00:08:04.374 错误:AVAudioFile.mm:266:AVAudioFileImpl:错误-54

这是代码:

打印错误附带:

错误域=com.apple.coreaudio.avfaudio 代码=-54“操作无法完成。(com.apple.coreaudio.avfaudio 错误-54。)”UserInfo=0x7fa8c0736f70 {failed call=ExtAudioFileOpenURL((CFURLRef)fileURL , &_extAudioFile)}

只是无法弄清楚为什么它只是游乐场中的一个错误。有什么想法吗?

谢谢!

0 投票
1 回答
1502 浏览

ios - iOS8 中不推荐使用 AudioFileReadPackets

AudioFileReadPackets 出现奇怪的行为,因为它在 iOS 8 中已被弃用。应该如何替换它?

0 投票
0 回答
264 浏览

ios - 如何在 AudioEngine OutputNode 上安装 Tap

我正在尝试从AudioEngine OutputNodeTo保存已处理的音频AVAudioFile

到目前为止,我所知道的是它可以使用 Tap 来完成,但不知道如何。

我想知道如何安装 Tap On AudioEngine OutputNode

0 投票
0 回答
897 浏览

ios - 使用 AVAudioEngine 录制到压缩文件

我正在尝试使用 AVAudioEngine 将来自麦克风的声音与各种音效文件一起录制到 AVAudioFile。

我像这样创建一个 AVAudioFile:

我在音频引擎的 mainMixerNode 上安装了一个水龙头,在那里我将缓冲区写入文件:

self.engine.mainMixerNode.outputFormatForBus(0).settings在创建音频文件时使用,因为 Apple 声明“缓冲区格式必须与文件的处理格式匹配,这就是为什么在创建上面的 AVAudioFile 对象时使用 outputFormatForBus: 的原因”。在 installTapOnBus 的文档中,他们还说:“指定总线上的抽头和连接格式(如果非零)应该相同”

但是,这给了我一个非常大的未压缩音频文件。我想将文件另存为 .m4a 但不明白在哪里指定我要使用的设置:

如果我在创建音频文件时传入这些设置,则应用程序会在我录制时崩溃。

关于如何解决这个问题的任何建议或想法?

0 投票
1 回答
1840 浏览

swift - AVAudioFile.length 为 0 即使文件存在

我正在创建一个 AVAudioFile 用于将声音写入声音文件。如果文件已经存在,我想将 framePosition 移动到文件末尾,以在末尾继续写入,而不是替换现有文件。

我做了一些测试,试图将文件中的缓冲区读入一个具有不同 URL 的新文件,这样它就不会覆盖原始文件。当我尝试将缓冲区读入新文件时发生崩溃:

崩溃日志:由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“错误 -50”

伙计,我真的很讨厌 CoreAudio 崩溃日志。他们什么也没告诉我!

是否可以将数据读入为写入而创建的文件中?

更新

好的,所以在一些建议之后我做了一些改变。基本上,这些是我正在采取的步骤:

  1. 检查文件是否已经存在。
  2. 如果是,打开它进行读取并获取音频缓冲区。
  3. 创建一个用于写入的新文件(使用相同的文件 URL)
  4. 使用 writeFromBuffer 将缓冲区从旧文件写入新文件
  5. 将新文件的 framePosition 移动到末尾,以便我可以继续对其进行写入/录制。

但是,新文件的长度在我写入后为 0。

这是我的代码:

顺便说一句,readIntoBuffer 的命名让我非常困惑。听起来好像您应该使用该方法将文件读入缓冲区,但是根据文档,您应该使用它将缓冲区读入文件吗?那么为什么我不能使用该方法将缓冲区添加到我的文件中呢?为什么我必须使用 writeFromBuffer?

更新 2

所以,我设法解决了它。显然,我必须先调用 readIntoBuffer 才能使用数据实际填充缓冲区,然后才能使用它。所以我添加了这一行

0 投票
1 回答
171 浏览

ios - session:didReceiveFile: 不播放音频文件 (iPhone to Watch)

我在获取我在 iPhone 上录制的音频文件以从我的 Watch 扬声器中播放时遇到问题。

这是我从 iPhone 发送到 Watch 的代码。

这是我从 iPhone 在 Watch 上接收的代码。

iOS 9.2 watchOS 2.0

有没有人经历过这个,或者能够得到这个工作?

0 投票
0 回答
1485 浏览

ios - 将单声道 AVAudioPCMBuffer 写入立体声 AVAudioFile

我正在使用 AVAudioEngine 录制音频,并将其保存为声音文件。

用户可以选择导入音频文件,然后如果愿意,他们可以在此文件的末尾继续录制。我通过将导入的文件读取到 AVAudioPCMBuffer 中来获取音频数据,然后将其写入我正在录制的文件中。如果导入的文件是立体声的(因为我正在写入的文件也是立体声的),这非常有用。但是如果导入的文件是单声道的,当我尝试将 AVAudioPCMBuffer 写入文件时,代码会崩溃,这仅仅是因为通道数不匹配。

是否可以将处理格式设置为立体声的单声道 AVAudioPCMBuffer 读入 av AVAudioFile?我可以将缓冲区转换为立体声吗?

这是我如何从导入的文件中获取音频缓冲区的示例:

这就是我使用 AVAudioEngine 创建要写入的 AVAudioFile 的地方:

最后,这就是我将音频缓冲区写入文件的方式:

如果我将音频转换为立体声,一切正常。