Closed vscsilva closed 1 year ago
Jop, i am currently trying to get that up and running but fail with wineasio. I compiled the 32 bit and 64 bit .dll/.dll.so and was able to register... at least wine64 regsrv32 wineasio.dll told me it should have been registered. seems like the pfx wineprefix is 64 bit, so i tried it with the 64 bit dll, but running winecfg does not show any wineasio in the libraries. same with the 32 bit version.
wine64 regsrv32 wineasio.dll
I'm not sure if that's how you meant it, but regsvr32
is a standalone command that doesn't need wine
in front of it. In fact, in older wine versions wine regsvr32
did work, but the last time I tried, it didn't with a newer one.
i tried it with the 64 bit dll
Rocksmith is 32 bit and therefore needs the 32 bit dll.
I can confirm though, that the prefix seems to be 64 bit, judging by the C:\Windows\SysWow64
folder
wine64 regsrv32 should be used on 64bit prefixes, which is the case for the pfx folder where rocksmith is inside, so i am not sure if the 32 bit dll should be used or the 64 bit dll, but i would assume that wine runs in 64 bit mode, it should be the 64 bit dll so i can use winecfg and override it
but as mentioned, it did neither work with 32 bit nor with 64 bit wineasio.dll
[oli@DESKTOP-E83VF5L ~]$ echo $WINEPREFIX
/home/oli/.steam/steam/steamapps/compatdata/221680/pfx
[oli@DESKTOP-E83VF5L ~]$ regsvr32 /usr/lib/wine/i386-unix/wineasio.dll
002c:fixme:winediag:LdrInitializeThunk wine-staging 7.12 is a testing version containing experimental patches.
002c:fixme:winediag:LdrInitializeThunk Please mention your exact version when filing bug reports on winehq.org.
regsvr32: DLL '/usr/lib/wine/i386-unix/wineasio.dll' erfolgreich registriert
[oli@DESKTOP-E83VF5L ~]$ regsvr32 /usr/lib/wine/i386-unix/wineasio.dll.so
regsvr32: DLL '/usr/lib/wine/i386-unix/wineasio.dll.so' erfolgreich registriert
[oli@DESKTOP-E83VF5L ~]$ winecfg
nothing in winecfg -> libraries with name wineasio
wine64 regsrv32 should be used on 64bit prefixes
This might be information about wine that I don't/didn't know, I'm not an expert on wine after all. Haven't looked it up yet.
However (each tried with a fresh prefix):
wine64 regsvr32 <32-bit dll> # Failed to register
wine64 regsvr32 <64-bit dll> # Successfully registers and game doesn't detect output.
wine64 regsvr <32-bit dll> # Failed
wine64 regsvr <64-bit dll> # Failed
regsvr32 <32-bit dll> # Works
regsvr32 <64-bit dll> # Failed to register
regsvr <32-bit dll> # unknown command
regsvr <64-bit dll> # unknown command
wine regsvr32 <whatever> # Seems to be working again...
but i would assume that wine runs in 64 bit mode, it should be the 64 bit dll
A 32 bit program on a 64 bit Windows machine wouldn't use 64 bit resources, because it's made to (also) be used on 32 bit machines.
Rocksmith is a 32 bit software (you can run file Rocksmith2014.exe
on it to see yourself) and needs the 32 bit dll.
nothing in winecfg -> libraries with name wineasio
https://github.com/theNizo/linux_rocksmith/blob/main/guides/unused.md (TL/DR: Don't worry about that step.)
regsvr32 <32-bit dll> # Works
and as mentioned, this does not work on my side. when i go to libraries, click "add", there is no wineasio to select. When i run ASIOSigGen.exe in that prefix, it says: no asio device. so this is absolutely no step that can simply be skipped. maybe some magic happens when the .dll/.dll.so is copied somewhere, dont know.
this is the log i get:
[oli@DESKTOP-E83VF5L Rocksmith2014]$ cat RS_ASIO-log.txt
0.000 [INFO] - Wrapper DLL loaded (v0.6.3)
0.000 [INFO] PatchOriginalCode
0.050 [INFO] image crc32: 0xd1b38fcb
0.330 [INFO] Patching CoCreateInstance
0.330 [INFO] Patch_CallAbsoluteIndirectAddress - num locations: 2
0.330 [INFO] Patching call at 00C02DBD
0.330 [INFO] Patching call at 00E75278
0.330 [INFO] Patching PortAudio MarshalStreamComPointers
0.330 [INFO] Patch_CallRelativeAddress - num locations: 1
0.330 [INFO] Patching call at 00E7483F
0.330 [INFO] Patching PortAudio UnmarshalStreamComPointers
0.330 [INFO] Patch_CallRelativeAddress - num locations: 1
0.330 [INFO] Patching call at 00E748F4
0.330 [INFO] Patching Two Guitar Tones Connected Message Box (num locations: 1)
0.330 [INFO] Patching bytes at 007C0C5F
0.330 [INFO] Patched_CoCreateInstance called: IID_IMMDeviceEnumerator
0.330 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eRender - role: eMultimedia
0.330 [INFO] RSAggregatorDeviceEnum::UpdateAvailableDevices
0.330 [INFO] AsioHelpers::FindDrivers
0.333 [INFO] WineASIO
0.333 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - output requesting ASIO driver: WineASIO
0.333 [INFO] Creating AsioSharedHost - dll: wineasio.dll
0.334 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
0.334 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
0.334 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - input[0] requesting ASIO driver: WineASIO
0.334 [INFO] Creating AsioSharedHost - dll: wineasio.dll
0.335 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
0.335 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
0.335 [INFO] DebugDeviceEnum::UpdateAvailableDevices - 0 render devices, 0 capture devices
0.335 [INFO] hr: 80070490
0.335 [INFO] *ppEndpoint: 00000000
0.335 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eCapture - role: eMultimedia
0.335 [INFO] hr: 80070490
0.335 [INFO] *ppEndpoint: 00000000
0.335 [INFO] DebugDeviceEnum::EnumAudioEndpoints - dataFlow: eAll - dwStateMask: 1
0.335 [INFO] hr: S_OK
0.335 [INFO] *ppDevices: 1043BE30
3.069 [INFO] Patched_CoCreateInstance called: IID_IMMDeviceEnumerator
3.070 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eRender - role: eMultimedia
3.070 [INFO] RSAggregatorDeviceEnum::UpdateAvailableDevices
3.070 [INFO] AsioHelpers::FindDrivers
3.070 [INFO] WineASIO
3.070 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - output requesting ASIO driver: WineASIO
3.070 [INFO] Creating AsioSharedHost - dll: wineasio.dll
3.072 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
3.072 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
3.072 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - input[0] requesting ASIO driver: WineASIO
3.072 [INFO] Creating AsioSharedHost - dll: wineasio.dll
3.074 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
3.074 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
3.074 [INFO] DebugDeviceEnum::UpdateAvailableDevices - 0 render devices, 0 capture devices
3.074 [INFO] hr: 80070490
3.074 [INFO] *ppEndpoint: 00000000
3.074 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eCapture - role: eMultimedia
3.074 [INFO] hr: 80070490
3.074 [INFO] *ppEndpoint: 00000000
3.074 [INFO] DebugDeviceEnum::EnumAudioEndpoints - dataFlow: eAll - dwStateMask: 1
3.074 [INFO] hr: S_OK
3.074 [INFO] *ppDevices: 1043FE70
3.075 [INFO] DebugDeviceEnum::RegisterEndpointNotificationCallback
41.630 [INFO] DebugDeviceEnum::UnregisterEndpointNotificationCallback
41.790 [INFO] - Wrapper DLL unloaded
so it finds a wineasio device but is not able to use the .dll
i added the wineasio entry myself for testing and set it to builtin, then native, but did not help in any way.
when i go to libraries, click "add", there is no wineasio to select.
Ok, I think there's been a misunderstanding here. With "working" I meant that the game has sound. I can confirm the dll not listed in winecfg
on my working setup (and don't remember there ever being a dropdown, but that's another topic).
But AFAIK, you should be fine if the following command outputs two paths:
find $WINEPREFIX -name "wineasio.dll"
so this is absolutely no step that can simply be skipped.
I'm not sure if you're talking about the winecfg
step, or the registering command. winecfg
can be skipped, the registering command cannot.
so it finds a wineasio device but is not able to use the .dll
Did you start the game from the "Play" button in Steam, or from the terminal?
I did start it from steam with the play button maybe we have some misunderstandings, english is not my native language, so maybe i read some parts wrong ;)
find $WINEPREFIX -name "wineasio.dll" returns nothing, as i did not copy that file manually. maybe thats a problem. i will copy that file into the prefix and test again
i copied the .dll and .dll.so in $WINEPREFIX's system/system32 and now the game does start but freezes quiet early. the output of the rs asio debug log:
[oli@DESKTOP-E83VF5L Rocksmith2014]$ cat RS_ASIO-log.txt
0.000 [INFO] - Wrapper DLL loaded (v0.6.3)
0.000 [INFO] PatchOriginalCode
0.049 [INFO] image crc32: 0xd1b38fcb
0.190 [INFO] Patching CoCreateInstance
0.190 [INFO] Patch_CallAbsoluteIndirectAddress - num locations: 2
0.191 [INFO] Patching call at 00C02DBD
0.191 [INFO] Patching call at 00E75278
0.191 [INFO] Patching PortAudio MarshalStreamComPointers
0.191 [INFO] Patch_CallRelativeAddress - num locations: 1
0.191 [INFO] Patching call at 00E7483F
0.191 [INFO] Patching PortAudio UnmarshalStreamComPointers
0.191 [INFO] Patch_CallRelativeAddress - num locations: 1
0.191 [INFO] Patching call at 00E748F4
0.191 [INFO] Patching Two Guitar Tones Connected Message Box (num locations: 1)
0.191 [INFO] Patching bytes at 007C0C5F
0.191 [INFO] Patched_CoCreateInstance called: IID_IMMDeviceEnumerator
0.191 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eRender - role: eMultimedia
0.191 [INFO] RSAggregatorDeviceEnum::UpdateAvailableDevices
0.191 [INFO] AsioHelpers::FindDrivers
0.194 [INFO] WineASIO
0.194 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - output requesting ASIO driver: WineASIO
0.194 [INFO] Creating AsioSharedHost - dll: wineasio.dll
0.201 [ERROR] ASIO Error: WineASIO does not return error messages
0.201 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
0.201 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
0.201 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - input[0] requesting ASIO driver: WineASIO
0.201 [INFO] Creating AsioSharedHost - dll: wineasio.dll
0.205 [ERROR] ASIO Error: WineASIO does not return error messages
0.205 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
0.206 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
0.206 [INFO] DebugDeviceEnum::UpdateAvailableDevices - 0 render devices, 0 capture devices
0.206 [INFO] hr: 80070490
0.206 [INFO] *ppEndpoint: 00000000
0.206 [INFO] DebugDeviceEnum::GetDefaultAudioEndpoint - dataFlow: eCapture - role: eMultimedia
0.206 [INFO] hr: 80070490
0.206 [INFO] *ppEndpoint: 00000000
0.206 [INFO] DebugDeviceEnum::EnumAudioEndpoints - dataFlow: eAll - dwStateMask: 1
0.206 [INFO] hr: S_OK
0.206 [INFO] *ppDevices: 146EBE30
(English version below, in case I guessed wrong with german, or you're not @damnms)
Du, ich sprech auch deutsch (hab den Terminal-output gesehen und daran geurteilt), also wenn dir das leichter fällt, können wir das machen. Es ist halt jetzt so ziemlich individuelle Fehlerbehebung, weshalb ich weitere Probleme, die dir in den Weg kommen, auf ein eigenes Issue auslagern würde. Dann kann ich besser erklären, ohne dass andere Leute hier unnötig viele Nachrichten lesen, die mit individueller Fehlerbehebung zu tun haben.
Ich nehme mal an, dass du wineasio korrekt auf deinem System installiert hast und RS_ASIO scheint ebenfalls richtig eingerichtet.
regsvr32
fügt dir u.a. die DLLs in zwei Verzeichnisse im Prefix. Daher sollte der find
Befehl auch etwas ausgeben. Wie gesagt, so wie ich es gemacht habe, ist der Befehl gut durchgelaufen. Bei dir scheinbar auch.
Jetzt darfst du das Spiel aber nicht über die Steam Oberfläche starten (frag mich nicht, warum, das versteh ich auch (noch) nicht), sondern wir werden es über das Terminal machen. Gehe in den Pfad, in dem Rocksmith installiert ist und führe von dort aus den letzten Befehl aus meinem Guide aus.
(this is not a complete translation as I explained a few things that I've already explained in english.)
I probably should have done this earlier, but this turned into individual debugging. If this comment doesn't solve your problem, or new problems arise, please open a seperate issue.
Don't copy by hand, that should happen with the regsvr32
command. That's why the find
command is supposed to return something.
If you've done this, look up "Starting the game" in my guide. TL/DR: Use a terminal, cd
into the root of your Rocksmith installation and run the last command in the whole guide.
Running Fedora Silverblue as my desktop OS. I was able to toolbox enter
a clean f37 container, followed by:
# install build deps
sudo dnf install -y gcc make glibc-devel.i686 wine-devel.i686 wine-devel.x86_64 pipewire-jack-audio-connection-kit-devel.i686
# allow linker to find libjack (only needed for build)
# probably a bad workaround for broken pkg-config
sudo ln -s libjack.so.0 /usr/lib64/pipewire-0.3/jack/libjack.so
Afterwards, was able to build latest wineasio v1.1.0
after modifying the makefiles:
diff --git a/Makefile.mk b/Makefile.mk
index 3351d5e..0b3df8c 100644
--- a/Makefile.mk
+++ b/Makefile.mk
@@ -40,7 +40,7 @@ INCLUDE_PATH += -I/opt/wine-stable/include
INCLUDE_PATH += -I/opt/wine-stable/include/wine/windows
INCLUDE_PATH += -I/opt/wine-staging/include
INCLUDE_PATH += -I/opt/wine-staging/include/wine/windows
-LIBRARIES = $(shell pkg-config --libs jack)
+LIBRARIES = -ljack
# 64bit build needs an extra flag
ifeq ($(M),64)
@@ -63,10 +63,14 @@ wineasio_dll_LDFLAGS = -shared \
-m$(M) \
-mnocygwin \
$(wineasio_dll_MODULE:%=%.spec) \
+ -L/usr/lib$(M) \
+ -L/usr/lib \
-L/usr/lib$(M)/wine \
-L/usr/lib/wine \
-L/usr/lib/$(ARCH)-linux-gnu/wine \
-L/usr/lib/$(ARCH)-linux-gnu/wine-development \
+ -L/usr/lib$(M)/pipewire-0.3/jack \
+ -L/usr/lib/pipewire-0.3/jack \
-L/opt/wine-stable/lib \
-L/opt/wine-stable/lib/wine \
-L/opt/wine-stable/lib$(M) \
% make clean 32 64
Seems to be the minimal changes required to make it work, but feel free to tinker more.
Didn't go anywhere further though, since I got Steam installed as flatpak.
(Also trying to tackle it by building wineasio as a flatpak addon, but that's early in progress.)
the dll is available from copr, there are also build instructions iirc. what you posted is also listed as bug or so in wineasio. but even with the .dll, you probably wont be able to get it working. i tried for 2-3 days and failed. there is an application for testing that wineasio works (correctly registered). it produces some sounds out of the wineasio device. i ran this application about 20 times, 2-3 times it produced sound. so even if you think you might have it, it might be only luck. there seems to be some race conditions and whatever.
https://github.com/wineasio/wineasio/issues/58 https://github.com/wineasio/wineasio/issues/57
test application including bug report, probably nr. 1 to continue when this wierd behaviour occurs and re-open that: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1495
@Siarkowy okay, thank you, that works and I wouldn't have found out myself. Shouldn't have deleted my comment after all.
EDIT: VBASIOTest32.exe works with just wine. Let's look further.
Since sandboxing probably creates obstacles, would you be fine with Steam from the rpmfusion nonfree repo?
Yeah, sandboxing makes this even more complicated. I'll try to install steam natively as a layered package on my f37 laptop instead. (However, if flatpak is solved, it makes it portable regardless of OS. Pipewire becomes the only hard requirement.)
Not sure if wineasio.dll{,.so}
need to be placed in /usr/lib{,64}
or it is enough to put that in comopatibilitytools.d/
? I'm trying to understand, how regsvr32
actually works and where the libs are expected.
sandboxing
Come to think of it, can't you adjust what is accessible and what isn't? Because then you could look for the needed files once we get it running.
Not sure if wineasio.dll{,.so} need to be placed in /usr/lib{,64} or it is enough to put that in compatibilitytools.d/
Since the regsvr32 command changed recently, there might be a change. I can test this when I'm back home. The safest bet is to install wineasio properly with these commands (adjusted for Fedora):
sudo cp build32/wineasio.dll /usr/lib/wine/i386-windows/wineasio.dll
sudo cp build32/wineasio.dll.so /usr/lib/wine/i386-unix/wineasio.dll.so
sudo cp build64/wineasio.dll /usr/lib64/wine/x86_64-windows/wineasio.dll
sudo cp build64/wineasio.dll.so /usr/lib64/wine/x86_64-unix/wineasio.dll.so
Never without an EDIT: And also copy them to your Proton install
EDIT: VBASIOTest32.exe works with just wine. Let's look further.
did you only execute it, or did you run the application with the asio device selected? this is a huge difference. if the later, please paste the output.
cd
rm -rf wine-test
INEPREFIX=$HOME/wine-test regsvr32 /usr/lib/wine/i386-windows/wineasio.dll
WINEPREFIX=$HOME/wine-test wine Downloads/VBAsioTest_1013/VBASIOTest32.exe
Since you wanted to know it for THAT sure, I then select "Devices" -> "ASIO: WineASIO"
Results in a beep and this view (working as it should):
great, in that case it seems like this is really a big progress compared to the old wine 7.x version. maybe i'll give it a try the next days. just to be sure: can you maybe do this 3-4 times? :P just want to see if it really does not crash
The safest bet is to install wineasio properly with these commands (adjusted for Fedora):
So in Silverblue, /usr/lib{,64}
is not writable. However, maybe installing wineasio from copr works; this would provide necessary libs in /usr
for regsvr
. Then, only wineasio.dll
need to be put into Proton installation.
I'll let you know if I got anything new.
when you use wineasio from copr, there are some things to adjust. self-compiling was more easy (at least for me ;) )
Alright, results:
Should work just fine, theoretically.
Managed to compile and install wineasio (should I credit you for this?)
All good, you can briefly mention when we flesh out the Fedora guide some more. ;)
logs say communication with wineasio worked
What does PROTON_LOG=1
produce with regard to wineasio?
What does PROTON_LOG=1 produce with regard to wineasio?
Took me a moment to find out what this flag does.
Oh well (I will think about this later, but IIRC I've had this before):
Oh well (I will think about this later, but IIRC I've had this before):
What happens if you try to LD_PRELOAD
jack as in https://github.com/theNizo/linux_rocksmith/issues/22#issuecomment-1508279208?
Then I get the RS_ASIO error message...
I'll bother with it later.
I suppose you run regsvr
as usual?
IT IS WORKING!
Installed Fedora on a spare Hard drive, plugged in via usb.
Other than building wineasio, I just had to adjust a few paths. I'm already on the Fedora guide.
Alright, Fedora pipewire guide is up. I need to do non-pipewire too, but I'll remind myself of that in a cleanup issue.
A Fedora guide would be great.