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;
|
procedure DefaultTXProfiles(const Base: TTXSettings; DrivePct: Integer;
|
||||||
out L: TTXProfileList);
|
out L: TTXProfileList);
|
||||||
|
var
|
||||||
|
// Заводской звук + ЖИВАЯ обвязка микрофона. Всё, что определяет тембр
|
||||||
|
// (полоса, динамика, EQ, AM carrier, TUN level), берётся из DefaultTX:
|
||||||
|
// «сброс к заводским» обязан сбрасывать именно это, иначе Default наследует
|
||||||
|
// ту полосу, на которой оператора застали (например 5000 от ESSB 5k).
|
||||||
|
// Не сбрасываем то, что описывает ЖЕЛЕЗО и безопасность: разъём и режим
|
||||||
|
// микрофона с его усилением (иначе слетит Line In у микшера) и мощность
|
||||||
|
// (внезапный скачок drive пошёл бы в усилитель).
|
||||||
|
Stock: TTXSettings;
|
||||||
const
|
const
|
||||||
// Кривые EQ для заводских ESSB. Значения — УЗЛЫ ломаной АЧХ WDSP (eq.c),
|
// Кривые EQ для заводских ESSB. Значения — УЗЛЫ ломаной АЧХ WDSP (eq.c),
|
||||||
// а не «полосы»: между узлами интерполяция по дБ, а ЗА крайними узлами
|
// а не «полосы»: между узлами интерполяция по дБ, а ЗА крайними узлами
|
||||||
@@ -1945,7 +1954,7 @@ const
|
|||||||
AComp: Boolean; ACompGain: Double);
|
AComp: Boolean; ACompGain: Double);
|
||||||
begin
|
begin
|
||||||
if L.Count >= TXPROF_MAX then Exit;
|
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].Name := AName;
|
||||||
L.Items[L.Count].FilterLow := ALow;
|
L.Items[L.Count].FilterLow := ALow;
|
||||||
L.Items[L.Count].FilterHigh := AHigh;
|
L.Items[L.Count].FilterHigh := AHigh;
|
||||||
@@ -1985,10 +1994,18 @@ begin
|
|||||||
L.Count := 0;
|
L.Count := 0;
|
||||||
L.ActiveIdx := 0;
|
L.ActiveIdx := 0;
|
||||||
ClearTXProfModeTable(L.MainByMode); // главный ничего не переключает
|
ClearTXProfModeTable(L.MainByMode); // главный ничего не переключает
|
||||||
// «Default» — текущее состояние устройства (микрофонный вход, полоса,
|
// База всех заводских профилей: заводской звук, живая обвязка микрофона.
|
||||||
// динамика, мощность), но с заводским EQ: после миграции старого конфига
|
TSettingsManager.DefaultTX(Stock);
|
||||||
// звук в эфире не меняется, а сброс к заводским возвращает ровный тембр.
|
Stock.MicLineIn := Base.MicLineIn;
|
||||||
TXProfileCapture(Base, DrivePct, L.Items[0]);
|
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';
|
L.Items[0].Name := 'Default';
|
||||||
FlatEQ(L.Items[0]);
|
FlatEQ(L.Items[0]);
|
||||||
L.Count := 1;
|
L.Count := 1;
|
||||||
|
|||||||
+5
-4
@@ -1523,8 +1523,8 @@ begin
|
|||||||
MakeLbl(Grp, 'Edits on the Profile and EQ tabs go into the active profile '
|
MakeLbl(Grp, 'Edits on the Profile and EQ tabs go into the active profile '
|
||||||
+ 'immediately — there is no separate Save button.',
|
+ 'immediately — there is no separate Save button.',
|
||||||
PAD, R1 + 30, GRP_W - 2 * PAD);
|
PAD, R1 + 30, GRP_W - 2 * PAD);
|
||||||
MakeLbl(Grp, 'New... forks the current sound under a new name. '
|
MakeLbl(Grp, 'New... forks the current sound under a new name. Factory rebuilds '
|
||||||
+ 'Factory rebuilds the stock set and flattens the equalizer.',
|
+ 'the stock set; it keeps the microphone wiring and drive, not the sound.',
|
||||||
PAD, R1 + 48, GRP_W - 2 * PAD);
|
PAD, R1 + 48, GRP_W - 2 * PAD);
|
||||||
|
|
||||||
// ---- Сегменты подвкладок ------------------------------------------------
|
// ---- Сегменты подвкладок ------------------------------------------------
|
||||||
@@ -1985,8 +1985,9 @@ begin
|
|||||||
if MessageDlg('TX Profile',
|
if MessageDlg('TX Profile',
|
||||||
'Replace the whole profile list with the factory set?'#13#10
|
'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
|
+ 'Your own profiles and edits to the stock ones will be lost.'#13#10
|
||||||
+ '"Default" becomes active: microphone, bandwidth, dynamics and '
|
+ '"Default" becomes active and restores the stock sound: '
|
||||||
+ 'drive stay as they are, the equalizer returns to flat.',
|
+ 'bandwidth, dynamics and a flat equalizer. Microphone wiring, '
|
||||||
|
+ 'its gain and drive are kept as they are.',
|
||||||
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;
|
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;
|
||||||
if Assigned(FOnTXProfileFactory) then FOnTXProfileFactory(Self);
|
if Assigned(FOnTXProfileFactory) then FOnTXProfileFactory(Self);
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user