Le code suivant configure le moteur audio iOS pour créer des échantillonneurs qui sont configurés avec une police son (pour simplifier la discussion). J'utilise ensuite les samples pour jouer des notes MIDI et tout fonctionne bien jusqu'à ce que j'essaie d'introduire une chaîne d'effets standards (distorsion -> delay -> reverb).Comment configurer correctement une chaîne d'AVAudioUnitEffects
Si la sortie des échantillonneurs est simplement connectée directement au MainMixerNode du moteur audio, cela fonctionne. Si je connecte les samplers à l'effet de distorsion (le premier effet de la chaîne) alors dès que je tente de jouer la première note MIDI, j'obtiens une erreur "AVAudioUnitMIDIInstrument.mm:103: - [AVAudioUnitMIDIInstrument startNote: withVelocity: onChannel:]: erreur -10867 "
NOTE: Je code en utilisant Xamarin sur Mac, donc ce qui suit peut sembler peu familier mais j'espère que le code est assez lisible pour votre aide.
La question est simplement de savoir où je vais mal dans l'initialisation de mes effets/ou de la chaîne de ceux-ci?
Merci à l'avance, Chris
private void InitAudioEngine(NSUrl sampleFileUrl)
{
AVAudioSession.SharedInstance().Init();
NSError sessionErrorCode;
sessionErrorCode = AVAudioSession.SharedInstance().SetCategory (AVAudioSessionCategory.Playback);
if(sessionErrorCode != null)
Logger.Write ("Failed to set AudioSession category");
sessionErrorCode = AVAudioSession.SharedInstance().SetActive (true);
if(sessionErrorCode != null)
Logger.Write ("Failed to activate AudioSession");
Logger.Write ("Instantiate Audio Engine");
_audioEngine = new AVAudioEngine();
_samplers = new List<AVAudioUnitSampler>();
var distortion = new AVAudioUnitDistortion();
var delay = new AVAudioUnitDelay();
var reverb = new AVAudioUnitReverb();
distortion.Init();
delay.Init();
reverb.Init();
distortion.LoadFactoryPreset (AVAudioUnitDistortionPreset.SpeechGoldenPi);
reverb.LoadFactoryPreset (AVAudioUnitReverbPreset.LargeHall2);
delay.DelayTime = 300;
delay.WetDryMix = 30;
delay.Feedback = 30;
_audioEngine.AttachNode (distortion);
_audioEngine.AttachNode (delay);
_audioEngine.AttachNode (reverb);
_audioEngine.Connect (distortion, delay, delay.GetBusOutputFormat (0));
_audioEngine.Connect (delay, reverb, reverb.GetBusOutputFormat (0));
_audioEngine.Connect (reverb, _audioEngine.MainMixerNode, _audioEngine.MainMixerNode.GetBusOutputFormat (0));
for (int index = 0; index < 15; index++)
{
var sampler = new AVAudioUnitSampler();
sampler.Init();
_samplers.Add (sampler);
_audioEngine.AttachNode (sampler);
_audioEngine.Connect (sampler, distortion, distortion.GetBusOutputFormat(0));
}
// Connect all the samplers to a defined SoundFont
ConnectSoundbank (sampleFileUrl);
NSError engineErrorCode;
_audioEngine.StartAndReturnError (out engineErrorCode);
if(engineErrorCode != null)
Logger.Write ("Failed to start AudioEngine after samplers attached");
}
// ...
// Later code
// Play a MIDI note on one of the samplers configured above
//
_samplers[0].StartNote(58,127,0); // Crashes with error -10867 (uninitialised)
//...etc...
Dès que mon git repos sera aligné, je posterai le code. –