internal MySourceVoice GetVoice(MyCueId cueId, MyInMemoryWave wave, CuePart part = CuePart.Start) { MyWaveFormat myWaveFormat = new MyWaveFormat() { Encoding = wave.WaveFormat.Encoding, Channels = wave.WaveFormat.Channels, SampleRate = wave.WaveFormat.SampleRate, WaveFormat = wave.WaveFormat }; MySourceVoice voice = m_voicePools[myWaveFormat].NextAvailable(); if (voice == null) { return(null); } voice.Flush(); voice.SubmitSourceBuffer(cueId, wave, part); if (m_applyReverb) { voice.Voice.SetEffectChain(m_effectDescriptor); voice.Voice.EnableEffect(0); } else { voice.Voice.SetEffectChain(null); } return(voice); }
internal MyInMemoryWave GetRandomWave(MySoundData cue, MySoundDimensions type, out int waveNumber, out CuePart part, int tryIgnoreWaveNumber = -1) { int counter = 0; foreach (var w in cue.Waves) { if (w.Type == type) { counter++; } } waveNumber = MyUtils.GetRandomInt(counter); if (counter > 2 && waveNumber == tryIgnoreWaveNumber) { waveNumber = (waveNumber + 1) % (counter); // TODO: Do this better } var wave = GetWave(cue, type, waveNumber, CuePart.Start); if (wave != null) { part = CuePart.Start; } else { wave = GetWave(cue, type, waveNumber, CuePart.Loop); part = CuePart.Loop; } return(wave); }
internal MyInMemoryWave GetWave(MySoundData cue, MySoundDimensions dim, int waveNumber, CuePart cuePart) { if (m_waveBank == null) { return(null); } foreach (var wave in cue.Waves) { if (wave.Type == dim) { if (waveNumber == 0) { switch (cuePart) { case CuePart.Start: return(m_waveBank.GetWave(wave.Start)); case CuePart.Loop: return(m_waveBank.GetWave(wave.Loop)); case CuePart.End: return(m_waveBank.GetWave(wave.End)); } } waveNumber--; } } return(null); }
internal MyInMemoryWave GetRandomWave(MySoundData cue, MySoundDimensions type, out int waveNumber, out CuePart part) { int counter = 0; foreach (var w in cue.Waves) { if (w.Type == type) { counter++; } } waveNumber = MyUtils.GetRandomInt(counter); var wave = GetWave(cue, type, waveNumber, CuePart.Start); if (wave != null) { part = CuePart.Start; } else { wave = GetWave(cue, type, waveNumber, CuePart.Loop); part = CuePart.Loop; } return(wave); }