首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编辑AUGraph的默认仪器?

如何编辑AUGraph的默认仪器?
EN

Stack Overflow用户
提问于 2012-03-20 22:55:17
回答 2查看 1.9K关注 0票数 0

我正在使用MusicPlayer应用程序接口。我知道,当您将.mid作为序列加载时,API会为您创建一个包含AUSampler的默认AUGraph。此AUSampler使用一个简单的基于正弦波的仪器来合成.mid中的音符

我的问题是,如何更改AUSampler中的默认仪器?我知道您可以使用SoundFont2文件(.sf2)并使用AudioUnitSetProperty方法添加它们。但是,如何访问这个默认的AUGraph呢?您是必须先打开图形才能编辑AudioUnit,还是仅为了编辑节点之间的连接而打开图形?

谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 10:37:22

您可以看看Audiograph示例。它不使用soundFonts,但应该可以让您了解如何设置图形。

当我使用MusicPlayer时,我总是从代码/图形用户界面生成midi音符数据,并从头开始创建AUGraph (使用混音器)。有一些方法可以派生/提取从加载midi文件(下面的示例代码)产生的默认生成的AUGraph & AUSampler,但我从未成功地以这种方式设置新的soundFont。另一方面,从头开始创建AUGraph,然后加载.sf2文件效果很好。

代码语言:javascript
复制
AUGraph graph;
result =  MusicSequenceGetAUGraph (sequence, &graph);

MusicTrack firstTrack;
result =  MusicSequenceGetIndTrack (sequence, 0, &firstTrack);

AUNode myNode;
result = MusicTrackGetDestNode(firstTrack,&myNode);

AudioUnit mySamplerUnit;
result = AUGraphNodeInfo(graph, myNode, 0, &mySamplerUnit);
票数 0
EN

Stack Overflow用户

发布于 2012-03-23 05:18:12

我已经写了一个关于这方面的教程,但是here,下面是这个过程的概要:

加载Sound Font文件的函数(取自Apple文档):

代码语言:javascript
复制
    -(OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber {

OSStatus result = noErr;

// fill out a bank preset data structure
AUSamplerBankPresetData bpdata;
bpdata.bankURL  = (__bridge CFURLRef) bankURL;
bpdata.bankMSB  = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB  = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) presetNumber;

// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty([pointer to your AUSampler node here],
                          kAUSamplerProperty_LoadPresetFromBank,
                          kAudioUnitScope_Global,
                          0,
                          &bpdata,
                          sizeof(bpdata));

// check for errors
NSCAssert (result == noErr,
       @"Unable to set the preset property on the Sampler. Error code:%d '%.4s'",
       (int) result,
       (const char *)&result);

return result; }

然后,您需要从Resources文件夹中加载Sound Font:

代码语言:javascript
复制
NSURL *presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Name of sound font" ofType:@"sf2"]];

// Initialise the sound font
[self loadFromDLSOrSoundFont: (NSURL *)presetURL withPatch: (int)10];

希望这能有所帮助!

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

https://stackoverflow.com/questions/9789179

复制
相关文章

相似问题

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