]> git.sesse.net Git - nageru/blobdiff - nageru/audio_mixer.cpp
Correct a tiny miscalculation in convert_fixed24_to_fp32().
[nageru] / nageru / audio_mixer.cpp
index 9e7dd59a0dbc64ab6398e30824c8dae6d676b912..891fb227c779f4917201345718b242bc3f71fd39 100644 (file)
 #include <limits>
 #include <utility>
 
-#include "db.h"
+#include "decibel.h"
 #include "flags.h"
-#include "metrics.h"
+#include "shared/metrics.h"
 #include "state.pb.h"
-#include "timebase.h"
+#include "shared/timebase.h"
 
 using namespace bmusb;
 using namespace std;
@@ -65,8 +65,8 @@ void convert_fixed24_to_fp32(float *dst, size_t out_channel, size_t out_num_chan
                uint32_t s1 = src[0];
                uint32_t s2 = src[1];
                uint32_t s3 = src[2];
-               uint32_t s = s1 | (s1 << 8) | (s2 << 16) | (s3 << 24);
-               *dst = int(s) * (1.0f / 2147483648.0f);
+               uint32_t s = (s1 << 8) | (s2 << 16) | (s3 << 24);  // Note: The bottom eight bits are zero; s3 includes the sign bit.
+               *dst = int(s) * (1.0f / (256.0f * 8388608.0f));  // 256 for signed down-shift by 8, then 2^23 for the actual conversion.
 
                src += 3 * in_num_channels;
                dst += out_num_channels;
@@ -244,7 +244,7 @@ void AudioMixer::reset_resampler_mutex_held(DeviceSpec device_spec)
        }
 }
 
-bool AudioMixer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned num_samples, AudioFormat audio_format, int64_t frame_length, steady_clock::time_point frame_time)
+bool AudioMixer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned num_samples, AudioFormat audio_format, steady_clock::time_point frame_time)
 {
        AudioDevice *device = find_audio_device(device_spec);
 
@@ -294,7 +294,7 @@ bool AudioMixer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned
        return true;
 }
 
-bool AudioMixer::add_silence(DeviceSpec device_spec, unsigned samples_per_frame, unsigned num_frames, int64_t frame_length)
+bool AudioMixer::add_silence(DeviceSpec device_spec, unsigned samples_per_frame, unsigned num_frames)
 {
        AudioDevice *device = find_audio_device(device_spec);