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 } }
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); }
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); } }
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); }
private void RemoveSoundFromList(VoiceItem item) { voices.Remove(item); StopVoiceItem(item); }
private void AddSoundToList(VoiceItem item) { voices.Add(item); SetAudioTimeEnds(item); PlayVoiceItem(item); }
private void SetAudioTimeEnds(VoiceItem item) { item.timeEnds = Time.time + item.length; }