示例#1
0
            /// <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);
            }
示例#2
0
 public MeterRecord(GenMeter meter, AudioSource playingSource)
 {
     this.meter         = meter;
     this.meterValue    = meter.Meter;
     this.playingSource = playingSource;
 }