mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'audioless' into 'master'
Allow the game to start without an audio device See merge request veloren/veloren!874
This commit is contained in:
commit
0d6e3028da
@ -238,11 +238,8 @@ impl AudioFrontend {
|
||||
|
||||
/// Returns the default audio device.
|
||||
/// Does not return rodio Device struct in case our audio backend changes.
|
||||
pub fn get_default_device() -> String {
|
||||
rodio::default_output_device()
|
||||
.expect("No audio output devices detected.")
|
||||
.name()
|
||||
.expect("Unable to get device name")
|
||||
pub fn get_default_device() -> Option<String> {
|
||||
rodio::default_output_device().map(|dev| dev.name().expect("Unable to get device name"))
|
||||
}
|
||||
|
||||
/// Returns a vec of the audio devices available.
|
||||
|
@ -1,4 +1,5 @@
|
||||
#![deny(unsafe_code)]
|
||||
#![feature(bool_to_option)]
|
||||
#![recursion_limit = "2048"]
|
||||
|
||||
use veloren_voxygen::{
|
||||
@ -7,7 +8,7 @@ use veloren_voxygen::{
|
||||
logging,
|
||||
menu::main::MainMenuState,
|
||||
meta::Meta,
|
||||
settings::Settings,
|
||||
settings::{AudioOutput, Settings},
|
||||
window::Window,
|
||||
Direction, GlobalState, PlayState, PlayStateResult,
|
||||
};
|
||||
@ -44,16 +45,13 @@ fn main() {
|
||||
panic!("Failed to save settings: {:?}", err);
|
||||
}
|
||||
|
||||
let audio_device = || match &settings.audio.audio_device {
|
||||
Some(d) => d.to_string(),
|
||||
None => audio::get_default_device(),
|
||||
};
|
||||
|
||||
let mut audio = if settings.audio.audio_on {
|
||||
AudioFrontend::new(audio_device(), settings.audio.max_sfx_channels)
|
||||
} else {
|
||||
AudioFrontend::no_audio()
|
||||
};
|
||||
let mut audio = match settings.audio.output {
|
||||
AudioOutput::Off => None,
|
||||
AudioOutput::Automatic => audio::get_default_device(),
|
||||
AudioOutput::Device(ref dev) => Some(dev.clone()),
|
||||
}
|
||||
.map(|dev| AudioFrontend::new(dev, settings.audio.max_sfx_channels))
|
||||
.unwrap_or_else(AudioFrontend::no_audio);
|
||||
|
||||
audio.set_music_volume(settings.audio.music_volume);
|
||||
audio.set_sfx_volume(settings.audio.sfx_volume);
|
||||
|
@ -36,7 +36,7 @@ impl PlayState for MainMenuState {
|
||||
let mut client_init: Option<ClientInit> = None;
|
||||
|
||||
// Kick off title music
|
||||
if global_state.settings.audio.audio_on && global_state.audio.music_enabled() {
|
||||
if global_state.settings.audio.output.is_enabled() && global_state.audio.music_enabled() {
|
||||
global_state.audio.play_title_music();
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ use crate::{
|
||||
menu::char_selection::CharSelectionState,
|
||||
render::Renderer,
|
||||
scene::{camera, Scene, SceneData},
|
||||
settings::AudioOutput,
|
||||
window::{AnalogGameInput, Event, GameInput},
|
||||
Direction, Error, GlobalState, PlayState, PlayStateResult,
|
||||
};
|
||||
@ -613,7 +614,7 @@ impl PlayState for SessionState {
|
||||
HudEvent::ChangeAudioDevice(name) => {
|
||||
global_state.audio.set_device(name.clone());
|
||||
|
||||
global_state.settings.audio.audio_device = Some(name);
|
||||
global_state.settings.audio.output = AudioOutput::Device(name);
|
||||
global_state.settings.save_to_file_warn();
|
||||
},
|
||||
HudEvent::ChangeMaxFPS(fps) => {
|
||||
|
@ -461,7 +461,26 @@ impl Default for GraphicsSettings {
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub enum AudioOutput {
|
||||
/// Veloren's audio system wont work on some systems,
|
||||
/// so you can use this to disable it, and allow the
|
||||
/// game to function
|
||||
// If this option is disabled, functions in the rodio
|
||||
// library MUST NOT be called.
|
||||
Off,
|
||||
Automatic,
|
||||
Device(String),
|
||||
}
|
||||
|
||||
impl AudioOutput {
|
||||
pub fn is_enabled(&self) -> bool {
|
||||
match self {
|
||||
Self::Off => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
/// `AudioSettings` controls the volume of different audio subsystems and which
|
||||
/// device is used.
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
@ -473,8 +492,7 @@ pub struct AudioSettings {
|
||||
pub max_sfx_channels: usize,
|
||||
|
||||
/// Audio Device that Voxygen will use to play audio.
|
||||
pub audio_device: Option<String>,
|
||||
pub audio_on: bool,
|
||||
pub output: AudioOutput,
|
||||
}
|
||||
|
||||
impl Default for AudioSettings {
|
||||
@ -484,8 +502,7 @@ impl Default for AudioSettings {
|
||||
music_volume: 0.4,
|
||||
sfx_volume: 0.6,
|
||||
max_sfx_channels: 10,
|
||||
audio_device: None,
|
||||
audio_on: true,
|
||||
output: AudioOutput::Automatic,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user