mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
Паритет с уже существующим выбором вывода: на каждом слайсе своё устройство входа (микрофон/виртуальный кабель). - RadioController: TCtrlSlice += InDeviceIndex/InDevName/AudioIn (ссылка, не владение); mic-пул FMicPool с refcount (Acquire/ReleaseMicInput) — один открытый TAudioInput на уникальное PA-устройство, смена TX-слайса не переоткрывает поток; ActiveMicInput/ActiveMicInDevName для PullSoundCardMic, Flush и DefaultMicSource; SetMainMicDevice перепривязывает ссылки слайсов. - VfoOverlay: во fly-out AUD ряд вкладок OUT | IN, событие OnAudioInDevice. - PanafallPanel: проброс списка входных устройств во флаги слайсов и главный. - Settings: персист in_dev_name. НЕ ГОТОВО: зависание GUI при выборе на слайсе того же входа, что в настройках (пул открывает поток вместо шортката на общий FAudioIn). В коде оставлена временная диагностика [MIC] в stderr. Также подозрение на замедление потока данных от радио — проверяем сравнением с main. Со мной в коммите временные тестовые программы PortAudio (other/pa*.lpr). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
20 lines
675 B
ObjectPascal
20 lines
675 B
ObjectPascal
program patest2;
|
|
{$MODE Delphi}
|
|
uses SysUtils, AudioInput;
|
|
var A, B: TAudioInput;
|
|
begin
|
|
A := TAudioInput.Create(48000);
|
|
A.DeviceIndex := 15; // DireWolf_TX_Output
|
|
WriteLn('open #1 ...'); Flush(Output);
|
|
WriteLn(' -> ', A.Open, ' err=', A.LastError); Flush(Output);
|
|
B := TAudioInput.Create(48000);
|
|
B.DeviceIndex := 15; // то же устройство вторым потоком
|
|
WriteLn('open #2 ...'); Flush(Output);
|
|
WriteLn(' -> ', B.Open, ' err=', B.LastError); Flush(Output);
|
|
Sleep(300);
|
|
WriteLn('avail #1=', A.Available, ' #2=', B.Available); Flush(Output);
|
|
B.Close; A.Close;
|
|
B.Free; A.Free;
|
|
WriteLn('done');
|
|
end.
|