Audio: always target 48000hz f32 audio
Resampling, which requires fairly involved (and certainly not free) filters, is needed if the audio we are mixing does not match the sample rate of the output device. Most OS audio APIs support resampling on their own, but have preferred hardware formats. Most console hardware since Xbox/PS2/GC supposedly prefers 48khz natively, but otherwise there seems to be no big preference between 48khz or 44.1khz. The important aspect is that we pick one, and encourage people to keep their audio in one, so that runtime resampling is not required (both in mach itself, and potentially without-our-knowledge in the OS audio system if we chose a sample rate which the native hardware does not prefer.) General guidance will be: * `mach.Audio` module will always aim to select 48khz, f32 audio output from the OS APIs. Let the OS APIs do resampling, or if they do not then we can do so. * We will prefer 48khz, f32 audio samples everywhere internally in our basic audio mixing etc. APIs. * Tooling will aim to convert audio to Opus (or flac for lossless) format, with 48khz and number of channels depending on audio type (e.g. 1ch for most sfx, any number of channels for bgm, and maybe some exception for multi-channel sfx in the future.) Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
5bd6d0cf3d
commit
9d95fcf0c2
1 changed files with 2 additions and 1 deletions
|
|
@ -50,7 +50,8 @@ fn init(audio: *Mod, on_state_change: mach.AnyEvent) !void {
|
||||||
// TODO(audio): let people handle these errors
|
// TODO(audio): let people handle these errors
|
||||||
// TODO(audio): enable selecting non-default devices
|
// TODO(audio): enable selecting non-default devices
|
||||||
const device = ctx.defaultDevice(.playback) orelse return error.NoDeviceFound;
|
const device = ctx.defaultDevice(.playback) orelse return error.NoDeviceFound;
|
||||||
var player = try ctx.createPlayer(device, writeFn, .{ .user_data = audio });
|
var player = try ctx.createPlayer(device, writeFn, .{ .user_data = audio, .sample_rate = 48000 });
|
||||||
|
log.info("opened audio device: channels={} sample_rate={} format={s}", .{ player.channels().len, player.sampleRate(), @tagName(player.format()) });
|
||||||
|
|
||||||
const debug_str = std.process.getEnvVarOwned(
|
const debug_str = std.process.getEnvVarOwned(
|
||||||
allocator,
|
allocator,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue