mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:37:35 +00:00
AudioServer: Make hardware write buffer size flexible
This removes some old cruft to refactor the hardware buffer-related datastructures into depending on a single constant, which determines the number of samples per hardware buffer that the audio server mixes. This is set to 1024 as before, so there are no functional changes.
This commit is contained in:
parent
f6af357763
commit
1c23a222b2
2 changed files with 11 additions and 12 deletions
|
@ -20,8 +20,6 @@
|
|||
|
||||
namespace AudioServer {
|
||||
|
||||
u8 Mixer::m_zero_filled_buffer[4096];
|
||||
|
||||
Mixer::Mixer(NonnullRefPtr<Core::ConfigFile> config)
|
||||
// FIXME: Allow AudioServer to use other audio channels as well
|
||||
: m_device(Core::File::construct("/dev/audio/0", this))
|
||||
|
@ -74,8 +72,7 @@ void Mixer::mix()
|
|||
|
||||
active_mix_queues.remove_all_matching([&](auto& entry) { return !entry->client(); });
|
||||
|
||||
Audio::Sample mixed_buffer[1024];
|
||||
auto mixed_buffer_length = (int)(sizeof(mixed_buffer) / sizeof(Audio::Sample));
|
||||
Array<Audio::Sample, HARDWARE_BUFFER_SIZE> mixed_buffer;
|
||||
|
||||
m_main_volume.advance_time();
|
||||
|
||||
|
@ -89,8 +86,7 @@ void Mixer::mix()
|
|||
++active_queues;
|
||||
queue->volume().advance_time();
|
||||
|
||||
for (int i = 0; i < mixed_buffer_length; ++i) {
|
||||
auto& mixed_sample = mixed_buffer[i];
|
||||
for (auto& mixed_sample : mixed_buffer) {
|
||||
Audio::Sample sample;
|
||||
if (!queue->get_next_sample(sample))
|
||||
break;
|
||||
|
@ -103,13 +99,12 @@ void Mixer::mix()
|
|||
}
|
||||
|
||||
if (m_muted) {
|
||||
m_device->write(m_zero_filled_buffer, sizeof(m_zero_filled_buffer));
|
||||
m_device->write(m_zero_filled_buffer.data(), static_cast<int>(m_zero_filled_buffer.size()));
|
||||
} else {
|
||||
Array<u8, 4096> buffer;
|
||||
Array<u8, HARDWARE_BUFFER_SIZE_BYTES> buffer;
|
||||
OutputMemoryStream stream { buffer };
|
||||
|
||||
for (int i = 0; i < mixed_buffer_length; ++i) {
|
||||
auto& mixed_sample = mixed_buffer[i];
|
||||
for (auto& mixed_sample : mixed_buffer) {
|
||||
|
||||
// Even though it's not realistic, the user expects no sound at 0%.
|
||||
if (m_main_volume < 0.01)
|
||||
|
@ -128,7 +123,7 @@ void Mixer::mix()
|
|||
|
||||
VERIFY(stream.is_end());
|
||||
VERIFY(!stream.has_any_error());
|
||||
m_device->write(stream.data(), stream.size());
|
||||
m_device->write(stream.data(), static_cast<int>(stream.size()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue