fix: cast NDI p_data to float* before copying audio samples

NDIlib_audio_frame_v3_t.p_data is uint8_t*, not float*. Calling
vector<float>::assign(uint8_t*, uint8_t*+N) converted each individual
byte (0-255) into a separate float instead of reinterpreting 4 bytes
as one float sample — producing complete noise on playback.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
JohannesItten
2026-07-01 13:08:04 +03:00
parent aa39a821db
commit 31b57f7a33
+2 -1
View File
@@ -177,7 +177,8 @@ public:
audio_info.samples = audio_frame.no_samples; audio_info.samples = audio_frame.no_samples;
audio_info.channel_stride = audio_frame.channel_stride_in_bytes / sizeof(float); audio_info.channel_stride = audio_frame.channel_stride_in_bytes / sizeof(float);
const int total = audio_frame.no_channels * audio_info.channel_stride; const int total = audio_frame.no_channels * audio_info.channel_stride;
audio_out.assign(audio_frame.p_data, audio_frame.p_data + total); const auto* fdata = reinterpret_cast<const float*>(audio_frame.p_data);
audio_out.assign(fdata, fdata + total);
NDIlib_recv_free_audio_v3(recv_, &audio_frame); NDIlib_recv_free_audio_v3(recv_, &audio_frame);
return FrameKind::Audio; return FrameKind::Audio;
} }