问题标签 [audioqueueservices]

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 投票
2 回答
265 浏览

ios - 在 iPhone iOS 中播放音频时在多个文件之间跳过

对于一个项目,我需要在一个非常特别的 iPhone 应用程序中处理音频,希望有人能指出我正确的方向。

假设您有一组固定的最多 30 个相同长度的音频文件(2-3 秒,未压缩)。当一个 que 从一个音频文件播放时,它应该能够更新参数,使播放从另一个音频文件从与前一个音频文件结束播放相同的时间戳继续播放。如果不同的音频文件是经过大量过滤的音频的不同版本,则应该可以在它们之间“滑动”以获得您直接应用过滤器的印象。目前无法在 iPhone 上实时实现过滤,因此是预渲染文件。

如果 AB 和 C 是不同的音频文件,我希望能够:

不间断地播放 A:

开始 AAAAAAAAAAAAA 停止

或开始播放 A 并在 B 和 C 中继续播放,在播放时启动

开始 AAABBBBBBBBCC 停止

理想情况下应该可以同时玩两个以上的问题。延迟并不那么重要,但文件之间的跳过最好不会产生点击或延迟。

我已经研究过使用音频队列服务(看起来像地狱一样)并嗅探了 OpenAl。谁能给我一个粗略的概述和一个我可以在接下来的几天里埋头的大方向?

0 投票
2 回答
2671 浏览

iphone - 如何从 iPhone 上的录音中获取线性 PCM?

我想做一些像 iPhone 上的扬声器验证(作为课程项目)。我想知道如何从扬声器中获得线性 PCM。我阅读了有关队列服务的文档,似乎它记录了声音然后将其存储到文件中。有没有办法直接从中获得线性PCM?文档中提到了一些关于缓冲区的内容,但我不太明白。也许这是这样做的关键?

0 投票
0 回答
164 浏览

openal - 我如何使用 AvCaptureSession 和 OpenAL 或其他服务来播放声音

我喜欢实现语音聊天,我首先使用 CaptureSession 捕获音频,当我尝试播放音频时,我遇到了一些问题。

使用 OpenAL,我无法获得声音,数据已附加到缓冲区中但没有声音输出,但 captureSession 没有运行,OpenAL 与文件一起工作很有趣。

使用音频队列服务和 AUGraph,声音可以输出,但它会停止 captureSession 播放一个声音。

所以,我认为使用 captureSession 和 OpenAL 进出音频设备是一个问题......

有人知道我如何与 AVCaptureSession 和 OpenAL 一起使用或其他服务在 AVCaptureSession 运行时播放声音数据????

0 投票
2 回答
1193 浏览

objective-c - 如何在 obj-C 的 C 函数中向 self 发送消息?

我有一个 C 函数(音频队列服务中的回调函数),我想向自己发送消息。怎么做?如果我输入 [self message],则会出现错误:

0 投票
2 回答
332 浏览

iphone - 如何分析iOS中音频队列服务中录制的音频文件?

我知道文件路径。我要如何打开它?录制音频时,我想要像缓冲区中的 LPCM 格式。

0 投票
1 回答
2866 浏览

objective-c - Objective-C - 将流数据传递到音频队列

我目前正在 iOS 上开发一个应用程序,它通过 TCP 套接字读取 IMA-ADPCM 音频数据并将其转换为 PCM,然后播放流。在这个阶段,我已经完成了从流中提取(或者我应该说是对推送做出反应)数据并将其解码为 PCM 的类。我还设置了音频队列类并让它播放测试音。我需要帮助的地方是将数据传递到音频队列的最佳方式。

音频数据以 8 Khz 16 位 LPCM 格式从 ADPCM 解码器输出,每块 640 字节。(它起源于 160 字节的 ADPCM 数据,但解压缩为 640)。它作为 uint_8t 数组进入函数并传递一个 NSData 对象。该流是“推送”流,因此每次发送音频时,它都会创建/刷新对象。

Audio Queue 回调当然是一个拉取函数,它在运行循环的每一次传递中寻找数据,在它运行的每一次传递中:

我已经为此工作了几天,PCM 转换非常费力,我在脑海中组装了连接两者之间数据的最佳方式时遇到了一些麻烦。这不像我在创建数据,然后我可以简单地将数据创建合并到 fillbuffer 例程中,而不是推送数据。

我确实在 uint16_t[] 中设置了一个 0.5 秒的循环缓冲区〜但我认为我已经耗尽了我的大脑,无法找到一种从缓冲区推拉的简洁方法,所以我最终得到了啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪声.

我主要在 Android 上完成了该项目,但发现 AudioTrack 与 Core-Audio Queues 完全不同。

在这个阶段,我还要说我拿起了 Adamson 和 Avila 的 Learning Core Audio 的副本,发现这对于任何想要揭开核心音频神秘的人来说都是一个极好的资源。

更新: 这是缓冲区管理代码:

正如我所说,当我写这篇文章时,我的大脑是模糊的,我可能遗漏了一些明显的东西。

上面的代码由回调调用:

在 convAudio 数组方面,我已经将它转储到日志中,并且它正在以循环方式填充和重新填充,所以我知道至少那一点是有效的。

0 投票
1 回答
502 浏览

iphone - 使用 AudioQueue 服务播放有声读物(m4b 媒体格式)| 苹果手机

我正在开发一个 iPhone 应用程序来播放音乐。我正在使用 AudioQueue 服务来播放音频文件。应用程序正确播放所有媒体文件,但应用程序无法播放有声读物,我认为这是因为它们与我图书馆中的其他媒体项目 (mp3) 不同的媒体格式 (.m4b)。

我确定我需要更改如何初始化音频队列或 AVAssetReaderTrackOutput 以播放具有不同文件格式的媒体,但不确定如何。

谁能指出我正确的方向。

提前致谢

0 投票
1 回答
280 浏览

iphone - 播放音频和视频内容的正确选择

我在做什么:

我需要在 iPhone/iPad 上播放 Apple 不支持的音频和视频文件,例如包含多个音频通道的 mkv/mka 文件。

我正在使用 libffmpeg 在媒体文件中查找音频和视频流。视频正在解码,avcodec_decode_video2每个avcodec_decode_audio3 函数的返回值如下

  • avcodec_decode_video2- 返回AVFrame结构体,该结构体封装了来自包的视频视频帧的信息,具体来说是具有data指向图片/通道平面的指针的字段。
  • avcodec_decode_audio3- 返回samplesint16_t * 类型,我猜这是原始音频数据

所以基本上我已经完成了所有这些并成功解码了媒体内容。

我必须做的: 我必须使用 Apple 服务相应地播放音频和视频。我需要执行的播放应该支持在播放视频时混合音频通道,即假设 mkv 文件包含两个音频通道和一个视频通道。所以我想知道哪种服务适合我?我的研究表明,AudioQueue 服务可能是有用的音频播放,并且可能是视频的 AVFoundation。

请帮助为我的情况找到合适的技术,即视频播放 + 音频播放以及可能的音频通道混合。

0 投票
1 回答
1128 浏览

iphone - 使用 AudioFileReadPackets 通过音频队列访问原始音频数据

我正在尝试访问发送到音频队列回调的原始音频数据,但在调用 AudioFileReadPackets 后,字节数(numBytes)为 0。

当我只打印出 testBuffer 的第一个索引时,我能够得到 0 到 4294967296 之间的值,所以它似乎不是空的。任何想法为什么在 AudioFileReadPackets 执行后 numBytes 为 0?

0 投票
1 回答
1665 浏览

objective-c - 使用音频队列服务录制 aac 时保存到缓冲区而不是文件

我的目标是以 AAC 格式录制音频并将其作为流通过网络连接发送。

我正在使用音频队列服务,并且我的代码基于 SpeakHere 示例。我知道要写入文件,它使用 AudioFileWritePackets() 函数。

这是回调函数:

起初我以为AudioFileWritePackets是通过直接写入inBuffer->mAudioData. 但是,当我手动将 mAudioData 的内容写入文件时,解码似乎不起作用。

在检查和比较AudioFileWritePackets写入文件的原始数据以及我只是将 mAudioData 写入文件的原始数据时,他们似乎已经附加了一个标题。

由于我不知道AudioFileWritePackets()内部是如何工作的,我的问题是,我怎样才能将录制的音频写入缓冲区(或流,如果你更喜欢这样称呼它)而不是文件,这样我就可以稍后通过网络连接发送它?

同样,简而言之,这就是我需要的:以 aac 格式录制音频并通过网络连接流式传输音频。

谢谢!我一直在寻找我的头蓝色...

PS:如果你指出我现有的项目,请确保它们是我需要的。我真的觉得我一直在寻找所有可能的项目>.<