public void PlaySound(int channel, ResourceSound sound, float volume) { if (channel == 0) { //First available channel for (int i = 0; i < _channels.Length; i++) { if (_channels[i] == null || !_channels[i].Source.IsPlaying) { _channels[i]?.Dispose(); channel = i + 1; break; } } if (channel == 0) { return; } } StopChannel(channel); // convert from DM volume (0-100) to OpenAL volume (db) IClydeAudioSource source = sound.Play(AudioParams.Default.WithVolume(20 * MathF.Log10(volume))); _channels[channel - 1] = new DreamSoundChannel(source); }
private static void ApplyAudioParams(AudioParams?audioParams, IClydeAudioSource source) { if (!audioParams.HasValue) { return; } source.SetPitch(audioParams.Value.PitchScale); source.SetVolume(audioParams.Value.Volume); source.SetPlaybackPosition(audioParams.Value.PlayOffsetSeconds); source.IsLooping = audioParams.Value.Loop; }
public DreamSoundChannel(IClydeAudioSource source) { Source = source; }