audio: make system own master gain semantics

This commit is contained in:
2026-04-14 16:39:29 +08:00
parent a91df8b4cd
commit 3e56757910
6 changed files with 511 additions and 59 deletions

View File

@@ -23,16 +23,6 @@ namespace {
#ifdef _WIN32
TEST(WaveOutBackend, MasterVolumeIsClampedToValidRange) {
WaveOut::WaveOutBackend backend;
backend.SetMasterVolume(1.5f);
EXPECT_FLOAT_EQ(backend.GetMasterVolume(), 1.0f);
backend.SetMasterVolume(-0.5f);
EXPECT_FLOAT_EQ(backend.GetMasterVolume(), 0.0f);
}
TEST(WaveOutBackend, ProcessAudioCopiesOnlyRequestedSamplesIntoPendingMixBuffer) {
WaveOut::WaveOutBackend backend;
backend.m_pendingMixBuffer.assign(8, 1.0f);
@@ -71,24 +61,17 @@ TEST(WaveOutBackend, SetDeviceRejectsHotSwitchAfterOpen) {
backend.m_hWaveOut = nullptr;
}
TEST(WaveOutBackend, FillPcm16BufferAppliesVolumeClampAndMute) {
TEST(WaveOutBackend, FillPcm16BufferClampsSamplesToPcm16Range) {
std::vector<float> input = {-2.0f, -0.5f, 0.5f, 2.0f};
std::vector<int16_t> output(4, 123);
WaveOut::WaveOutBackend::FillPcm16Buffer(output, input, 0.5f, false);
WaveOut::WaveOutBackend::FillPcm16Buffer(output, input);
ASSERT_EQ(output.size(), 4u);
EXPECT_EQ(output[0], -32767);
EXPECT_EQ(output[1], -8191);
EXPECT_EQ(output[2], 8191);
EXPECT_EQ(output[1], -16383);
EXPECT_EQ(output[2], 16383);
EXPECT_EQ(output[3], 32767);
WaveOut::WaveOutBackend::FillPcm16Buffer(output, input, 1.0f, true);
EXPECT_EQ(output[0], 0);
EXPECT_EQ(output[1], 0);
EXPECT_EQ(output[2], 0);
EXPECT_EQ(output[3], 0);
}
#endif