作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试编写一个添加音效的 iOS 应用。我正在尝试在 auconverter 和 remoteIO 之间放置一个效果音频单元(例如,失真和混响)。设置好上述AU后,没有声音。
NewAUGraph(&mAuGraph);
AUGraphOpen(mAuGraph);
AUNode remoteOutputNode, converterNode, effectNode;
AudioUnit remoteIOAudioUnit, converterUnit, effectUnit;
AudioComponentDescription cd;
cd.componentManufacturer = kAudioUnitManufacturer_Apple;
cd.componentFlags = cd.componentFlagsMask = 0;
// remote io
cd.componentType = kAudioUnitType_Output;
cd.componentSubType = kAudioUnitSubType_RemoteIO;
AUGraphAddNode(mAuGraph, &cd, &remoteOutputNode);
// converter
cd.componentType = kAudioUnitType_FormatConverter;
cd.componentSubType = kAudioUnitSubType_AUConverter;
AUGraphAddNode(mAuGraph, &cd, &converterNode);
// ipodeq
cd.componentType = kAudioUnitType_Effect;
cd.componentSubType = kAudioUnitSubType_Distortion;
AUGraphAddNode(mAuGraph, &cd, &effectNode);
//callback
AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = renderCallback;
callbackStruct.inputProcRefCon = &audioDataInfo;
AUGraphSetNodeInputCallback(mAuGraph, converterNode, 0, &callbackStruct);
// set audio unit asbd
AudioStreamBasicDescription audioFormat = AUCanonicalASBD(44100.0, audioDataInfo.inputFormat.mChannelsPerFrame);
AUGraphNodeInfo(mAuGraph, converterNode, NULL, &converterUnit);
AudioUnitSetProperty(converterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioDataInfo.inputFormat, sizeof(AudioStreamBasicDescription));
AudioUnitSetProperty(converterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(AudioStreamBasicDescription));
// get effect unit
AUGraphNodeInfo(mAuGraph, effectNode, NULL, &effectUnit);
// set effect unit asbd
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription));
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat));
// set remoteio unit asbd
AUGraphNodeInfo(mAuGraph, remoteOutputNode, 0, &remoteIOAudioUnit);
AudioUnitSetProperty(remoteIOAudioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription));
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0);
AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0);
AUGraphInitialize(mAuGraph);
在 AUGraphConnectNodeInput
部分,如果没有
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0);
AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0);
但是
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, remoteOutputNode, 0);
它会发出没有效果的声音。
最佳答案
诚然,我之前对您的问题一无所知,因此我稍微查看了您的代码,并查看了 Mac 开发人员的 CoreAudioOverview.pdf这导致我到处都是。我没有在您的代码中看到任何太偷偷摸摸的事情。它看起来很紧,但我确实对这些行感到好奇:
// set effect unit asbd
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription));
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat));
最特别的为什么这里有两行。你不应该只有第一行吗?
只是一个想法。
如果这没有任何值(value),那么,您是否检查过以确保您的音频图都已正确连接。你也可以尝试不同的效果,看看是否有效?
这个项目取得了很好的成功。干杯!
关于objective-c - 如何设置 kAudioUnitSubType_Distortion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234023/
我正在尝试编写一个添加音效的 iOS 应用。我正在尝试在 auconverter 和 remoteIO 之间放置一个效果音频单元(例如,失真和混响)。设置好上述AU后,没有声音。 NewAUG
我是一名优秀的程序员,十分优秀!