问题标签 [audioqueue]

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 投票
0 回答
542 浏览

ios - Prime 失败(“不”);将停止(1/5925 帧)

启动后audioqueue工作正常,可以播放音频,但是当我手动更改播放器进度时,AudioQueuePrime会失败,输出Prime failed('nope');将停止(1/5925 帧),返回的错误代码为 1852797029,但下一个 AudioQueueStart 将成功,因此播放器将工作,然后有时只是 AudioQueuePrime 失败。所以为什么?

0 投票
0 回答
608 浏览

objective-c - 是否可以实时播放 AudioQueue 中的音频?

我需要从麦克风获取音频并使用 tcp 连接传递到其他设备。我不确定是否可以从 AudioQueue 播放 AudioBuffer。

目前我正在使用以下代码获取缓冲区:

这个块只是将 mAudioData 推送到 NSData,NSData 是在设备之间传输数据的关键数据类型。

现在我不知道如何在其他设备上运行这个 mAudioData。另一件事是如何连续获取音频,当所有缓冲区已满时,我不再接收数据,只需要清理我猜的缓冲区。

欢迎任何想法,谢谢!

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

ios - 使用远程 IO 针对设定长度的节拍器录制

我能够创建我想要的 avaudioplayer 和 avaudiorecorder 的确切功能,但当然遇到了延迟问题。因此,在阅读了网络上的几乎所有文章并查看了大量示例代码之后,我仍然不确定如何实现以下目标:

  1. 用户选择使用预卷/倒计时录制 2 小节长(每小节 4 拍)的样本
  2. 用户点击记录
  3. 节拍器开始,以 4 拍计(第一拍重音)
  4. 该应用程序会在下一个小节开始时自动开始录制
  5. 应用程序在第 3 小节结束时自动关闭录制(2 小节 + 前贴片)
  6. 然后,用户可以播放他们的录音或删除它并重新开始。

因此,使用 avaudioplayer 和 avaudiorecorder,我只需使用 audacity 将节拍器设置为正确的 bpm(为应用程序设置 bpm)创建了一个“caf”。然后我设置并播放 avaudioplayer 并使用 audiodidfinishsuccessfully 委托方法,执行一些逻辑来启动录音机,重新启动播放器,保持循环计数等以关闭录音和音频。

正如我所提到的,我几乎能够实现我所追求的用户体验,但延迟问题是不可接受的。

我一直在使用音频单元和远程 IO,并设置了一个带有播放回调和记录器回调等的项目,但现在面临如何根据上述描述进行这项工作的问题。我正在尝试为初学者解决以下问题:

  1. 如果我创建一个 1 beat caf 文件,我如何利用音频单元和远程 IO 播放 x 节拍然后停止?
  2. 我如何进行前卷并在 4 拍后开始录音回调

谁能给我一些想法或指出我正确的方向。正如我所提到的,我已经进行了大量研究,包括购买核心有声读物,阅读 atastypixel.com、timbolstad.com 等上的每篇文章,并浏览了苹果文档。

在此先感谢您的帮助。

0 投票
1 回答
358 浏览

nstimer - 如何使用 Iphone sdk 中的音频队列播放 .wav 文件

我是 ios 应用程序开发的新手,现在我正在做一个需要准确计时的音乐项目。所以我决定使用音频队列 API 来播放我的声音文件,它存在于 .wav 格式的主包中,它我已经为此苦苦挣扎了 2 周,任何人都可以帮我解决这个问题。

如果有人为此向我发送了一些示例代码,那么这对我来说将是一个很大的帮助。

谢谢...

0 投票
1 回答
220 浏览

nsdate - 如何使用 Audio Queue API 播放歌曲以找到歌曲节拍的准确时间

现在我正在做一个需要准确计时的音乐项目。我已经使用了 NSTimer,NSdate,但是在播放节拍时我得到了延迟(节拍,即tik tok)所以我决定使用音频队列 API 来播放我的声音文件存在于 .wav 格式的主捆绑包中,我已经为此苦苦挣扎了 2 周,任何人都可以帮我解决这个问题。

0 投票
2 回答
1325 浏览

iphone - AudioQueue 录制音频示例

我目前正在构建一个应用程序,从我的 iPhone 的麦克风中读取音频,然后进行一些处理和视觉效果。当然,我首先从音频开始,但遇到了一个小问题。

我将我的采样率定义为 44100 Hz,并将我的缓冲区定义为容纳 4096 个样本。确实如此。但是,当我打印出这些数据时,将其复制到 MATLAB 中以再次检查准确性,我必须使用的采样率是我的 iPhone 定义的速率的一半,即 22050 Hz,以确保它是正确的。

我认为它与以下代码以及它如何为每个数据包放置 2 个字节有关,当我循环通过缓冲区时,缓冲区吐出整个数据包,我的代码假定它是一个数字。所以我想知道的是如何拆分这些数据包并将它们作为单独的数字读取。

如果我描述的内容不清楚,请告诉我。谢谢!

编辑

添加我用来打印数据的代码

0 投票
2 回答
2167 浏览

ios - 如何停止音频队列?

我正在使用文本到语音,开始音频工作正常,但我无法停止它。这是我如何开始音频:

在后台合成

合成

音频队列回调

AudioQueuePropertyListener

我尝试停止其他方法(UIAlertView 委托方法):

我正在取消所有操作并调用 AudioQueueDispose,也尝试使用 AudioQueueStop,但这里没有任何效果。

所以我的问题是,我怎样才能在这里停止音频?

0 投票
1 回答
1207 浏览

core-audio - sub-millisecond latency in Core Audio

Is it possible to play sounds with sub-millisecond latency using Core Audio?

I've tried using AudioQueues with different sizes and numbers of buffers, and I've tried using AudioUnits, but I have been unable to get below 30 ms of latency.

I am using an oscilloscope to measure the time between when a pushbutton on an Arduino is pressed and when sound leaves the audio jack. The Arduino communication never contributes more than 1 ms of delay.

0 投票
1 回答
1383 浏览

ios - 如何使用 Speakhere 示例中的 AQRecorder

我已经从 speakHere 示例中复制了 AQRecorder 以及所有其他需要的文件。这样做之后,由于编译错误,我将链中使用它的所有类重命名为 .mm,现在似乎已解决。但是我仍然无法弄清楚如何使用 AQRecorder 类。该示例中还有另一个名为 SpeakHereController 的类,但它也不起作用。这是我最近尝试的代码:

错误:错误的接收器类型“AQRecorder”

我知道这不起作用有几个原因,一个它没有调用构造函数,我相信这应该是一个指针。我有很多不同的变化,就像我说的,我也尝试过使用 SpeakHereController:

但是,这会产生错误:

架构 i386 的未定义符号:“AQPlayer::StopQueue()”,引用自:-[SpeakHereController stopPlayQueue] in SpeakHereController.o

“AQPlayer::PauseQueue()”,引用自:-[SpeakHereController pausePlayQueue] in SpeakHereController.o

“AQPlayer::DisposeQueue(unsigned char)”,引用自:-[SpeakHereController stopRecord] in SpeakHereController.o

“AQPlayer::CreateQueueForFile(__CFString const*)”,引用自:-[SpeakHereController stopRecord] in SpeakHereController.o

“AQPlayer::StartQueue(signed char)”,引用自:-[SpeakHereController play:] in SpeakHereController.o interruptListener(void*, unsigned long) in SpeakHereController.o

“AQPlayer::AQPlayer()”,引用自:-[SpeakHereController awakeFromNib] in SpeakHereController.o

“AQPlayer::~AQPlayer()”,引用自:-[SpeakHereController dealloc] in SpeakHereController.o