问题标签 [remoteio]
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.
objective-c - 在 iPhone 上访问麦克风和相机实时原始数据
我需要从 iPhone 上的摄像头和麦克风访问实时原始数据。我搜索了几天,建议对音频使用“远程 IO”和“音频队列”,对视频使用 AVCaptureSession。由于我找不到从 AVCaptureSession 中提取原始音频信息的方法,我想知道是否可以同时使用 AVCaptureSession 或者我应该使用两种不同的方法?
ios - 为什么这个 malloc 会在远程 IO 上崩溃?
我正在尝试使用 malloc 为远程 IO 的音频缓冲区创建一些内存。它大部分时间都有效。但最近它在一些 iOS 6.0.1 到 6.1.3 上崩溃了,奇怪的是在 iPhone 5 和 iPad 3-4、iPad 3-5 和 iPad 3-6 上。
缓冲区的大小如下。更高性能的设备会因此崩溃不是很奇怪吗?是因为它们被更积极地使用吗?
我对如何修复它的想法是用一个catch来捕获这个尝试,然后在出错时尝试一半的大小。这通常通过麦克风提供 30 秒的“聆听”时间。
谢谢!!
罗恩
ios - 远程 IO AudioBufferList 崩溃
为什么下面的粗体线会崩溃???有什么建议么?
ios - 核心音频:非远程 IO 单元上的 kAudioOutputUnitProperty_SetInputCallback
我是 Core Audio 的新手,所以我可能看不到明显的东西……我的目标是处理以前录制的音频信号。但是,应首先过滤这些信号。我不需要播放任何音频。我只需要记录和处理它。
我的图表如下所示: RemoteIO --> HighPassFilter --> 回调(处理音频)
我这样设置:
当我尝试设置回调时,我的代码失败并显示错误 -10879。我假设过滤器音频单元不支持此属性。那我应该如何获得录制的声音呢?据我所知,不允许使用第二个通用输出单元。
提前感谢您的帮助
iphone - Tone淡出后如何正确销毁ToneUnit?
我正在使用基于 Matt Gallagher 的经典示例的 AudioUnits 在 iPhone 上生成音调。为了避免开始/结束时的啁啾声和咔嗒声,我在回调中淡入/淡出幅度。RenderTone
我想在淡出结束时破坏 ToneUnit,也就是在幅度达到零之后。我能想到的唯一方法是从回调中调用实例方法:
不幸的是,这比我想象的更具挑战性。一方面,我仍然会在结束时听到淡出应该消除的咔嗒声。另一方面,我收到此日志通知:
此消息是什么意思,为什么我会收到它?
我应该如何杀死 ToneUnit?我怀疑点击发生是因为RenderTone
并destroyToneUnit
在不同的线程上运行。我怎样才能让这些同步?
如果它有帮助,这是我的destroyToneUnit
实例方法:
如果我在 NSLog 之前和之后AudioUnitUninitialize(toneUnit);
的消息,通知会出现在它们之间。
ios - 使用远程 IO 和音频转换服务将 PCM 缓冲区实时转换为 iOS 的 AAC 数据
我正在使用远程 IO 从 PCM 获取音频缓冲区,我想通过蜂窝网络(3G 网络)将数据实时发送到 Darwin 服务器。我选择了 AAC 格式,因为 Fraunhofer 有一篇名为“iOS A 开发人员指南上基于 AAC-ELD 的音频通信”的文章。示例代码效果很好。音频以 LPCM 格式录制并编码为 AACELD 并解码回 LPCM 最后立即播放,但它是 AACELD(Enhanced Low Delay) 格式。当我将格式从“kAudioFormatMPEG4AAC_ELD”更改为“kAudioFormatMPEG4AAC”时。我可以听到音频 1 秒钟,然后音频卡住下 1 秒钟,并且模式继续。并且音频的频率是现实的两倍,这意味着现实世界中持续 1 秒的声音只会持续 0.5 秒。然后,我将样本帧大小从 512 更改为 1024。频率正常,但我可以听到 2 秒的音频,并且在接下来的 2 秒内卡住并且模式继续......我发现 AudioConverterFillComplexBuffer 函数失败了2 秒,然后在接下来的 2 秒内运行良好。我不知道为什么。请帮忙。提前致谢。代码我真的没怎么改,只是把formatID和sample frame size从512改成了1024 文章在这里:http://www.full-hd-voice.com/content/dam/fullhdvoice/documents/iOS-ACE-AP-v2.pdf
1.全局变量
2.初始化音频会话和音频单元和编码器和解码器
3.Render回调和编解码器
iphone - 消除录制曲目中当前播放的曲目声音
我正在寻找使用 RemoteI/O 进行音频录制和播放。我对核心音频的理解很差,因为我遵循了惊人的音频开源。到目前为止,我可以使用相同的代码进行录制和播放,现在我尝试通过麦克风录制并通过 iphone 扬声器播放,以避免在同时播放和录制音频时混合两种音频。
我在 Stack Overflow 中看到很多帖子说我的问题是重复的,但我找不到我的问题的确切答案。但我希望通过查看Apple 文档来实施。
问题:
如何使用RemoteI/O实现同时录播?
答:使用惊人的音频引擎完成
如何在播放我录制的音频并录制另一首曲目时停止混合两个音频?(消除正在通过我的应用程序播放的音频样本)
如何通过麦克风更改录音并通过 Iphone 扬声器播放?
ios - CoreAudio,iOS:无法通过 RemoteIO 使用单声道输入和立体声输出
我试图将音频输入设置为单声道并使用两个AudioStreamBasicDescription
s 将一个 RemoteIO AudioUnit 输出为立体声,这是那里唯一的 AudioUnit。
然后我为输入 ( kAudioOutputUnitProperty_SetInputCallback
) 和输出 ( kAudioUnitProperty_SetRenderCallback
) 注册了两个单独的回调,并期望在我的输出回调中, withAudioBufferList *ioData
应该ioData->mNumberBuffers
是 2。
但是,令我惊讶的是,它仍然是 1。
是不是 RemoteIO 不支持输入和输出有不同的通道号?
ios - 使用 VoiceProcessingIO 音频单元子类型而不是 RemoteIO 会导致输出音量意外下降
我在我的语音聊天应用程序中使用 RemoteIO。为了启用回声消除,在将“kAudioSessionCategory_PlayAndRecord”设置为会话类型后,我将“kAudioUnitSubType_RemoteIO”更改为“kAudioUnitSubType_VoiceProcessingIO”。现在回声消除有效,但输出音量水平与之前的 RemoteIO 输出水平相比已显着下降。有谁知道在使用 VoiceProcessingIO 时如何获得与使用 RemoteIO 时相同的输出音量级别?
ios - Core Audio iOS:检索捕获和待渲染样本的过去和未来时间戳
问题
我有一个非常简单的 iOS Core Audio 应用程序,其结构如下:
Remote I/O Unit Input Bus --> Render Callback --> Remote I/O Unit Output Bus
由远程 I/O 输出总线调用的渲染回调函数通过调用AudioUnitRender()
远程 I/O 输入总线从输入硬件中提取样本。然后它处理/影响这些样本,写入提供的样本AudioBufferList*
并返回,从而通过输出硬件播放受影响的样本。一切正常。
我的问题是我如何知道或计算出准确的时间:
- 样本由输入硬件捕获
- 样本实际上是在输出硬件上播放的
讨论
一个结构体通过有效的, &值AudioTimeStamp
传递给渲染回调。我不清楚这个时间戳到底反映了什么。该文档指出:mHostTime
mSampleTime
mRateScalar
inTimeStamp 与此音频单元渲染调用关联的时间戳。
这听起来像是代表调用渲染的时间,但是这与捕获输入样本和渲染输出样本的时间有什么关系(如果有的话) ?
网上的一些资源谈到使用mach_absolute_time()
或CACurrentMediaTime()
计算当前主机时间,但是我似乎无法从当前主机时间连接到过去或未来主机时间。
以下来自 Apple 邮件列表线程的引用谈到了三个时间戳,包括过去输入数据和未来输出数据的单独时间戳。这正是我正在寻找的,但是我相信这是在 OS X 上运行并使用 AUHAL I/O。我找不到在 iOS 上检索这些时间戳的方法。
因此,CoreAudio 的工作方式是触发 I/O proc 并为您提供 3 个时间戳:(1)是输入数据的时间戳 - 如果有的话。这将始终至少是过去的缓冲区大小 (2) 是现在的时间戳 - 当 I/O proc 被唤醒以运行时 (3) 是您将提供的输出数据的时间戳。这总是在未来的某个时间——通常是未来的缓冲区大小。(http://lists.apple.com/archives/coreaudio-api/2005/Sep/msg00220.html)
我怀疑我可能遗漏了一些明显的东西,所以希望有人能对此有所了解。
提前致谢。