diff --git a/Kernel/Devices/Audio/AC97/AC97.cpp b/Kernel/Devices/Audio/AC97/AC97.cpp index aef78e5aab..d70799e2a6 100644 --- a/Kernel/Devices/Audio/AC97/AC97.cpp +++ b/Kernel/Devices/Audio/AC97/AC97.cpp @@ -86,8 +86,6 @@ UNMAP_AFTER_INIT ErrorOr AC97::initialize(Badge) dbgln_if(AC97_DEBUG, "AC97 @ {}: mixer base: {:#04x}", device_identifier().address(), m_mixer_io_window); dbgln_if(AC97_DEBUG, "AC97 @ {}: bus base: {:#04x}", device_identifier().address(), m_bus_io_window); - m_audio_channel = TRY(AudioChannel::create(*this, 0)); - // Read out AC'97 codec revision and vendor auto extended_audio_id = m_mixer_io_window->read16(NativeAudioMixerRegister::ExtendedAudioID); m_codec_revision = static_cast(((extended_audio_id & ExtendedAudioMask::Revision) >> 10) & 0b11); @@ -133,6 +131,8 @@ UNMAP_AFTER_INIT ErrorOr AC97::initialize(Badge) m_pcm_out_channel->reset(); enable_irq(); + + m_audio_channel = TRY(AudioChannel::create(*this, 0)); return {}; } diff --git a/Kernel/Devices/Audio/Channel.cpp b/Kernel/Devices/Audio/Channel.cpp index d70e08f253..0f9da43d4d 100644 --- a/Kernel/Devices/Audio/Channel.cpp +++ b/Kernel/Devices/Audio/Channel.cpp @@ -15,7 +15,15 @@ namespace Kernel { UNMAP_AFTER_INIT ErrorOr> AudioChannel::create(AudioController const& controller, size_t channel_index) { - return *TRY(DeviceManagement::try_create_device(controller, channel_index)); + auto channel = TRY(DeviceManagement::try_create_device(controller, channel_index)); + + // FIXME: Ideally, we would want the audio controller to run a channel at a device's initial sample + // rate instead of hardcoding 44.1 KHz here. However, most audio is provided at 44.1 KHz and as + // long as Audio::Resampler introduces significant audio artifacts, let's set a sensible sample + // rate here. Remove this after implementing a higher quality Audio::Resampler. + TRY(const_cast(controller).set_pcm_output_sample_rate(channel_index, 44100)); + + return *channel; } AudioChannel::AudioChannel(AudioController const& controller, size_t channel_index)