问题标签 [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 投票
1 回答
106 浏览

ios - 组合 2 个音频文件是 Swift

我正在尝试合并 2 个音频文件。

主要问题是音频文件是无损.flac文件。

我尝试创建AVMutableComposition,然后AVURLAsset为每个音频创建 2 个并用于AVAssetExportSession组合音频文件并且它可以工作,但在这种情况下的主要问题是AVAssetExportSession不支持导出到.flac并且支持.m4a,这是有损压缩,不适合我的情况。

谁能建议如何获取.flac音频文件?

0 投票
1 回答
226 浏览

swift - 设置 AVAudioFile `framePosition` 会导致崩溃

每当我将 AVAudioFile 设置framePosition为当前 framePosition 以外的其他内容时,我都会崩溃:

错误 - 6658

我在 Apple Docs 中查找的是:

kExtAudioFileError_InvalidSeek:写入尝试或偏移量超出范围。

这对我来说很奇怪,因为我可以确认我尝试设置的framePosition位置小于 AVAudioFile'slength并且高于 0,因此帧不应该超出范围。

代码:

这是崩溃的完整描述:


更新 1:我注意到我可以设置 的 framePosition f,即为阅读而打开的 AVAudioFile,但我仍然无法设置 的fileframePosition ,为使用相同的 URL 编写打开的 AVAudioFile 。

更新 2:我尝试将文件写入一个单独的 URL,而不是通过替换读取它

if let f = f街区。

但是,在设置成名位置时,我仍然会出现越界错误。

0 投票
1 回答
237 浏览

swift - AVAudio 和离线手动渲染模式 - 无法将更高频率的缓冲区写入输出文件

我正在读取输入文件并使用离线手动渲染模式,我想执行幅度调制并将结果写入输出文件。

为了测试,我产生纯正弦波——这适用于低于 6.000 Hz 的频率。对于更高的频率(我的目标是使用大约 20.000 Hz),信号(因此监听输出文件)会失真,并且频谱在 8.000 Hz 处结束 - 不再有纯频谱,在 0 到 8.000 Hz 之间有多个峰值。

这是我的代码片段:

我的问题:有s.th。我的代码错了吗?或者有谁知道如何生成具有更高频率正弦波的输出文件?

我想手动渲染模式不够快,无法处理更高的频率。


更新:与此同时,我确实用 Audacity 分析了输出文件。上图为 1.000 Hz 的波形,下图为 20.000 Hz 的波形: 在此处输入图像描述

当我放大时,我看到以下内容: 在此处输入图像描述

比较两个输出文件的光谱,我得到以下信息: 在此处输入图像描述

奇怪的是,随着频率的升高,幅度趋近于零。此外,我在第二个频谱中看到更多频率。

与结果相关的一个新问题是以下算法的正确性:

我确实检查了采样率,即 48000 - 我知道当采样频率大于被采样信号的最大频率的两倍时,可以忠实地重建原始信号。

更新 2:

我更改了如下设置:

现在输出信号的质量更好,但并不完美。我得到更高的幅度,但在频谱分析仪中总是不止一个频率。也许解决方法可以包括应用高通滤波器?

与此同时,我确实使用了一种 SignalGenerator,将经过处理的缓冲区(使用正弦波)直接传输到扬声器——在这种情况下,输出是完美的。我认为将信号路由到文件会导致此类问题。

0 投票
0 回答
203 浏览

ios - 如何以编程方式快速重新采样音频文件?

我想知道是否可以重新采样已经编写的AVAudioFile.

我发现的所有参考资料都不适用于这个特定问题,因为:

  • 他们建议在用户录制时重新采样AVAudioFile,而installTap正在运行。在这种方法AVAudioConverter中,每个缓冲区块中的工作由 给出,inputNode并将其附加到AVAudioFile. [1] [2]

关键是无论录制过程如何,我都想重新采样我的音频文件。

更难的方法是通过 L 因子对信号进行上采样,并使用vDSP以 M 因子应用抽取:

光盘上的音频具有 44.1 kHz 的采样率;要将其传输到使用 48 kHz 的数字媒体,可以使用上述方法 1,L = 160,M = 147(因为 48000/44100 = 160/147)。对于反向转换,交换 L 和 M 的值。如上所述,在这两种情况下,低通滤波器都应设置为 22.05 kHz。[3]

最后一个显然似乎是一种过于硬编码的方法来解决它。我希望有一种方法可以使用AVAudioConverter 对其进行重新采样,但它缺少文档:(

0 投票
0 回答
80 浏览

python - 我无法在 rasa 中添加音频剪辑作为聊天机器人的输出

我已经使用 rasa 一个多月了,最近我被困在 rasa 聊天机器人中添加音频剪辑,任何帮助将不胜感激。我正在使用 rasa 2.0 版。我在actions.py中添加了以下代码

类 ActionHelloWorld(动作):

下面是我在 domain.yml 文件中添加的代码

完全录音:

  • 自定义:附件:类型:“音频”有效负载:src:“c:\user\lenovo\documents\audio1.mp3”自动播放:true

我不确定这是否是解决问题的正确方法,这个机器人的目的是根据用户的请求播放音频文件。

0 投票
1 回答
84 浏览

xamarin - 在 AVAudioPlayer 中获取音频片段的样本?

AVAudioPlayer 类上是否有可以用来获取样本的属性?如果没有,我可以使用其他课程来获取此信息吗?

这是我所拥有的:

Visual Studio Mac (C#/Xamarin)

0 投票
1 回答
290 浏览

ios - AVAudioFile 写入不起作用 Swift iOS 14

我有以下功能:

它返回给我一个 AVAudioPCMBuffer。我已经验证了我传入的话语是正确的。

当我尝试将此 AVAudioPCMBuffer 写入本地 URL 时,问题就出现了,如下所示:

我遇到以下错误:CABufferList.h:179:BytesConsumed: ASSERTION FAILURE [(nBytes <= buf->mDataByteSize) != 0 is false]:

在我尝试做的那一行:

try tempFile.write(from: buffer)

0 投票
0 回答
148 浏览

ios - 将传入的音频原始数据写入 AVAudioFile 的 AVAudioPCMBuffer 并播放 AVAudioFile

我在具有以下属性的回调函数中接收音频原始数据包:

  • 每包 640 个样本
  • 32 kHz 采样率
  • 带符号的 16 位 PCM 编码
  • 单通道

换句话说,每个传入的音频数据包都是一个包含 640 个指向音频原始数据值的指针的数组。每个音频原始数据值的位深度为 2 字节(16 位),采用 PCM 编码。

我在接收传入的音频原始数据之前创建了一个 AVAudioFile。录制开始后,我将音频原始数据包保存到 AVAudioPCMBuffer 中,使用 AVAudioConverter 将 AVAudioPCMBuffer 的处理格式转换为 AVAudioEngine 主混音器节点的输出格式,并将转换后的 AVAudioPCMBuffer 写入 AVAudioFile。由于 AVAudioEngine 的主混音器节点的输出格式为 2 ch, 48000 Hz, Float32, non-interleaved,因此需要进行 AVAudioPCMBuffer 格式的转换。最后,一旦录音停止,我使用 AVAudioEngine 播放 AVAudioFile。

问题:播放 AVAudioFile 时,我对着麦克风说话时只听到白噪声。然而,白噪声的持续时间与我对着麦克风说话的时间长度相同,这似乎表明我已经接近解决方案,但还没有完全解决。

我在 Swift 5 中的代码如下:

1.创建AVAudioFile

2. 在回调函数中处理传入的音频原始数据

3. 录音停止后播放音频文件

我对使用 Swift 在 iOS 上进行音频处理非常陌生,非常感谢有关解决此问题的任何建议或提示。

非常感谢您提前提供的帮助。

0 投票
0 回答
96 浏览

avaudioplayer - 如何使用 AVAudioPCMBuffer 寻找逻辑 AVAudioEngine

我有一个从本机库获得的原始音频字节流,为了使它工作,我将它转换为AVAudioPCMBuffer我可以AVAudioEngine像这样使用的

但问题是 - 如何进行搜索(例如:+/-10 秒)。我在这里找到了解释

https://www.raywenderlich.com/21672160-avaudioengine-tutorial-for-ios-getting-started

但是给定示例的问题是没有scheduleSegment使用startingFrameparam for 的方法AVAudioPCMBuffer

有没有办法实现搜索逻辑AVAudioPCMBuffer

0 投票
1 回答
27 浏览

swift - 如何使用 AVFAudio 的 SDK 录制、播放和保存音频

我一直在尝试实现 AVFoundation 的框架 AVFAudio,以便根据用户选择的预设来录制音频、播放音频以及更改音频数据。我也一直在尝试找出如何将文件本地保存到用户的设备,但是,在阅读苹果关于 AVFAudio 的文档后,我几乎无法理解创建这些文件时要采取哪些步骤。我一直在关注https://www.raywenderlich.com/21868250-audio-with-avfoundation/lessons/1 并设法在这里设置了一些功能。

在这里我已经设置了保存音频,但是正如你所看到的,这只会将音频保存到一个临时目录中。我想知道如何将音频文件本地保存到用户的设备。

在使用 AVFAudio 时,我通常对 AVFoundation 的框架感到困惑,并且文档https://developer.apple.com/documentation/avfaudio没有详细说明如何实现每种方法。例如; 该文档指出,对于创建音频播放器:我们需要 init(contentsOf:url),但没有详细说明 url 是什么以及我们为什么使用它?任何人都可以帮助我了解进一步采取哪些步骤,我觉得我在绕圈子试图理解这个框架和苹果文档。