Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }