Tag: 核心音频

音频样本生成multithreadingOSX

这个问题是前一个问题的后续问题( 音频制作者与OSX AudioComponent消费者线程和C中的回调线程 ),包括一个测试示例,它的工作和行为符合预期,但并不能完全回答这个问题。 我已经基本上改写了这个问题,并重新编写了示例,因此它只包含普通的C代码。 (我发现前一个例子中几乎没有Objective-C部分的代码只会引起混淆,并使读者分心于问题中必不可少的内容。) 为了利用多个处理器内核以及使CoreAudio拉模型渲染线程尽可能轻量化,LPCM样本的生产者例程显然必须“坐在”不同的线程上,超出实际优先级渲染线程/回调。 它必须将样本提供给循环缓冲区(在此示例中为TPCircularBuffer ),系统将从inNumberFrames的常量中调度数据拉出。 Grand Central Dispatch API提供了一个简单的解决方案,我在一些个人研究(包括试错编码)中推断出了这个解决方案。 这个解决方案很优雅,因为它不会阻止推送和拉动模型之间的任何冲突。 然而,应该处理“子线程”的GCD 到目前为止还没有满足生产者代码的工作线程的特定并行化要求,所以我必须明确地产生一些POSIX线程,具体取决于数量逻辑核心可用。 尽管在加速计算方面结果已经非常显着,但我仍然觉得混合POSIX和GCD有点不合适。 特别是它适用于变量wait_interval ,并且正确地计算它,而不是通过预测渲染线程在下一个循环中需要多少PCM样本。 这是我的测试程序的缩写和简化(伪)代码,在plain-C中。 控制器声明: #include “TPCircularBuffer.h” #include #include #include #include #include typedef struct { TPCircularBuffer buffer; AudioComponentInstance toneUnit; Float64 sampleRate; AudioStreamBasicDescription streamFormat; Float32* f; //array of updated frequencies Float32* a; //array of updated amps Float32* prevf; //array of […]

从Core Audio框架开始

对于我打算很快启动的项目,我将需要播放压缩和未压缩的音频文件。 为此,我打算使用Core Audio框架。 但是,我之前没有音频编程经验,我真的不知道从哪里开始。 是否有任何初学者级资源或示例项目可以演示如何使用Core Audio构建简单的音频播放器?

AudioQueue吃了我的缓冲区(前15毫秒)

我正在以编程方式生成音频。 我听到缓冲区之间的沉默差距。 当我将手机连接到示波器时,我发现每个缓冲器的前几个样本都丢失了,而且它们的位置是静音。 这种沉默的长度从几乎没有变化到20毫秒。 我的第一个想法是我的原始回调函数需要太多时间。 我用尽可能短的替换它 – 它反复重新排队相同的缓冲区。 我观察到同样的行为。 AudioQueueRef aq; AudioQueueBufferRef aq_buffer; AudioStreamBasicDescription asbd; void aq_callback (void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) { OSStatus s = AudioQueueEnqueueBuffer(aq, aq_buffer, 0, NULL); } void aq_init(void) { OSStatus s; asbd.mSampleRate = AUDIO_SAMPLES_PER_S; asbd.mFormatID = kAudioFormatLinearPCM; asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; asbd.mBytesPerPacket = 1; asbd.mFramesPerPacket = 1; asbd.mBytesPerFrame […]

峰值EQ的IIR系数,如何将它们传递给vDSP_deq22?

我有这6个峰值均衡系数: b0 = 1 + (α ⋅ A) b1 = −2⋅ωC b2 = 1 – (α ⋅ A) a0 = 1 + (α / A) a1 = −2 ⋅ ωC a2 = 1 − (α / A) 有了这些中间变量: ωc = 2 ⋅ π ⋅ fc / fs ωS = sin(ωc) ωC = cos(ωc) A = […]