コード例 #1
0
        private void StopVoiceItem(VoiceItem item)
        {
            item.isGarbage = true;

            if (item.loop)
            {
                if (item.source != null)
                {
                    item.source.Stop();
                }
            }
            else
            {
                //no way to stop one-shots
            }
        }
コード例 #2
0
        private void AttemptAddSoundToList(VoiceItem item)
        {
            //count number of voices in list that are in right list
            AudioTrack track = item.track;
            int        numberOfTrackVoices = 0;

            //straight add voice
            foreach (VoiceItem voice in voices)
            {
                if (voice.track == item.track)
                {
                    numberOfTrackVoices++;
                }
            }

            if (numberOfTrackVoices < GetNumberOfVoicesAssignedToChannel(item.track))
            {
                AddSoundToList(item);
                return;
            }

            //check if voices are lower priority
            int lowestPriorityFound        = highestPriority;
            int indexOfLowestPriorityFound = -1;

            for (int i = 0; i < voices.Count; i++)
            {
                if (voices[i].track == item.track)
                {
                    if (voices[i].priority <item.priority && voices[i].priority> lowestPriorityFound)
                    {
                        indexOfLowestPriorityFound = i;
                    }
                }
            }

            if (indexOfLowestPriorityFound > -1)
            {
                RemoveSoundFromList(voices[indexOfLowestPriorityFound]);
                AddSoundToList(item);
            }

            //Debug.Log("number of voices assigned to channel: " + GetNumberOfVoicesAssignedToChannel(item.track));
            //Debug.Log(numberOfTrackVoices);
        }
コード例 #3
0
        private void PlayVoiceItem(VoiceItem item)
        {
            if (item.source.outputAudioMixerGroup == null)
            {
                SetAudioSourceToSFXChannel(item.source, item.track);
            }

            if (item.loop)
            {
                item.source.clip = item.clip;
                item.source.loop = true;
                item.source.Play();
            }
            else
            {
                item.source.PlayOneShot(item.clip);
            }
        }
コード例 #4
0
        private VoiceItem CreateNewVoiceItemFromCue(AudioCue cue, AudioPlayType type, int priority)
        {
            priority = Mathf.Clamp(priority, highestPriority, lowestPriority);

            var newClip = cue.SelectClip();

            VoiceItem item = new VoiceItem
            {
                clip      = newClip,
                track     = cue.GetTrack(),
                source    = null,   //to be assigned
                loop      = IsLooping(type),
                length    = newClip.length,
                timeEnds  = Time.time + newClip.length,
                priority  = priority,
                isPlaying = false,
                isGarbage = false
            };

            return(item);
        }
コード例 #5
0
 private void RemoveSoundFromList(VoiceItem item)
 {
     voices.Remove(item);
     StopVoiceItem(item);
 }
コード例 #6
0
 private void AddSoundToList(VoiceItem item)
 {
     voices.Add(item);
     SetAudioTimeEnds(item);
     PlayVoiceItem(item);
 }
コード例 #7
0
 private void SetAudioTimeEnds(VoiceItem item)
 {
     item.timeEnds = Time.time + item.length;
 }