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(); } }
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; } } }
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; } }