- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个准确的计时器来分析输入。我希望能够测量 ~200ms 信号中 1% 的偏差。我的理解是使用 AudioUnit 可以获得 <1ms。我尝试实现 Stefan Popp's example 中的代码在更新了一些东西以使其在 xcode 6.3 上运行后,我已经可以运行该示例了,但是:
虽然我最终确实想要捕获音频,但我认为应该有一些方法来获取通知,比如 NSTimer,所以我尝试了 AudioUnitAddRenderNotify,但它完全按照它说的去做 - 即它与渲染,而不仅仅是一个任意的计时器。有什么方法可以在不录制或播放的情况下触发回调吗?
当我检查 mSampleTime 时,我发现切片之间的间隔与 inNumberFrames - 512 - 相匹配,计算结果为 11.6 毫秒。我看到录制和播放的时间间隔相同。我需要比这更高的分辨率。
我尝试使用 kAudioSessionProperty_PreferredHardwareIOBufferDuration,但我能找到的所有示例都使用已弃用的 AudioSessions,因此我尝试转换为 AudioUnits:
Float32 preferredBufferSize = .001; // in seconds
status = AudioUnitSetProperty(audioUnit, kAudioSessionProperty_PreferredHardwareIOBufferDuration, kAudioUnitScope_Output, kOutputBus, &preferredBufferSize, sizeof(preferredBufferSize));
但我得到 OSStatus -10879,kAudioUnitErr_InvalidProperty。
然后我尝试使用值为 128 和 256 的 kAudioUnitProperty_MaximumFramesPerSlice,但 inNumberFrames 始终为 512。
UInt32 maxFrames = 128;
status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &maxFrames, sizeof(maxFrames));
[编辑]我正在尝试将输入的时间(用户选择的 MIDI 或麦克风)与应该的时间进行比较。具体来说,乐器是在节拍/节拍器之前还是之后演奏的,演奏了多少?这是为音乐家准备的,而不是游戏,因此需要精确。
[编辑]答案似乎对事件有反应。也就是说,他们让我准确地看到什么时候发生了什么,但是我不明白我是如何准确地做某事的。我的错是不清楚。我的应用程序也需要成为节拍器 - 同步播放节拍上的点击并在节拍上闪烁一个点 - 然后我可以分析用户的 Action 以比较时间。但如果我不能准确地演奏节拍,其余的就会分崩离析。也许我应该录制音频 - 即使我不想要它 - 只是为了从回调中获取 inTimeStamp?
[编辑]目前我的节拍器是:
- (void) setupAudio
{
AVAudioPlayer *audioPlayer;
NSString *path = [NSString stringWithFormat:@"%@/click.mp3", [[NSBundle mainBundle] resourcePath]];
NSURL *soundUrl = [NSURL fileURLWithPath:path];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
[audioPlayer prepareToPlay];
CADisplayLink *syncTimer;
syncTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(syncFired:)];
syncTimer.frameInterval = 30;
[syncTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
-(void)syncFired:(CADisplayLink *)displayLink
{
[audioPlayer play];
}
最佳答案
您应该使用循环缓冲区,并在与您自己的计时器上所需帧数相匹配的 block 中对信号进行分析。为此,您需要设置渲染回调,然后将回调中的输入音频提供给循环缓冲区。然后您设置自己的计时器,该计时器将从缓冲区的尾部提取并进行分析。通过这种方式,您可以每 0.23 秒向缓冲区提供 1024 帧,并且您的分析计时器可能每 0.000725 秒触发一次并分析 32 个样本。 Here是一个关于循环缓冲区的相关问题。
编辑
要使用环形缓冲区获得精确计时,您还可以存储与音频缓冲区对应的时间戳。我用 TPCircularBuffer因为这样做。 TPCircularBufferPrepareEmptyAudioBufferList、TPCircularBufferProduceAudioBufferList 和 TPCircularBufferNextBufferList 将在环形缓冲区中复制和检索音频缓冲区和时间戳。然后,当您进行分析时,每个缓冲区都会有一个时间戳,从而无需在渲染线程中完成所有工作,并允许您挑选分析窗口。
关于ios - 使用 AudioUnit 的精确定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234127/
我有一个 AudioUnit,对应的回调正常工作,但现在,我需要将它发送到 RemoteIO,因为我正在实现一些需要 RemoteIO AudioUnit 才能工作的框架。 那么...我需要与此 au
我正在熟悉如何使用 AudioUnit 来播放声音,但对数据包和帧的概念感到困惑。我想知道: AudioUnit上下文中数据包和帧的定义是什么 每个数据包使用多个样本以及每个帧使用多个数据包的交易是什
我有使用 AudioUnit 将正弦波渲染到输出的简单代码。我的问题是:我应该在框架中放入的值范围是多少?我的意思是,在 AudioUnitRender 函数中,我应该为缓冲区数组提供一些音频数据……
我编写了一个简单的 audiounit,它应该交换立体声源的左右声道。对于使用 BASS 库的命令行程序,此代码的移植版本在 C 中运行良好,但我无法让相同的代码在 Xcode 中为 audiouni
我已经实现了一个 AUGraph,其中包含一个 AudioUnit,用于处理来自麦克风和耳机的 IO。我遇到的问题是缺少音频输入 block 。 我相信样本在硬件到软件缓冲区交换期间丢失了。我尝试将
我正在尝试编写一个 iOS 应用程序,从麦克风捕获声音,将其通过高通滤波器,并对处理后的声音进行一些计算。基于 Stefan Popp 的 MicInput ( http://www.stefanpo
所以我的 AudioUnit 从 iOS 中的麦克风/线路输入中获取数据时遇到了一些问题。我能够按照我认为合适的方式设置所有内容,它正在调用我的 recordingCallback,但是我从缓冲区中获
我正在尝试编写一个 iOS 应用程序,它将将从麦克风接收到的声音传递给扬声器而不做任何更改。我读过苹果文档和指南。我从这个 guide 中选择了第一个图案.但什么也没发生——沉默。如您所见,我已尝试使
我的应用程序正在利用 AudioUnit 功能为节拍器应用程序产生短促的声音。一切都运行良好。 现在我想从设备上的 iTunes 库播放 MP3,并使用 MPMusicPlayerController
我的问题涉及音频单元。为了设计适用于 iPhone 的变声应用程序(使用 Objective-C xCode),我使用此网站上的 RemoteIO audioUnit 示例: http://atast
我已经用头撞墙有一段时间了。我的 Xcode 项目在重构时出现了一点困惑,并且拒绝构建。我已经消除了所有其他错误,除了最后一个链接时错误: Framework not found AudioUnit
我可以设置实时播放并在远程 IO 单元之间放置延迟单元以设置延迟效果。 AudioComponentDescription delayDesc; delayDesc.componentType =
我最近在Mac上使用AudioUnits设计了一个录音机。它的设计类似于视频安全系统,可以连续记录,并带有图形化的功率电平显示,以供回放浏览。 我注意到,每85分钟就会出现3分钟的失真。消除了一天之后
用于创建版本3 AudioUnit的示例代码演示了实现如何需要返回功能块以进行渲染处理。该块都将从前一个 通过pullInputBlock链中的AxudioUnit并将处理后的样本提供给输出缓冲区。如
当用户更改参数或预设时,我如何/何时实际更新仪器? AUInstrumentBase 中没有ParameterUpdated 或PresetSelected 类型的方法/回调 最佳答案 相关机制是 A
对于音频单元,您必须像这样将节点添加到图表中...... AUGraphAddNode(processingGraph, &mixerUnitDescription, &mixerNode) AUGr
我在想是否有可能获得对 AudioUnit 记录(可能结束播放)设备的独占访问,以确保在我工作时(最终甚至在后台)任何其他进程都不会访问它? 任何建议都会有帮助。 提前谢谢您! 最佳答案 您的应用在前
我正在构建一个应用程序,该应用程序涉及在应用均衡 (EQ) 效果的同时播放用户音乐库中的歌曲。我以前只使用过 AudioUnits 来生成声音,所以我遇到了一些麻烦。 我当前的计划是使用 AVAsse
我正在尝试实现播放通过套接字从远程服务器接收到的 pcm 音频。这是我之前的问题 link .这工作正常,因为我使用循环缓冲区始终输入传入缓冲区。 但是我有一个问题,如果我没有为我的输出提供缓冲区,就
我使用 AudioUnit 以 8 KHz 采样率和 8 位音频样本录制和播放音频。我使用以下来源的示例:https://github.com/fuxx/MicInput 播放部分基于回调模式。使用这
我是一名优秀的程序员,十分优秀!