mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix(tx): Factory возвращает заводской звук, а не снимок живых настроек
«Default» строился через TXProfileCapture(живые настройки), поэтому сброс, сделанный на профиле ESSB 5k, оставлял в нём High cut 5000 — то есть Factory не сбрасывал ровно то, ради чего его жмут. Правило «заводское значит заводское» было применено только к EQ (FlatEQ), теперь ко всему тембру. База заводских профилей — DefaultTX, поверх копируется только живая обвязка микрофона: разъём и режим (Mic In/Line In, boost, bias, PTT, Tip/Ring), Line In gain и Mic gain. Их сброс сорвал бы настройку микшера. Мощность тоже остаётся живой — скачок drive ушёл бы в усилитель. Всё остальное (полоса, компрессор, leveler, ALC, phase rotator, EQ, AM carrier, TUN level) заводское. Текст подтверждения и подсказка обещали, что полоса и динамика останутся как есть, — переписаны под новое поведение. Проверено прогоном: с живыми ESSB 5k + компрессор 12 дБ + Line In + mic gain 22.5 заводской Default выходит 200/3100, comp off, EQ ровный, а Line In, mic gain и drive сохраняются. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+22
-5
@@ -1910,6 +1910,15 @@ end;
|
||||
|
||||
procedure DefaultTXProfiles(const Base: TTXSettings; DrivePct: Integer;
|
||||
out L: TTXProfileList);
|
||||
var
|
||||
// Заводской звук + ЖИВАЯ обвязка микрофона. Всё, что определяет тембр
|
||||
// (полоса, динамика, EQ, AM carrier, TUN level), берётся из DefaultTX:
|
||||
// «сброс к заводским» обязан сбрасывать именно это, иначе Default наследует
|
||||
// ту полосу, на которой оператора застали (например 5000 от ESSB 5k).
|
||||
// Не сбрасываем то, что описывает ЖЕЛЕЗО и безопасность: разъём и режим
|
||||
// микрофона с его усилением (иначе слетит Line In у микшера) и мощность
|
||||
// (внезапный скачок drive пошёл бы в усилитель).
|
||||
Stock: TTXSettings;
|
||||
const
|
||||
// Кривые EQ для заводских ESSB. Значения — УЗЛЫ ломаной АЧХ WDSP (eq.c),
|
||||
// а не «полосы»: между узлами интерполяция по дБ, а ЗА крайними узлами
|
||||
@@ -1945,7 +1954,7 @@ const
|
||||
AComp: Boolean; ACompGain: Double);
|
||||
begin
|
||||
if L.Count >= TXPROF_MAX then Exit;
|
||||
TXProfileCapture(Base, DrivePct, L.Items[L.Count]);
|
||||
TXProfileCapture(Stock, DrivePct, L.Items[L.Count]);
|
||||
L.Items[L.Count].Name := AName;
|
||||
L.Items[L.Count].FilterLow := ALow;
|
||||
L.Items[L.Count].FilterHigh := AHigh;
|
||||
@@ -1985,10 +1994,18 @@ begin
|
||||
L.Count := 0;
|
||||
L.ActiveIdx := 0;
|
||||
ClearTXProfModeTable(L.MainByMode); // главный ничего не переключает
|
||||
// «Default» — текущее состояние устройства (микрофонный вход, полоса,
|
||||
// динамика, мощность), но с заводским EQ: после миграции старого конфига
|
||||
// звук в эфире не меняется, а сброс к заводским возвращает ровный тембр.
|
||||
TXProfileCapture(Base, DrivePct, L.Items[0]);
|
||||
// База всех заводских профилей: заводской звук, живая обвязка микрофона.
|
||||
TSettingsManager.DefaultTX(Stock);
|
||||
Stock.MicLineIn := Base.MicLineIn;
|
||||
Stock.MicBoost := Base.MicBoost;
|
||||
Stock.MicBias := Base.MicBias;
|
||||
Stock.MicPTTEnabled := Base.MicPTTEnabled;
|
||||
Stock.MicTipRing := Base.MicTipRing;
|
||||
Stock.LineInGainDB := Base.LineInGainDB;
|
||||
Stock.MicGainDB := Base.MicGainDB;
|
||||
// «Default» — ровно заводской звук: полоса 200..3100, компрессор выкл,
|
||||
// leveler/ALC как в DefaultTX, EQ ровный.
|
||||
TXProfileCapture(Stock, DrivePct, L.Items[0]);
|
||||
L.Items[0].Name := 'Default';
|
||||
FlatEQ(L.Items[0]);
|
||||
L.Count := 1;
|
||||
|
||||
Reference in New Issue
Block a user