修复若干bug
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
// 保存音频流
|
||||
|
||||
@@ -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{};
|
||||
|
||||
Reference in New Issue
Block a user