修复若干bug

This commit is contained in:
2026-08-02 01:14:42 +08:00
parent dacc62b9e6
commit cd45ffe6de
2 changed files with 39 additions and 9 deletions
+24 -8
View File
@@ -15,6 +15,7 @@
#include <QAudioFormat>
#include <QAudioOutput>
#include <alsa/asoundlib.h>
#include <algorithm>
#include <vector>
#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<double> 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<double> 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));
}
// 保存音频流
+15 -1
View File
@@ -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{};