Пример #1
0
        public Sound(GameSettings settings, Mixer mixer, ResMan resMan)
        {
            _mixer    = mixer;
            _resMan   = resMan;
            _settings = settings;

            _speechVolL = _speechVolR = _sfxVolL = _sfxVolR = 192;
            _fxQueue    = new QueueElement[MAX_FXQ_LENGTH];
            for (int i = 0; i < _fxQueue.Length; i++)
            {
                _fxQueue[i] = new QueueElement();
            }
        }
Пример #2
0
        private void PlaySample(QueueElement elem)
        {
            var sampleData = _resMan.FetchRes(GetSampleId((int)elem.id));

            for (var cnt = 0; cnt < MAX_ROOMS_PER_FX; cnt++)
            {
                if (_fxList[elem.id].roomVolList[cnt].roomNo != 0)
                {
                    if ((_fxList[elem.id].roomVolList[cnt].roomNo == (int)Logic.ScriptVars[(int)ScriptVariableNames.SCREEN]) ||
                        (_fxList[elem.id].roomVolList[cnt].roomNo == -1))
                    {
                        byte  volL   = (byte)((_fxList[elem.id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255);
                        byte  volR   = (byte)((_fxList[elem.id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255);
                        sbyte pan    = (sbyte)((volR - volL) / 2);
                        byte  volume = (byte)((volR + volL) / 2);

                        if (SystemVars.Platform == Platform.PSX)
                        {
                            int size      = sampleData.ToInt32(0);
                            var audStream = new LoopingAudioStream(new XAStream(new MemoryStream(sampleData, 4, size - 4), 11025), (_fxList[elem.id].type == FX_LOOP) ? 0 : 1);
                            elem.handle = _mixer.PlayStream(SoundType.SFX, audStream, (int)elem.id, volume, pan);
                        }
                        else
                        {
                            uint       size = sampleData.ToUInt32(0x28);
                            AudioFlags flags;
                            if (sampleData.ToUInt16(0x22) == 16)
                            {
                                flags = AudioFlags.Is16Bits | AudioFlags.LittleEndian;
                            }
                            else
                            {
                                flags = AudioFlags.Unsigned;
                            }
                            if (sampleData.ToUInt16(0x16) == 2)
                            {
                                flags |= AudioFlags.Stereo;
                            }
                            var stream = new LoopingAudioStream(new RawStream(flags, 11025, false, new MemoryStream(sampleData, 0x2C, (int)size)),
                                                                (_fxList[elem.id].type == FX_LOOP) ? 0 : 1);
                            elem.handle = _mixer.PlayStream(SoundType.SFX, stream, (int)elem.id, volume, pan);
                        }
                    }
                }
                else
                {
                    break;
                }
            }
        }
Пример #3
0
        private void PlaySample(QueueElement elem)
        {
            var sampleData = _resMan.FetchRes(GetSampleId((int)elem.id));
            for (var cnt = 0; cnt < MAX_ROOMS_PER_FX; cnt++)
            {
                if (_fxList[elem.id].roomVolList[cnt].roomNo != 0)
                {
                    if ((_fxList[elem.id].roomVolList[cnt].roomNo == (int)Logic.ScriptVars[(int)ScriptVariableNames.SCREEN]) ||
                            (_fxList[elem.id].roomVolList[cnt].roomNo == -1))
                    {

                        byte volL = (byte)((_fxList[elem.id].roomVolList[cnt].leftVol * 10 * _sfxVolL) / 255);
                        byte volR = (byte)((_fxList[elem.id].roomVolList[cnt].rightVol * 10 * _sfxVolR) / 255);
                        sbyte pan = (sbyte)((volR - volL) / 2);
                        byte volume = (byte)((volR + volL) / 2);

                        if (SystemVars.Platform == Platform.PSX)
                        {
                            int size = sampleData.ToInt32(0);
                            var audStream = new LoopingAudioStream(new XAStream(new MemoryStream(sampleData, 4, size - 4), 11025), (_fxList[elem.id].type == FX_LOOP) ? 0 : 1);
                            elem.handle = _mixer.PlayStream(SoundType.SFX, audStream, (int)elem.id, volume, pan);
                        }
                        else
                        {
                            uint size = sampleData.ToUInt32(0x28);
                            AudioFlags flags;
                            if (sampleData.ToUInt16(0x22) == 16)
                                flags = AudioFlags.Is16Bits | AudioFlags.LittleEndian;
                            else
                                flags = AudioFlags.Unsigned;
                            if (sampleData.ToUInt16(0x16) == 2)
                                flags |= AudioFlags.Stereo;
                            var stream = new LoopingAudioStream(new RawStream(flags, 11025, false, new MemoryStream(sampleData, 0x2C, (int)size)),
                                                             (_fxList[elem.id].type == FX_LOOP) ? 0 : 1);
                            elem.handle = _mixer.PlayStream(SoundType.SFX, stream, (int)elem.id, volume, pan);
                        }
                    }
                }
                else
                    break;
            }
        }
Пример #4
0
        public Sound(GameSettings settings, Mixer mixer, ResMan resMan)
        {
            _mixer = mixer;
            _resMan = resMan;
            _settings = settings;

            _speechVolL = _speechVolR = _sfxVolL = _sfxVolR = 192;
            _fxQueue = new QueueElement[MAX_FXQ_LENGTH];
            for (int i = 0; i < _fxQueue.Length; i++)
            {
                _fxQueue[i] = new QueueElement();
            }
        }