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!
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 –
Une autre approche que j'explore est d'utiliser MPVolumeView incorporer, mais cela semble planter l'application lors de la commutation entre AKOperationGenerators. –
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. –