/// <summary> /// Selects which implementation of the Audio subsystem to use. /// </summary> /// <param name="impl">A <see cref="AudioImplementation"/> value corresponding to one of /// the Ultraviolet Framework's Audio subsystem implementations.</param> public void SelectAudioImplementation(AudioImplementation impl) { var version = Assembly.GetExecutingAssembly().GetName().Version; var asmname = String.Empty; switch (impl) { case AudioImplementation.BASS: asmname = "Ultraviolet.BASS"; break; case AudioImplementation.FMOD: asmname = "Ultraviolet.FMOD"; break; default: throw new ArgumentException(nameof(impl)); } #if SIGNED AudioSubsystemAssembly = $"{asmname}, Version={version}, Culture=neutral, PublicKeyToken=78da2f4877323311, processorArchitecture=MSIL"; #else AudioSubsystemAssembly = $"{asmname}, Version={version}, Culture=neutral, processorArchitecture=MSIL"; #endif }
public void SongPlayer_SlidesVolumeCorrectly(AudioImplementation audioImplementation) { var songPlayer = default(SongPlayer); var song = default(Song); GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { songPlayer = SongPlayer.Create(); song = content.Load <Song>("Songs/Deep Haze"); songPlayer.Play(song, false); TheResultingValue(songPlayer.Volume).ShouldBe(1f); songPlayer.SlideVolume(0f, TimeSpan.FromSeconds(1)); }) .OnUpdate((app, time) => { songPlayer.Update(time); }) .RunFor(TimeSpan.FromSeconds(2)); TheResultingValue(songPlayer.Volume).ShouldBe(0f); }
public void SongPlayer_PlayResetsVolumePitchAndPanWhenNotSpecified(AudioImplementation audioImplementation) { var songPlayer = default(SongPlayer); var song = default(Song); GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { songPlayer = SongPlayer.Create(); song = content.Load <Song>("Songs/Deep Haze"); songPlayer.Play(song, 0.25f, 0.50f, 0.75f, false); songPlayer.Stop(); songPlayer.Play(song, false); TheResultingValue(songPlayer.Volume).ShouldBe(1f); TheResultingValue(songPlayer.Pitch).ShouldBe(0f); TheResultingValue(songPlayer.Pan).ShouldBe(0f); }) .OnUpdate((app, time) => { songPlayer.Update(time); }) .RunForOneFrame(); }
public void SoundEffectPlayer_SlidesPanCorrectly(AudioImplementation audioImplementation) { var sfxPlayer = default(SoundEffectPlayer); var sfx = default(SoundEffect); GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { sfxPlayer = SoundEffectPlayer.Create(); sfx = content.Load <SoundEffect>("SoundEffects/grenade"); sfxPlayer.Play(sfx, false); TheResultingValue(sfxPlayer.Pan).ShouldBe(0f); sfxPlayer.SlidePan(-1f, TimeSpan.FromSeconds(1)); }) .OnUpdate((app, time) => { sfxPlayer.Update(time); }) .RunFor(TimeSpan.FromSeconds(2)); TheResultingValue(sfxPlayer.Pan).ShouldBe(-1f); }
public void SoundEffectPlayer_PlaySetsVolumePitchAndPan(AudioImplementation audioImplementation) { var sfxPlayer = default(SoundEffectPlayer); var sfx = default(SoundEffect); GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { sfxPlayer = SoundEffectPlayer.Create(); sfx = content.Load <SoundEffect>("SoundEffects/grenade"); sfxPlayer.Play(sfx, 0.25f, 0.50f, 0.75f, false); TheResultingValue(sfxPlayer.Volume).ShouldBe(0.25f); TheResultingValue(sfxPlayer.Pitch).ShouldBe(0.50f); TheResultingValue(sfxPlayer.Pan).ShouldBe(0.75f); }) .OnUpdate((app, time) => { sfxPlayer.Update(time); }) .RunForOneFrame(); }
/// <inheritdoc/> public IUltravioletTestApplication WithAudioImplementation(AudioImplementation audioImplementation) { switch (audioImplementation) { case AudioImplementation.BASS: return(WithPlugin(new BASSAudioPlugin())); case AudioImplementation.FMOD: return(WithPlugin(new FMODAudioPlugin())); default: throw new ArgumentOutOfRangeException(nameof(audioImplementation)); } }
public void Song_LoadsTags_FromOggVorbisFile(AudioImplementation audioImplementation) { var song = default(Song); GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { song = content.Load <Song>("Songs/Tone"); TheResultingString(song.Tags["CUSTOM_TAG1"].Value) .ShouldBe("Hello, world!"); TheResultingString(song.Tags["CUSTOM_TAG2"].Value) .ShouldBe("1234"); TheResultingValue(song.Tags["CUSTOM_TAG2"].As <Int32>()) .ShouldBe(1234); }) .RunForOneFrame(); }
public void SongPlayer_ThrowsExceptionIfPanSetWhileNotPlaying(AudioImplementation audioImplementation) { var songPlayer = default(SongPlayer); Assert.That(() => { GivenAnUltravioletApplicationWithNoWindow() .WithAudioImplementation(audioImplementation) .WithInitialization(uv => uv.GetAudio().AudioMuted = true) .WithContent(content => { songPlayer = SongPlayer.Create(); songPlayer.Pan = 0f; }) .OnUpdate((app, time) => { songPlayer.Update(time); }) .RunFor(TimeSpan.FromSeconds(1)); }, Throws.TypeOf <InvalidOperationException>()); }
/// <inheritdoc/> public IUltravioletTestApplication WithAudioImplementation(AudioImplementation audioImplementation) { this.audioImplementation = audioImplementation; return(this); }