首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode - AUiPodEQ AUGraph

xcode - AUiPodEQ AUGraph
EN

Stack Overflow用户
提问于 2015-05-13 14:52:01
回答 2查看 834关注 0票数 1

我正在使用iOS开发一个用于AVAudioplayer的音乐应用程序,其中我想实现一个均衡器。我在互联网上搜索了一个很好的解决方案,最后得到了这样的AUGraph配置:

代码语言:javascript
复制
// multichannel mixer unit
AudioComponentDescription mixer_desc;
mixer_desc.componentType = kAudioUnitType_Mixer;
mixer_desc.componentSubType = kAudioUnitSubType_MultiChannelMixer;
mixer_desc.componentManufacturer = kAudioUnitManufacturer_Apple;
mixer_desc.componentFlags = 0;
mixer_desc.componentFlagsMask = 0;
// iPodEQ unit
AudioComponentDescription eq_desc;
eq_desc.componentType = kAudioUnitType_Effect;
eq_desc.componentSubType = kAudioUnitSubType_AUiPodEQ;
eq_desc.componentManufacturer =  kAudioUnitManufacturer_Apple;
eq_desc.componentFlags = 0;
eq_desc.componentFlagsMask = 0;
// output unit
AudioComponentDescription output_desc;
output_desc.componentType = kAudioUnitType_Output;
output_desc.componentSubType = kAudioUnitSubType_GenericOutput;
output_desc.componentManufacturer =  kAudioUnitManufacturer_Apple;
output_desc.componentFlags = 0;
output_desc.componentFlagsMask =  0;

// create a new AUGraph
OSStatus result = NewAUGraph(&mGraph);
// Add Audio Nodes to graph
AUNode outputNode;
AUNode eqNode;
AUNode mixerNode;
AUGraphAddNode(mGraph, &mixer_desc, &mixerNode);
AUGraphAddNode(mGraph, &eq_desc, &eqNode);

AUGraphAddNode(mGraph, &output_desc, &outputNode);

// open the graph AudioUnits (but not initialized)
result = AUGraphOpen(mGraph);
// grab the audio unit instances from the nodes
AudioUnit mEQ;
AudioUnit mMixer;
result = AUGraphNodeInfo(mGraph, mixerNode, NULL, &mMixer);
result = AUGraphNodeInfo(mGraph, eqNode, NULL, &mEQ);

// set number of input buses for the mixer Audio Unit
UInt32 numbuses = 0;
AudioUnitSetProperty ( mMixer, kAudioUnitProperty_ElementCount,
                      kAudioUnitScope_Input, 0, &numbuses, sizeof(numbuses));

// get the equalizer factory presets list
CFArrayRef mEQPresetsArray;
UInt32 sizeof1 = sizeof(mEQPresetsArray);
AudioUnitGetProperty(mEQ, kAudioUnitProperty_FactoryPresets,
                     kAudioUnitScope_Global, 0, &mEQPresetsArray, &sizeof1);


result = AUGraphConnectNodeInput(mGraph, mixerNode, 0, eqNode, 0);
result = AUGraphConnectNodeInput(mGraph, eqNode, 0, outputNode, 0);

AudioUnitSetParameter(mMixer, kMultiChannelMixerParam_Enable, kAudioUnitScope_Input, 0, 1, 0);

AUPreset *aPreset = (AUPreset*)CFArrayGetValueAtIndex(mEQPresetsArray, 7);
AudioUnitSetProperty (mEQ, kAudioUnitProperty_PresentPreset,
                      kAudioUnitScope_Global, 0, aPreset, sizeof(AUPreset));

AUGraphInitialize(mGraph);
AUGraphStart(mGraph);

AUGraph正在运行,但EQ没有应用。AUPreset *aPreset = (AUPreset*)CFArrayGetValueAtIndex(mEQPresetsArray, 7);中的参数'7‘是应该应用的均衡器的索引。(电子)我通过记录mEQPresetsArray-Array的值获得了这个索引:

代码语言:javascript
复制
for (int i = 0; i < CFArrayGetCount(mEQPresetsArray); i++) {
    AUPreset *aPreset = (AUPreset*)CFArrayGetValueAtIndex(mEQPresetsArray, i);
    NSLog(@"%d: %@", (int)aPreset->presetNumber, aPreset->presetName);
}

我该如何解决我的问题?我已经试过NVDSP了,但它似乎也不起作用。我在网上没有找到任何其他的解决方案。

谢谢你,法比安。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-13 21:00:47

如果这是针对iOS的,那么您需要使用kAudioUnitSubType_RemoteIO而不是kAudioUnitSubType_GenericOutput。

票数 0
EN

Stack Overflow用户

发布于 2015-05-21 11:22:06

你不能用AVAudioPlayer来做情商,你需要AVPlayer。

有关使用音频龙头的示例项目,请参见此处:

https://developer.apple.com/library/ios/samplecode/AudioTapProcessor/Introduction/Intro.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30218449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档