WheezyE / Winelink

Installation scripts for running Winlink (RMS Express/Trimode & VARA) on non-Windows computers. Wine & Box86 make this project possible.
71 stars 19 forks source link

ARDOP cannot find soundcards with winemono #88

Closed WheezyE closed 1 month ago

WheezyE commented 1 month ago

ARDOP is a small open-source sound modem program that and comes pre-packaged with Winlink Express.

When winemono is installed, Winlink constantly auto-restarts ARDOP because no sound is detected after >10 seconds. dotnet46 works.

ARDOP/WinlinkExpress+winemono reports "*** FAULT PLAYBACK DEVICE SETUP, DEVICE NOT FOUND IN WINDOWS ENUMERATED PLAYBACK DEVICES".

This issue is present in old versions of ARDOP too when run with modern wine-mono.

When ARDOP_Win.exe v1.0.2.5 is run on its own (instead of through Winlink Express / RMS Express.exe) we can play with the ARDOP settings menu more easily (Winlink Express won't keep restarting the program after 10 seconds of no audio). We can see that no sound card devices appear in the Capture or Playback areas. Screenshot at 2024-07-26 11-29-57

ARDOP generates some of its own logs. Its exceptions log seems to indicate the main issue could be Method not found: void Microsoft.DirectX.DirectSound.DeviceInformation..ctor()

2024/07/26 17:16:08 [1.0.2.6] ARDOP_Win1.My.MyApplication: 

Method not found: void Microsoft.DirectX.DirectSound.DeviceInformation..ctor()

  at ARDOP_Win1.Main.tmrStartCODEC_Tick (System.Object sender, System.EventArgs e) [0x00011] in <50c9e321894142b7b547d6d860398051>:0 

  at System.Windows.Forms.Timer.OnTick (System.EventArgs e) [0x0000a] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Timer+TimerNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x0002c] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.NativeWindow.Callback (System.Windows.Forms.Message& m) [0x00025] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

Void tmrStartCODEC_Tick(System.Object, System.EventArgs)

2024/07/26 17:16:11 [1.0.2.6] ARDOP_Win1.My.MyApplication: 

Method not found: void Microsoft.DirectX.DirectSound.DeviceInformation..ctor()

  at ARDOP_Win1.TNCSetup.BasicSetup_Load (System.Object sender, System.EventArgs e) [0x0046c] in <50c9e321894142b7b547d6d860398051>:0 

  at System.Windows.Forms.Form.OnLoad (System.EventArgs e) [0x000d1] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Form.OnCreateControl () [0x00031] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control.CreateControl (System.Boolean fIgnoreVisible) [0x000ed] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control.CreateControl () [0x00008] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control.WmShowWindow (System.Windows.Forms.Message& m) [0x00051] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x0071b] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) [0x00043] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.ContainerControl.WndProc (System.Windows.Forms.Message& m) [0x0001a] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Form.WmShowWindow (System.Windows.Forms.Message& m) [0x00013] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Form.WndProc (System.Windows.Forms.Message& m) [0x00290] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control+ControlNativeWindow.OnMessage (System.Windows.Forms.Message& m) [0x00001] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x000b3] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

  at System.Windows.Forms.NativeWindow.Callback (System.Windows.Forms.Message& m) [0x00025] in <e42196e17ddc4ed89464fee8a5bcb492>:0 

Void BasicSetup_Load(System.Object, System.EventArgs)

I realized Microsoft.DirectX.DirectSound might be a missing winemono method or maybe even a missing DLL - google took me to this Microsoft MSDN page which led me to Microsoft.DirectX.DirectSound.dll. I found that Austin English had already tracked this DLL to DXd21c and created a winetricks verb: winetricks mdx

Installing winetricks -q mdx fixed the soundcard detection issue. I was then able to successfully play tones through ARDOP.

WheezyE commented 1 month ago

dotnet46 install is not really feasible on most Pi systems since its installer is so unstable. Winemono is much more feasible to install and also MUCH faster to install and run software.

WheezyE commented 1 month ago

Fixed RMS Express + winemono + ARDOP by adding winetricks -q mdx 3e5c27fa2d764cedeeda38b156a6efdd6c4aa71f