mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 08:41:15 +00:00
AudioServer: Expose the ability to get and set the sample rate
Two new IPC calls allow audio clients to get and set the sample rate. The AudioServer calls into the new ioctl of the sound card.
This commit is contained in:
parent
d0ceaa24a6
commit
9880a5c481
Notes:
sideshowbarker
2024-07-18 05:12:49 +09:00
Author: https://github.com/kleinesfilmroellchen Commit: https://github.com/SerenityOS/serenity/commit/9880a5c4815 Pull-request: https://github.com/SerenityOS/serenity/pull/9471 Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/awesomekling
|
@ -8,6 +8,10 @@ endpoint AudioServer
|
|||
get_main_mix_volume() => (i32 volume)
|
||||
set_main_mix_volume(i32 volume) => ()
|
||||
|
||||
// Audio device
|
||||
set_sample_rate(u16 sample_rate) => ()
|
||||
get_sample_rate() => (u16 sample_rate)
|
||||
|
||||
// Buffer playback
|
||||
enqueue_buffer(Core::AnonymousBuffer buffer, i32 buffer_id, int sample_count) => (bool success)
|
||||
set_paused(bool paused) => ()
|
||||
|
|
|
@ -63,6 +63,16 @@ void ClientConnection::set_main_mix_volume(i32 volume)
|
|||
m_mixer.set_main_volume(volume);
|
||||
}
|
||||
|
||||
Messages::AudioServer::GetSampleRateResponse ClientConnection::get_sample_rate()
|
||||
{
|
||||
return { m_mixer.audiodevice_get_sample_rate() };
|
||||
}
|
||||
|
||||
void ClientConnection::set_sample_rate(u16 sample_rate)
|
||||
{
|
||||
m_mixer.audiodevice_set_sample_rate(sample_rate);
|
||||
}
|
||||
|
||||
Messages::AudioServer::EnqueueBufferResponse ClientConnection::enqueue_buffer(Core::AnonymousBuffer const& buffer, i32 buffer_id, int sample_count)
|
||||
{
|
||||
if (!m_queue)
|
||||
|
|
|
@ -45,6 +45,8 @@ 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 Messages::AudioServer::GetSampleRateResponse get_sample_rate() override;
|
||||
|
||||
Mixer& m_mixer;
|
||||
RefPtr<BufferQueue> m_queue;
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
#include <LibCore/ConfigFile.h>
|
||||
#include <LibCore/Timer.h>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
namespace AudioServer {
|
||||
|
||||
|
@ -150,6 +152,23 @@ void Mixer::set_muted(bool muted)
|
|||
});
|
||||
}
|
||||
|
||||
int Mixer::audiodevice_set_sample_rate(u16 sample_rate)
|
||||
{
|
||||
int code = ioctl(m_device->fd(), SOUNDCARD_IOCTL_SET_SAMPLE_RATE, sample_rate);
|
||||
if (code != 0)
|
||||
dbgln("Error while setting sample rate to {}: ioctl returned with {}", sample_rate, strerror(code));
|
||||
return code;
|
||||
}
|
||||
|
||||
u16 Mixer::audiodevice_get_sample_rate() const
|
||||
{
|
||||
u16 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 returned with {}", strerror(code));
|
||||
return sample_rate;
|
||||
}
|
||||
|
||||
void Mixer::request_setting_sync()
|
||||
{
|
||||
if (m_config_write_timer.is_null() || !m_config_write_timer->is_active()) {
|
||||
|
|
|
@ -106,6 +106,9 @@ 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;
|
||||
|
||||
private:
|
||||
void request_setting_sync();
|
||||
|
||||
|
|
Loading…
Reference in a new issue