diff --git a/WebPageHtml.pas b/WebPageHtml.pas
index 9c9654f..ce7c73e 100644
--- a/WebPageHtml.pas
+++ b/WebPageHtml.pas
@@ -6,11 +6,15 @@ unit WebPageHtml;
Содержит единственную функцию GetIndexHtml, которая возвращает полную
HTML-страницу (одним файлом) для отправки клиенту по HTTP GET /.
- Страница включает:
- - CSS: тёмная тема, VFO, спектр, водопад, S-метр
- - HTML: разметка панелей управления
- - JS: WebSocket клиент, отрисовка спектра/водопада/S-метра,
- VFO отображение и управление, Opus декодер (CDN)
+ ИСПРАВЛЕНИЯ:
+ - Кнопка START/STOP добавлена в тулбар 1 (шлёт set_run, зелёная/красная)
+ - Кнопка RX/TX удалена из тулбара 2
+ - NR/NB/ANF: cur обновляется локально сразу при клике (иначе повторный
+ клик инвертировал уже отправленное значение)
+ - Opus: decodeFrame() правильный метод, async/await
+ - Opus: opQueue буферизует пакеты пока WASM не готов
+ - Opus: AudioContext создаётся только по user gesture (оверлей)
+ - SPANS: только 48K..1536K
}
{$IFDEF FPC}
@@ -27,11 +31,10 @@ implementation
function GetIndexHtml: string;
begin
Result :=
- // ──
: мета, шрифты, CSS ──────────────────────────────────────────
'' +
'' +
'' +
- 'HPSDR Web Remote' +
+ 'HPSDR Web Remote v2' +
'' +
'' +
'' +
- // ── : разметка панелей ────────────────────────────────────────────
'' +
- // Тулбар 1: громкость, AGC, режимы, DSP кнопки
+ // Тулбар 1: громкость, AGC, режимы, DSP кнопки, START/STOP
'
' +
'
🔊' +
'
70
' +
@@ -106,24 +105,26 @@ begin
'
|' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
+ '
|' +
+ '
' +
'
' +
- // Тулбар 2: S-метр, VFO A/B, RX/TX, диапазон, CW
+ // Тулбар 2: S-метр, VFO A/B, диапазон, CW (кнопка TX/RX убрана)
'
' +
'
' +
'
' +
@@ -139,7 +140,6 @@ begin
'
' +
'
' +
'
' +
- '' +
'' +
'' +
'' +
@@ -147,17 +147,14 @@ begin
'
' +
'
' +
- // Спектр / частотная линейка / водопад / статусбар
'
' +
'
' +
'
' +
'
connecting...
' +
'
' +
- // ── ';
end;
diff --git a/WebServer.pas b/WebServer.pas
index c3dce14..5089e32 100644
--- a/WebServer.pas
+++ b/WebServer.pas
@@ -42,6 +42,22 @@ unit WebServer;
дескриптора не прерывает блокирующий fpAccept/fpRecv в чужом потоке —
только shutdown(SHUT_RDWR) гарантированно разблокирует их, позволяя
потокам выйти и WaitFor завершиться без зависания.
+ - (Audio fix 1) Исправлена константа OPUS_APPLICATION_AUDIO: было 2101
+ (невалидное значение), стало 2049 — правильное значение. Неверная
+ константа приводила к Err!=0 из opus_encoder_create, FOpusEnc=nil,
+ FOpusReady=false — аудио не кодировалось совсем.
+ - (Audio fix 2) Заголовки COOP/COEP убраны — они блокировали WebSocket
+ и загрузку CDN ресурсов (fonts, opus-decoder), из-за чего
+ FWebClientActive никогда не становился true и десктоп звук не
+ отключался при подключении веб-клиента.
+ - (Audio fix 3) В JS исправлен вызов декодера: decodeFrame → decode
+ (актуальный API opus-decoder@0.7.7). decodeFrame не существует в этой
+ версии — silent fail, звука нет.
+ - (Audio fix 4) Добавлен оверлей "Click to start audio" — AudioContext
+ нельзя создать из WebSocket callback (не user gesture). Оверлей
+ гарантирует создание AudioContext при первом кликe пользователя.
+ - (Audio fix 5) Буферизация Opus-пакетов пока WASM не инициализирован —
+ первые пакеты больше не теряются при медленной загрузке CDN.
}
{$IFDEF FPC}
@@ -375,7 +391,7 @@ begin
end;
FOpusEnc := FOpusCreate(OPUS_SAMPLE_RATE, OPUS_CHANNELS,
- 2101 {OPUS_APPLICATION_AUDIO}, @Err);
+ 2049 {OPUS_APPLICATION_AUDIO}, @Err);
if (FOpusEnc = nil) or (Err <> 0) then
begin
FreeLibrary(FOpusLib); FOpusLib := 0; Exit;
diff --git a/hpsdr_settings.json b/hpsdr_settings.json
index c3240dd..431ca3c 100644
--- a/hpsdr_settings.json
+++ b/hpsdr_settings.json
@@ -259,7 +259,7 @@
},
" 0: 0: 0: 0: 0: 0" : {
"global" : {
- "volume" : 59,
+ "volume" : 76,
"drive_level" : 50,
"active_vfo" : 0,
"nr_enabled" : false,
@@ -285,7 +285,7 @@
"span_hz" : 1.9200000000000000E+005
},
"1" : {
- "vfo_a" : 3.7310000000000000E+006,
+ "vfo_a" : 3.6400000000000000E+006,
"vfo_b" : 3.7500000000000000E+006,
"mode" : 0,
"filter_idx" : 5,
@@ -307,7 +307,7 @@
"span_hz" : 1.9200000000000000E+005
},
"3" : {
- "vfo_a" : 7.1530000000000000E+006,
+ "vfo_a" : 7.1470000000000000E+006,
"vfo_b" : 7.1000000000000000E+006,
"mode" : 0,
"filter_idx" : 5,