2017-10-16 8 views
2

Existe-t-il un moyen de fondre un son à partir d'un AKOperationGenerator?AudioKit: Fondu à partir de AKOperationGenerator

E.g. dans le code ci-dessous .start() commence à pleine amplitude avec un clic.

let whiteNoiseGenerator = AKOperationGenerator { _ in 

    let white = AKOperation.whiteNoise() 
    return white 
} 


AudioKit.output = whiteNoiseGenerator 
whiteNoiseGenerator.start() 

Répondre

1

Il y a beaucoup de façons de peler ce chat. Je vais vous donner un couple:

On serait d'envelopper le générateur de bruit dans un AKBooster:

let volumeControl = AKBooster(whiteNoiseGenerator) 
volumeControl.gain = 0 
volumeControl.rampTime = 1 // number of seconds to fade in/out 
AudioKit.output = volumeControl 
AudioKit.start() // Don't forget this, I assume you just didn't paste it in 
whiteNoiseGenerator.start() // nothing will be heard 

Ensuite, démarrer et arrêter le son sera juste fait en mettant

volumeControl.gain = 1 // or 0 for stopping 

Alternativement, je sais que vous vouliez savoir comment faire cela dans le contexte d'une opération, donc vous pouvez le faire en donnant à votre opération des paramètres de gain et de temps de portamento:

let whiteNoiseGenerator = AKOperationGenerator { parameters in 

    let white = AKOperation.whiteNoise() * parameters[0].portamento(halfDuration: parameters[1]) 
    return white 
} 

whiteNoiseGenerator.parameters = [0,0.1] // first number is gain, second is portamento time 
AudioKit.output = whiteNoiseGenerator 
AudioKit.start() 
whiteNoiseGenerator.start() 

Et puis, quand vous voulez allumer le bruit faire:

whiteNoiseGenerator.parameters[0] = 1 

vous obtiendrez une variation douce au volume total sur 0,1 seconde.

HTH!

+0

La 2ème solution fonctionne très bien. Pour le premier, je pense que vous voulez dire: volumeControl.gain = 1 // ou 0 pour l'arrêt –

+0

Une autre approche que j'explore est d'utiliser MPVolumeView incorporer, mais cela semble planter l'application lors de la commutation entre AKOperationGenerators. –

+0

Vous devez faire attention à ce sujet. Idéalement, vous avez juste un moteur audio qui démarre et arrête les générateurs si nécessaire plutôt que de démarrer et d'arrêter AudioKit. Cela peut être un équilibre délicat. –