mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +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>
30 lines
701 B
ObjectPascal
30 lines
701 B
ObjectPascal
program patest3;
|
|
{$MODE Delphi}
|
|
uses SysUtils, Classes, AudioInput;
|
|
var
|
|
E: TAudioInput;
|
|
A: TAudioInput;
|
|
Names: TStringList;
|
|
Idx: array[0..63] of Integer;
|
|
Cnt, i: Integer;
|
|
OK: Boolean;
|
|
begin
|
|
E := TAudioInput.Create(48000);
|
|
Names := TStringList.Create;
|
|
Cnt := 0;
|
|
E.EnumInputDevices(Names, Idx, Cnt);
|
|
for i := 0 to Cnt - 1 do
|
|
begin
|
|
WriteLn(Format('>>> try %3d %s', [Idx[i], Names[i]])); Flush(Output);
|
|
A := TAudioInput.Create(48000);
|
|
A.DeviceIndex := Idx[i];
|
|
OK := A.Open;
|
|
WriteLn(Format(' %3d open=%s %s', [Idx[i], BoolToStr(OK, True), A.LastError]));
|
|
Flush(Output);
|
|
A.Close;
|
|
A.Free;
|
|
end;
|
|
Names.Free; E.Free;
|
|
WriteLn('ALL DONE');
|
|
end.
|