mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +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;
|
||||
|
||||
+5
-4
@@ -1523,8 +1523,8 @@ begin
|
||||
MakeLbl(Grp, 'Edits on the Profile and EQ tabs go into the active profile '
|
||||
+ 'immediately — there is no separate Save button.',
|
||||
PAD, R1 + 30, GRP_W - 2 * PAD);
|
||||
MakeLbl(Grp, 'New... forks the current sound under a new name. '
|
||||
+ 'Factory rebuilds the stock set and flattens the equalizer.',
|
||||
MakeLbl(Grp, 'New... forks the current sound under a new name. Factory rebuilds '
|
||||
+ 'the stock set; it keeps the microphone wiring and drive, not the sound.',
|
||||
PAD, R1 + 48, GRP_W - 2 * PAD);
|
||||
|
||||
// ---- Сегменты подвкладок ------------------------------------------------
|
||||
@@ -1985,8 +1985,9 @@ begin
|
||||
if MessageDlg('TX Profile',
|
||||
'Replace the whole profile list with the factory set?'#13#10
|
||||
+ 'Your own profiles and edits to the stock ones will be lost.'#13#10
|
||||
+ '"Default" becomes active: microphone, bandwidth, dynamics and '
|
||||
+ 'drive stay as they are, the equalizer returns to flat.',
|
||||
+ '"Default" becomes active and restores the stock sound: '
|
||||
+ 'bandwidth, dynamics and a flat equalizer. Microphone wiring, '
|
||||
+ 'its gain and drive are kept as they are.',
|
||||
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;
|
||||
if Assigned(FOnTXProfileFactory) then FOnTXProfileFactory(Self);
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user