From cd45ffe6de62def48a9943749aa82eb7dca10951 Mon Sep 17 00:00:00 2001 From: wyc <1104749580@qq.com> Date: Sun, 2 Aug 2026 01:14:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8B=A5=E5=B9=B2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/radio/BackEnd/BackEnd_True.cpp | 32 ++++++++++++++++++++------- module/radio/BackEnd/RadioWidget.cpp | 16 +++++++++++++- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/module/radio/BackEnd/BackEnd_True.cpp b/module/radio/BackEnd/BackEnd_True.cpp index 5557fac..c4ea6bf 100644 --- a/module/radio/BackEnd/BackEnd_True.cpp +++ b/module/radio/BackEnd/BackEnd_True.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #define BUFFER_SIZE 512 // 缓冲区大小 Device_UHD* ys_radio; @@ -23,6 +24,14 @@ AM_Demod am_demod; snd_pcm_t *handle; int err; +namespace { +double clamp_to_axis_range(double value, renderive::Range range) { + const double lower = std::min(range.origin, range.target); + const double upper = std::max(range.origin, range.target); + return std::clamp(value, lower, upper); +} +} + void Back_End::play(const QString& fileName){ // ys_radio->YsSetFreq(value); } @@ -145,20 +154,27 @@ void Back_End::call_back_data_func(int channel, void *pData, int i_length) //Main_Widget::instance()->radio_widget->giv - std::vector data(512); - for(int i = 0; i < 512; ++i){ - data[i] = rbuf[i]; - } - auto main = Main_Widget::instance(); auto radio = main->radio_widget; - //qDebug() << data; - radio->audio_spectrogram_plot->give_data(data); + if (radio && radio->audio_spectrogram_plot) { + std::vector data(512); + auto axis = radio->audio_spectrogram_plot->power_axis(); + const auto range = axis ? axis->coord_range() : renderive::Range{-32768.0, 32767.0}; + for(int i = 0; i < 512; ++i){ + data[i] = clamp_to_axis_range(rbuf[i], range); + } + //qDebug() << data; + radio->audio_spectrogram_plot->give_data(data); + } //std::cout << "audio == " << rbuf[256] << std::endl; - radio->time_power->give_data(QTime::currentTime(), rbuf[256]); + if (radio && radio->time_power) { + auto axis = radio->time_power->value_axis(); + const auto range = axis ? axis->coord_range() : renderive::Range{-32768.0, 32767.0}; + radio->time_power->give_data(QTime::currentTime(), clamp_to_axis_range(rbuf[256], range)); + } // 保存音频流 diff --git a/module/radio/BackEnd/RadioWidget.cpp b/module/radio/BackEnd/RadioWidget.cpp index 5ed0d4a..20dbf0d 100644 --- a/module/radio/BackEnd/RadioWidget.cpp +++ b/module/radio/BackEnd/RadioWidget.cpp @@ -29,6 +29,15 @@ static void configure_radio_plot_perf(renderive::Latency_Eager_Plot* plot) { return; plot->set_max_render_fps(1000); } +static renderive::Performance_Shower_Options radio_performance_options() { + renderive::Performance_Shower_Options options; + options.font.size = 11.0; + options.background = renderive::Color{20, 20, 20, 255}; + options.foreground = renderive::Color::white(); + options.scroll_track = renderive::Color{55, 55, 55, 220}; + options.scroll_thumb = renderive::Color{190, 190, 190, 240}; + return options; +} static void apply_radio_performance_overlay(renderive::Latency_Eager_Plot* plot) { static bool logged = false; const bool enabled = radio_show_performance_overlay(); @@ -38,7 +47,12 @@ static void apply_radio_performance_overlay(renderive::Latency_Eager_Plot* plot) } if (!plot || !plot->core()) return; - renderive::set_performance_shower_enabled(*plot->core(), enabled); + auto shower = renderive::attach_performance_shower(*plot->core(), radio_performance_options()); + if (!shower) + return; + shower->setEnabled(enabled); + if (enabled) + renderive::notify_performance_shower_viewport_changed(*plot->core()); } struct Radio_Plot_Layout { int left_axis_width{};