/// <summary> /// Start a generator. /// </summary> /// <param name="gen">The </param> /// <param name="samples">The number of samples for the PCM buffer.</param> /// <param name="samplesPerSec">Samples per second for the PCM stream.</param> /// <returns></returns> public int StartGenerator(GenBase gen, float velocity, int samples, int samplesPerSec) { AudioSource source = null; if (this.audioSources.Count > 0) { int lastIdx = this.audioSources.Count - 1; source = this.audioSources[lastIdx]; this.audioSources.RemoveAt(lastIdx); } if (source == null) { source = this.sourceHost.AddComponent <AudioSource>(); } int retId = this.ctr; ++this.ctr; source.volume = this.masterVol * velocity; // Wrap meter analysis around it if needed. // Users of the meter "just have to know" that the meter results // are put into MeterValue.DefaultMeter if (this.metered == true) { GenMeter genMeter = new GenMeter(gen); gen = genMeter; meterRecords.Add(genMeter, new MeterRecord(genMeter, source)); } PlayingNote pn = new PlayingNote(); pn.id = retId; pn.velocity = velocity; pn.generator = gen; pn.clip = AudioClip.Create( "StreamedKeyNote", samples, 1, samplesPerSec, #if UNITY_WEBGL && !UNITY_EDITOR false, #else true, #endif pn.generator.ReaderCallback); pn.source = source; pn.source.loop = true; pn.source.clip = pn.clip; pn.source.Play(); this.activeNotes.Add(retId, pn); return(retId); }
public MeterRecord(GenMeter meter, AudioSource playingSource) { this.meter = meter; this.meterValue = meter.Meter; this.playingSource = playingSource; }