- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 AUGraph 配置
AudioUnitGraph 0x2505000:
Member Nodes:
node 1: 'aufx' 'ipeq' 'appl', instance 0x15599530 O
node 2: 'aufx' 'rvb2' 'appl', instance 0x1566ffd0 O
node 3: 'aufc' 'conv' 'appl', instance 0x15676900 O
node 4: 'aumx' 'mcmx' 'appl', instance 0x15676a30 O
node 5: 'aumx' 'mcmx' 'appl', instance 0x15677ac0 O
node 6: 'aumx' 'mcmx' 'appl', instance 0x15678a40 O
node 7: 'auou' 'rioc' 'appl', instance 0x15679a20 O
node 8: 'augn' 'afpl' 'appl', instance 0x1558b710 O
Connections:
node 7 bus 1 => node 5 bus 0 [ 1 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 5 bus 0 => node 3 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 3 bus 0 => node 2 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
node 2 bus 0 => node 6 bus 0 [ 1 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 8 bus 0 => node 4 bus 0 [ 1 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 4 bus 0 => node 6 bus 1 [ 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 6 bus 0 => node 1 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 1 bus 0 => node 7 bus 0 [ 2 ch, 0 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
CurrentState:
mLastUpdateError=0, eventsToProcess=F, isInitialized=F, isRunning=F
错误
AUGraphInitialize err = -10868
因为我已经在两个混音器单元之间连接了一个混响单元,即使我已经创建了一个转换器单元:
OSStatus err = noErr;
UInt32 micBus = 0;
UInt32 filePlayerBus = 1;
//// ionode:1 ----> vfxNode:0 bus 0
err = AUGraphConnectNodeInput(processingGraph, ioNode, 1, vfxNode, 0);
if (err) { NSLog(@"ioNode:1 ---> vfxNode:0 err = %ld", err); }
//// vfxNode:0 ---> convertNode:0
err = AUGraphConnectNodeInput(processingGraph, vfxNode, 0, convertNode, 0);
//// convertNode:0 ---> vfxRevNode:0
err = AUGraphConnectNodeInput(processingGraph, convertNode, 0, vfxRevNode, 0);
//// vfxRevNode:0 ---> mixerNode:0
err = AUGraphConnectNodeInput(processingGraph, vfxRevNode, 0, mixerNode, micBus );
//if (err) { NSLog(@"vfxRevNode:0 ---> mixerNode:0 err = %ld", err); }
//// vfxNode:0 ----> mixerNode:0
//err = AUGraphConnectNodeInput(processingGraph, vfxNode, 0, mixerNode, micBus );
if (err) { NSLog(@"vfxNode:0 ---> mixerNode:0 err = %ld", err); }
//// audioPlayerNode:0 ----> fxNode:0
err = AUGraphConnectNodeInput(processingGraph, audioPlayerNode, 0, fxNode, 0);
if (err) { NSLog(@"audioPlayerNode:0 ---> fxNode:0 err = %ld", err); }
//// fxNode:0 ----> mixerNode:1
err = AUGraphConnectNodeInput(processingGraph, fxNode, 0, mixerNode, filePlayerBus);
if (err) { NSLog(@"fxNode:0 ---> mixerNode:1 err = %ld", err); }
///// mixerNode:0 ----> eqNode:0
err = AUGraphConnectNodeInput(processingGraph, mixerNode, 0, eqNode, 0);
if (err) { NSLog(@"mixerNode:0 ---> eqNode:0 err = %ld", err); }
//// eqNode:0 ----> ioNode:0
err = AUGraphConnectNodeInput(processingGraph, eqNode, 0, ioNode, 0);
if (err) { NSLog(@"eqNode:0 ---> ioNode:0 err = %ld", err); }
节点如下:
////
//// EQ NODE
////
err = AUGraphAddNode(processingGraph, &EQUnitDescription, &eqNode);
if (err) { NSLog(@"eqNode err = %ld", err); }
////
//// REV NODE
////
err = AUGraphAddNode(processingGraph, &ReverbUnitDescription, &vfxRevNode);
if (err) { NSLog(@"vfxRevNode err = %ld", err); }
////
//// FORMAT CONVERTER NODE
////
err = AUGraphAddNode (processingGraph, &convertUnitDescription, &convertNode);
if (err) { NSLog(@"convertNode err = %ld", err); }
////
//// FX NODE
////
err = AUGraphAddNode(processingGraph, &FXUnitDescription, &fxNode);
if (err) { NSLog(@"fxNode err = %ld", err); }
////
//// VFX NODE
////
err = AUGraphAddNode(processingGraph, &VFXUnitDescription, &vfxNode);
if (err) { NSLog(@"vfxNode err = %ld", err); }
///
/// MIXER NODE
///
err = AUGraphAddNode (processingGraph, &MixerUnitDescription, &mixerNode );
if (err) { NSLog(@"mixerNode err = %ld", err); }
///
/// OUTPUT NODE
///
err = AUGraphAddNode(processingGraph, &iOUnitDescription, &ioNode);
if (err) { NSLog(@"outputNode err = %ld", err); }
////
/// PLAYER NODE
///
err = AUGraphAddNode(processingGraph, &playerUnitDescription, &audioPlayerNode);
if (err) { NSLog(@"audioPlayerNode err = %ld", err); }
和组件描述:
OSStatus err = noErr;
err = NewAUGraph(&processingGraph);
// OUTPUT unit
AudioComponentDescription iOUnitDescription;
iOUnitDescription.componentType = kAudioUnitType_Output;
iOUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;//kAudioUnitSubType_VoiceProcessingIO;//kAudioUnitSubType_RemoteIO;
iOUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
iOUnitDescription.componentFlags = 0;
iOUnitDescription.componentFlagsMask = 0;
// MIXER unit
AudioComponentDescription MixerUnitDescription;
MixerUnitDescription.componentType = kAudioUnitType_Mixer;
MixerUnitDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer;
MixerUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
MixerUnitDescription.componentFlags = 0;
MixerUnitDescription.componentFlagsMask = 0;
// PLAYER unit
AudioComponentDescription playerUnitDescription;
playerUnitDescription.componentType = kAudioUnitType_Generator;
playerUnitDescription.componentSubType = kAudioUnitSubType_AudioFilePlayer;
playerUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
// EQ unit
AudioComponentDescription EQUnitDescription;
EQUnitDescription.componentType = kAudioUnitType_Effect;
EQUnitDescription.componentSubType = kAudioUnitSubType_AUiPodEQ;
EQUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
EQUnitDescription.componentFlags = 0;
EQUnitDescription.componentFlagsMask = 0;
// Reverb unit
AudioComponentDescription ReverbUnitDescription;
ReverbUnitDescription.componentType = kAudioUnitType_Effect;
ReverbUnitDescription.componentSubType = kAudioUnitSubType_Reverb2;
ReverbUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
ReverbUnitDescription.componentFlags = 0;
ReverbUnitDescription.componentFlagsMask = 0;
// Format Converter between VFX and Reverb units
AudioComponentDescription convertUnitDescription;
convertUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
convertUnitDescription.componentType = kAudioUnitType_FormatConverter;
convertUnitDescription.componentSubType = kAudioUnitSubType_AUConverter;
convertUnitDescription.componentFlags = 0;
convertUnitDescription.componentFlagsMask = 0;
// FX unit
AudioComponentDescription FXUnitDescription;
FXUnitDescription.componentType = kAudioUnitType_Mixer;
FXUnitDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer;
FXUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
FXUnitDescription.componentFlags = 0;
FXUnitDescription.componentFlagsMask = 0;
// VFX unit
AudioComponentDescription VFXUnitDescription;
VFXUnitDescription.componentType = kAudioUnitType_Mixer;
VFXUnitDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer;
VFXUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
VFXUnitDescription.componentFlags = 0;
VFXUnitDescription.componentFlagsMask = 0;
我创建了转换器节点的设置,将输入节点流格式(即混合器单元)作为输入,将输出节点流格式作为输出格式(即混响)
OSStatus err = noErr;
err = AUGraphNodeInfo(processingGraph, convertNode, NULL, &convertUnit);
if (err) { NSLog(@"setupConverterUnit error = %ld", err); }
// set converter input format to vfxunit format
AudioStreamBasicDescription asbd = {0};
size_t bytesPerSample;
bytesPerSample = sizeof(SInt16);
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
asbd.mBitsPerChannel = 8 * bytesPerSample;
asbd.mFramesPerPacket = 1;
asbd.mChannelsPerFrame = 1;
asbd.mBytesPerPacket = bytesPerSample * asbd.mFramesPerPacket;
asbd.mBytesPerFrame = bytesPerSample * asbd.mChannelsPerFrame;
asbd.mSampleRate = sampleRate;
err = AudioUnitSetProperty(convertUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &asbd, sizeof(asbd));
if (err) { NSLog(@"setupConverterUnit kAudioUnitProperty_StreamFormat error = %ld", err); }
// set converter output format to reverb format
UInt32 streamFormatSize = sizeof(monoStreamFormat);
err = AudioUnitSetProperty(convertUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &monoStreamFormat, streamFormatSize);
if (err) { NSLog(@"setupConverterUnit kAudioUnitProperty_StreamFormat error = %ld", err); }
混响单元配置如下:
OSStatus err = noErr;
err = AUGraphNodeInfo(processingGraph, vfxRevNode, NULL, &vfxRevUnit);
if (err) { NSLog(@"setupReverbUnit err = %ld", err); }
UInt32 size = sizeof(mReverbPresetArray);
err = AudioUnitGetProperty(vfxRevUnit, kAudioUnitProperty_FactoryPresets, kAudioUnitScope_Global, 0, &mReverbPresetArray, &size);
if (err) { NSLog(@"kAudioUnitProperty_FactoryPresets err = %ld", err); }
printf("setupReverbUnit Preset List:\n");
UInt8 count = CFArrayGetCount(mReverbPresetArray);
for (int i = 0; i < count; ++i) {
AUPreset *aPreset = (AUPreset*)CFArrayGetValueAtIndex(mReverbPresetArray, i);
CFShow(aPreset->presetName);
}
输入混合器单元为
OSStatus err;
err = AUGraphNodeInfo(processingGraph, vfxNode, NULL, &vfxUnit);
if (err) { NSLog(@"setVFxUnit err = %ld", err); }
UInt32 busCount = 1;
err = AudioUnitSetProperty (
vfxUnit,
kAudioUnitProperty_ElementCount,
kAudioUnitScope_Input,
0,
&busCount,
sizeof (busCount)
);
AudioStreamBasicDescription asbd = {0};
size_t bytesPerSample;
bytesPerSample = sizeof(SInt16);
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
asbd.mBitsPerChannel = 8 * bytesPerSample;
asbd.mFramesPerPacket = 1;
asbd.mChannelsPerFrame = 1;
asbd.mBytesPerPacket = bytesPerSample * asbd.mFramesPerPacket;
asbd.mBytesPerFrame = bytesPerSample * asbd.mChannelsPerFrame;
asbd.mSampleRate = sampleRate;
err = AudioUnitSetProperty (
vfxUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&asbd,
sizeof (asbd)
);
到目前为止还没有办法让它发挥作用。我需要混响单元在那里,因为我只在进入下一个混音器单元之前才需要它在麦克风输入上。
转换器上的 AudioStreamBasicDescription 我哪里错了?
编辑发生的事情是没有声音。音频图未初始化,出现错误
AUGraphInitialize err = -10868
这里描述的图可以这样描述
连接到 vfxNode 的麦克风输入以获取渲染回调。它连接到总线 0 上的混音器。歌曲播放器节点连接到另一个混音器,其中有第二个渲染回调处理播放中的音频。它连接到链中最后一个调音台的总线 1。 eq 节点将混音器连接到输出 ioNode。
当在 fx 混音器 (vfxNode) 和混响之间使用转换器节点时,不再有声音:
//// vfxNode:0 ---> convertNode:0
err = AUGraphConnectNodeInput(processingGraph, vfxNode, 0, convertNode, 0);
//// convertNode:0 ---> vfxRevNode:0
err = AUGraphConnectNodeInput(processingGraph, convertNode, 0, vfxRevNode, 0);
//// vfxRevNode:0 ---> mixerNode:0
err = AUGraphConnectNodeInput(processingGraph, vfxRevNode, 0, mixerNode, micBus );
//if (err) { NSLog(@"vfxRevNode:0 ---> mixerNode:0 err = %ld", err); }
没有混响节点,因此没有转换器节点,一切正常:
//// ionode:1 ----> vfxNode:0 bus 0
err = AUGraphConnectNodeInput(processingGraph, ioNode, 1, vfxNode, 0);
if (err) { NSLog(@"ioNode:1 ---> vfxNode:0 err = %ld", err); }
//// vfxNode:0 ----> mixerNode:0
err = AUGraphConnectNodeInput(processingGraph, vfxNode, 0, mixerNode, micBus );
if (err) { NSLog(@"vfxNode:0 ---> mixerNode:0 err = %ld", err); }
最佳答案
你还没有说问题是什么(错误,没有声音等),但我愿意猜测一下。这些效果单元更喜欢浮点 PCM,并且通常会拒绝连接到任何非浮点的东西(非效果单元通常默认为整数或定点)。当您尝试启动图形时,是否得到 -50(paramErr)?
我发现要使用效果单元我必须做的是读取效果单元默认的 ASBD(在输入或输出范围),然后在整个图表中设置它(其他单元通常愿意接受浮点 ASBD)。请注意,这将是大约 100 行样板文件,您从每个节点获取单位,从效果的输入或输出范围获取 ASBD(不要认为哪个重要),然后将其设置为接收到的格式或由图表中的任何单位产生。祝你好运。
关于ios - AudioUnit kAudioUnitSubType_Reverb2 和 kAudioUnitType_FormatConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871535/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!