mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 15:07:44 +00:00
Kernel: Allow higher audio sample rates than 65kHZ (u16
)
Executing `asctl set r 96000` no longer results in weird sample rates being set on the audio devices. SB16 checks for a sample rate between 1 and 44100 Hz, while AC97 implements double-rate support which allows sample rates between 8kHz and 96kHZ.
This commit is contained in:
parent
c349634967
commit
f97c9a5968
9 changed files with 56 additions and 28 deletions
|
@ -11,8 +11,8 @@ endpoint AudioServer
|
|||
set_self_volume(double volume) => ()
|
||||
|
||||
// Audio device
|
||||
set_sample_rate(u16 sample_rate) => ()
|
||||
get_sample_rate() => (u16 sample_rate)
|
||||
set_sample_rate(u32 sample_rate) => ()
|
||||
get_sample_rate() => (u32 sample_rate)
|
||||
|
||||
// Buffer playback
|
||||
enqueue_buffer(Core::AnonymousBuffer buffer, i32 buffer_id, int sample_count) => (bool success)
|
||||
|
|
|
@ -73,7 +73,7 @@ Messages::AudioServer::GetSampleRateResponse ClientConnection::get_sample_rate()
|
|||
return { m_mixer.audiodevice_get_sample_rate() };
|
||||
}
|
||||
|
||||
void ClientConnection::set_sample_rate(u16 sample_rate)
|
||||
void ClientConnection::set_sample_rate(u32 sample_rate)
|
||||
{
|
||||
m_mixer.audiodevice_set_sample_rate(sample_rate);
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
virtual Messages::AudioServer::GetPlayingBufferResponse get_playing_buffer() override;
|
||||
virtual Messages::AudioServer::GetMutedResponse get_muted() override;
|
||||
virtual void set_muted(bool) override;
|
||||
virtual void set_sample_rate(u16 sample_rate) override;
|
||||
virtual void set_sample_rate(u32 sample_rate) override;
|
||||
virtual Messages::AudioServer::GetSampleRateResponse get_sample_rate() override;
|
||||
|
||||
Mixer& m_mixer;
|
||||
|
|
|
@ -165,7 +165,7 @@ void Mixer::set_muted(bool muted)
|
|||
});
|
||||
}
|
||||
|
||||
int Mixer::audiodevice_set_sample_rate(u16 sample_rate)
|
||||
int Mixer::audiodevice_set_sample_rate(u32 sample_rate)
|
||||
{
|
||||
int code = ioctl(m_device->fd(), SOUNDCARD_IOCTL_SET_SAMPLE_RATE, sample_rate);
|
||||
if (code != 0)
|
||||
|
@ -173,9 +173,9 @@ int Mixer::audiodevice_set_sample_rate(u16 sample_rate)
|
|||
return code;
|
||||
}
|
||||
|
||||
u16 Mixer::audiodevice_get_sample_rate() const
|
||||
u32 Mixer::audiodevice_get_sample_rate() const
|
||||
{
|
||||
u16 sample_rate = 0;
|
||||
u32 sample_rate = 0;
|
||||
int code = ioctl(m_device->fd(), SOUNDCARD_IOCTL_GET_SAMPLE_RATE, &sample_rate);
|
||||
if (code != 0)
|
||||
dbgln("Error while getting sample rate: ioctl error: {}", strerror(errno));
|
||||
|
|
|
@ -119,8 +119,8 @@ public:
|
|||
bool is_muted() const { return m_muted; }
|
||||
void set_muted(bool);
|
||||
|
||||
int audiodevice_set_sample_rate(u16 sample_rate);
|
||||
u16 audiodevice_get_sample_rate() const;
|
||||
int audiodevice_set_sample_rate(u32 sample_rate);
|
||||
u32 audiodevice_get_sample_rate() const;
|
||||
|
||||
private:
|
||||
Mixer(NonnullRefPtr<Core::ConfigFile> config);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue