forum

KeyASIO - External ASIO backend for low-latency audio (2022/07/27)

posted
Total Posts
42
Topic Starter
yf_bmp
External ASIO/WASAPI_EXCLUSIVE backend for low-latency and safe osu! audio playback experience.

std - ✅
mania - ✅
taiko - 🆗 (Just without realtime mode)
ctb - 🆗 (Just play hitsounds)

While osu's original audio system has a latency for about 40 ms, this program can provide extremely low latency to as low as 0.6ms (Verified by EmertxE, determine by your devices, from tapping to hearing), and for most players the latency can be lower than about 8-15ms (with no standalone soundcard, from tapping to hearing).

Download

Release Page: https://github.com/Milkitic/KeyASIO.Net/releases

.NET 6.0 Desktop Runtime is required if you download the smallest asset.
For the other two (with -win86 or -win64 postfix), you need to install nothing more.

Introduction

We have been waiting for the very near future for several years, but it looks like that the dev team has been stopped supporting such heavy development for legacy osu. So there are many nice external community audio tools before like REAL, osu-External-ASIO-Sound, AsioHookForOsu, etc. But:
  1. Even with REAL, the osu's playback latency is still about 25ms. Anyway this is the easiest way to gain such improvement.
  2. Tools like osu-External-ASIO-Sound or AsioHookForOsu gives ASIO support, but they have some inevitable problems: 1. Inject and hook which is unsafe for your account. 2. Not perfect for custom hitsound support. 3. They need double soundcards
This project born to resolve these problems. As default, this program enables "RealtimeMode" in the configuration, which will use OsuRTDataProvider to read osu's memory without modifying. The OsuRTDataProvider is commonly used for broadcasting tools (like RTPP Displayer), and it looks safe because it was approved by peppy. But nothing will be guaranteed, so I should still say please do at your own risk.

Benefits of KeyASIO.Net:
  1. Support extremely low-latency playback around 0.6ms (determine by your devices, from tapping to hearing).
  2. Fully support for playing beatmap's custom hitsound including storyboard samples, and hitsound customization like: User skin, Ignore custom hitsound, Ignore samples, Ignore volumes, Ignore slidertails, etc.
  3. Optimize mania as per-key sound, just like behaviors in the game.
  4. Safe for your account, but no guarantee.
  5. A easy-to-use user interface.

Screenshots


Overview

Realtime options

Configuration

The KeyASIO.Net supports "FullMode" ("EnableMusicFunctions" in configuration), which can also synchronize the music, that will completely replace osu's sounds. This will make you much easier to start, but it has irresolvable problems. For players who has only one soundcard, you can try the fullmode. Otherwise, I only suggest with this option off.

Without standalone soundcard:

FullMode ENABLED:
Prerequisites:
* Install ASIO4ALL(https://www.asio4all.org) / Just use WASAPI_EXCLUSIVE
* Install VB-CABLE(https://vb-audio.com/Cable)
  1. Change the device in the software GUI, select ASIO4ALL or your default WASAPI device with exclusive, and confirm.
  2. If the ASIO4ALL is selected, open ASIO control panel and select your output device with others deselected. Press Advanced Options and adjust the options to lower the latency (Check latency at the software GUI)
  3. Check your osu game to test whether the game has lags or problems to play. If yes, select the game's output to VB-CABLE Input
  4. Change your own key bindings in the software GUI.
  5. Enjoy
FullMode DISABLED:
Prerequisites:
* Make sure you have at least 2 audio output devices (including HDMI Audio). An HDMI decoder with audio port is required if your monitor doesn't have audio port.
* A standalone mixer. Low-end device is just ok, since they are always very cheap. DO NOT USE WINDOWS MIXER SOFTWARES, since they will only increase the latency.
* Install ASIO4ALL / Just use WASAPI_EXCLUSIVE
  1. Use HDMI output to display monitor or HDMI decoder, and line-out to the mixer. Line-out your motherboard soundcard to the mixer. Plug your headphone into the mixer.
  2. Change the device in the software GUI, select ASIO4ALL and confirm.
  3. Open the ASIO4ALL control panel, and select something like HDMI Out with others deselected. Press Advanced Options and adjust the options to lower the latency (Check latency at the software GUI)
  4. Select your motherboard device in osu game. Please do not select the same device as ASIO4ALL. It doesn't work.
  5. Change your own key bindings in the software GUI.
  6. Set the effect volume to 0 in osu!.
  7. Open offset wizard, play with Auto mod and adjust the software's offset and osu!'s offset.
  8. Enjoy
With standalone soundcard:

FullMode ENABLED:
Same as "Without standalone soundcard"

FullMode DISABLED: (Suggested)
Prerequisites:
* Check if your soundcard has original ASIO driver. If no, install ASIO4ALL / just use WASAPI_EXCLUSIVE
* If your soundcard driver doesn't support ASIO concurrency, a standalone mixer is needed. Low-end device is just ok, since they are always very cheap. DO NOT USE WINDOWS MIXER SOFTWARES, since they will only increase the latency.
  1. Change the device in the software GUI, and select your ASIO Device.
  2. Change options in your ASIO control panel to lower the latency (Check latency at the software GUI).
  3. If you use mixer, line-out your motherboard soundcard and soundcard to the mixer. Plug your headphone into the mixer.
  4. Select the fit device in osu game. Select motherboard if you use mixer, select your soundcard otherwise.
  5. Change your own key bindings in the software GUI.
  6. Set the effect volume to 0 in osu!.
  7. Open offset wizard, play with Auto mod and adjust the software's offset and osu!'s offset.
  8. Enjoy
Full configuration instructions can be found in "appsettings.yaml".

FAQs

How to report bugs?
If you're sure it's a bug and have steps to reproduce, please open Github issue. For any other problems please reply in the forum page or Github's discussion page.

Todos/Known issues

  1. Sometimes the hit is muted. (headache thing)
  2. The music sync time is different from osu.

Thanks to the dev team for giving such an great game.
Muziyami
bump
RD-Sounds
wow
_Hikari
wcnb!
Shiki-Natsume
yfnb
B1ackSand
I will try this
pocket-Gao
YFNB
26Lin_Lucky
awesome
-Inui Sana-
COOOL
oO Ryujin Oo
Very niceee !!!! Thank youuuuu <3 <3 <3
Kert
Hi. I would like to try this, but no matter what I do I have no sound at all.
The instructions are a bit difficult to understand.
I tried "without standalone soundcard FullMode ENABLED" by selecting asio4all in keyasio, selecting only speakers in asio4all, in osu! neither speakers nor vbcable input give any audio.
What should I do?
I also have an option using DisplayPort audio output from monitor if that's important
Topic Starter
yf_bmp

Kert wrote:

Hi. I would like to try this, but no matter what I do I have no sound at all.
The instructions are a bit difficult to understand.
I tried "without standalone soundcard FullMode ENABLED" by selecting asio4all in keyasio, selecting only speakers in asio4all, in osu! neither speakers nor vbcable input give any audio.
What should I do?
I also have an option using DisplayPort audio output from monitor if that's important
Hi! "FullMode" enabled means that we give up osu's audio system, so the expected behavior is KeyASIO will play both music and hitsounds instead of osu itself.
But if the program was failed to read osu's memory, nothing will work. To check whether the program is successful to read osu!'s memory, you could:
1. Open the keyasio program.
2. Choose a map and exit back to SelectSong scene
3. Check if the "PlayTime" is changing
If "PlayTime" is changing, now in SelectSong scene, you should hear the music produced by KeyAsio program😀. If there is no music, please check if the FullMode option is on, or check the ASIO setting is correctly configured. In particular, some integrated soundcards can't work well with ASIO4ALL, so try WASAPI_Exclusive or HDMI out.
If "PlayTime" is not changing, try to reboot the system and reopen osu before any other programs. If it still doesn't work, some magic things that we don't know happened😂.
Vivace
Thanks yf, swapping back to Windows from Linux the release of this is perfect timing.
Playing around with it, it works well and the UI is really clean.

Couple things:
  1. Missing a note and still tapping the assigned hotkeys will continue to play the corresponding hitsound -- this is especially noticeable when chainmissing long streams
  2. If a map doesn't have a note hitsounded(?), the program resorts back to default hitsounds at a much louder volume than assigned(?). I'm not actually too sure on this point, but noticeable on a map like this: beatmapsets/766939#osu/1612129 Nvm, just realised you can ignore beatmap hitsounds
Thanks again for your work on this, looking forward to where it goes.
Kert
Thanks for the response!

yf_bmp wrote:

If "PlayTime" is changing, now in SelectSong scene, you should hear the music produced by KeyAsio program😀.
I don't hear the music but PlayTime is indeed changing

yf_bmp wrote:

If there is no music, please check if the FullMode option is on
How? What do you mean?

yf_bmp wrote:

try WASAPI_Exclusive
What should I do? Select speakers in KeyAsio and check WASAPI_Exclusive?
Still no sound at all
Topic Starter
yf_bmp

Kert wrote:

yf_bmp wrote:

If there is no music, please check if the FullMode option is on
How? What do you mean?
in "appsettings.yaml", make sure
# [EXPERIMENTAL] If true, the software will enable music related functions.
EnableMusicFunctions: true
Kert

yf_bmp wrote:

in "appsettings.yaml", make sure
# [EXPERIMENTAL] If true, the software will enable music related functions.
EnableMusicFunctions: true
Still no audio at all

log
16:11:17.951 INFO Application: Application started.
16:11:18.030 DEBUG ConfigurationFactory: Config file "appsettings.yaml" was loaded.
16:11:18.188 DEBUG SkinManager: Find skin: SkinDescription { FolderName = Kertwaii, Folder = D:\Games\osu!\Skins\Kertwaii, Name = Kertwaii, Author = Kert, Description = Kertwaii (Kertwaii by Kert) }
16:11:22.961 DEBUG Updater: Current version: 3.0.0-beta.12; Got version info: 3.0.0-beta.12
16:11:36.231 INFO ORTDP: ForceOsuSongsDirectory: 
16:11:36.231 INFO ORTDP: The ForceOsuSongsDirectory does not exist, try searching for the songs path.
16:11:36.231 INFO ORTDP: OSU Client Verison:b20220424 ORTDP Version:2.7.0
16:11:36.231 INFO ORTDP: Osu Path: D:\Games\osu!
16:11:36.231 INFO ORTDP: Beatmap Path: D:\Games\osu!\Songs
16:11:36.231 INFO ORTDP: [ID:0]Found osu!.exe process
16:11:36.231 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:36.231 ERROR ORTDP: Error Code:0x00000000
16:11:36.248 DEBUG ORTDP: Game Status Address (0):0x00000000
16:11:36.248 DEBUG ORTDP: Game Status Address (1):0x00000000
16:11:36.248 ERROR ORTDP: [ID:0]Init StatusFinder Failed! Retry after 3 seconds
16:11:39.258 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:39.258 ERROR ORTDP: Error Code:0x00000000
16:11:39.258 DEBUG ORTDP: Game Status Address (0):0x058595AD
16:11:39.258 DEBUG ORTDP: Game Status Address (1):0x005567F8
16:11:39.258 INFO ORTDP: [ID:0]Init StatusFinder Success!
16:11:39.258 INFO ORTDP: applied offset for osu!version(20220424) : NewerOrEquals 20220406,3 BeatmapAddress: 0 BeatmapFolder: 0 BeatmapSet: 0 BeatmapFileName: 8
16:11:39.274 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:39.274 ERROR ORTDP: Error Code:0x00000000
16:11:39.274 DEBUG ORTDP: Beatmap Base Address (0):0x0585ECD0
16:11:39.274 DEBUG ORTDP: Beatmap Base Address (1):0x03994FA0
16:11:39.274 INFO ORTDP: [ID:0]Init BeatmapFinder Success!
16:11:46.404 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.404 ERROR ORTDP: Error Code:0x00000000
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (0):0x00000000
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (1):0x00000000
16:11:46.419 DEBUG ORTDP: Use Fallback Accuracy Pattern
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (0):0x07AF236A
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (1):0x03995054
16:11:46.419 DEBUG ORTDP: Time Base Address (0):0x0585EFD7
16:11:46.419 DEBUG ORTDP: Time Base Address (1):0x00556A20
16:11:46.419 INFO ORTDP: [ID:0]Init PlayFinder Success!
16:11:46.419 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.419 ERROR ORTDP: Error Code:0x00000000
16:11:46.434 DEBUG ORTDP: Mode Address (0):0x0742C330
16:11:46.434 DEBUG ORTDP: Mode Address (1):0x005568F8
16:11:46.434 INFO ORTDP: [ID:0]Init ModeFinder Success!
16:11:46.434 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.434 ERROR ORTDP: Error Code:0x00000000
16:11:46.466 DEBUG ORTDP: Hit Event (Replay) Base Address: 0x039937E8 by pattern #3
16:11:46.466 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.466 ERROR ORTDP: Error Code:0x00000000
16:11:46.466 DEBUG ORTDP: Hit Event (Playing) Base Address: 0x03994904 by pattern #0
16:11:46.466 INFO ORTDP: [ID:0]Init HitEventFinder Success!
16:11:46.486 WARN ORTDP: ------------- ORTDP(Exception)--------------- 
System.MissingMethodException: Can not convert {0.4} to type System.Single.
   at Coosu.Beatmap.Configurable.KeyValueSection.Match(String line)
   at Coosu.Beatmap.Configurable.ConfigConvert.DeserializeObject[T](TextReader reader, ReadOptions options)
   at Coosu.Beatmap.OsuFile.ReadFromStream(Stream stream, Action`1 configReadOption)
   at Coosu.Beatmap.OsuFile.ReadFromFile(String path, Action`1 configReadOption)
   at OsuRTDataProvider.BeatmapInfo.Beatmap..ctor(Int32 osu_id, Int32 set_id, Int32 id, String filename) in D:\a\KeyASIO.Net\KeyASIO.Net\dependencies\OsuRTDataProviderCore\BeatmapInfo\Beatmap.cs:line 111
   at OsuRTDataProvider.Memory.OsuBeatmapFinder.GetCurrentBeatmap(Int32 osu_id) in D:\a\KeyASIO.Net\KeyASIO.Net\dependencies\OsuRTDataProviderCore\Memory\OsuBeatmapFinder.cs:line 87

16:11:46.486 WARN RealtimeModeManager: Failed to start: the beatmap is null
16:11:51.325 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.325 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.325 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.325 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,239ms
16:11:51.529 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.529 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.529 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.529 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,035ms
16:11:51.719 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.719 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.719 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.719 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,031ms
16:11:51.897 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.897 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.897 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.897 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,032ms
16:11:52.096 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:52.097 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:52.097 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:52.097 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,032ms
16:13:04.344 INFO Application: Application stopped.
log2
2022-07-26 16:11:17.8916 Info Message Template Auto Format enabled
2022-07-26 16:11:17.9086 Info Adding target FileTarget(Name=allfile)
2022-07-26 16:11:17.9186 Info Adding target ColoredConsoleTarget(Name=logconsole)
2022-07-26 16:11:17.9186 Warn Error has been raised. Exception: NLog.NLogConfigurationException: Failed to create Target of type: RichTextBoxTarget
 ---> System.ArgumentException: Target type-alias is unknown: 'RichTextBoxTarget'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.FactoryCreateInstance[T](String classType, INamedItemFactory`2 factory)
   --- End of inner exception stack trace ---
2022-07-26 16:11:17.9366 Warn Error has been raised. Exception: NLog.NLogConfigurationException: Target 'RichTextBoxTarget' not found for logging rule: *.
2022-07-26 16:11:17.9366 Info Validating config: TargetNames=logconsole, allfile, ConfigItems=61, FilePath=E:\Downloads\KeyAsio.Net-v3.0.0-beta.12-win64\bin\NLog.config
2022-07-26 16:11:17.9517 Info Configuration initialized.
2022-07-26 16:11:17.9517 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.0.1.1159. Product version: 5.0.1+a3718b8417284a90b0f73b2cbba47bc4067f6a3a. GlobalAssemblyCache: False
2022-07-26 16:13:04.5757 Info AppDomain Shutting down. LogFactory closing...
2022-07-26 16:13:04.5757 Info LogFactory has been closed.

UPD: Added log files
NxGD
wew
Topic Starter
yf_bmp

Kert wrote:

yf_bmp wrote:

in "appsettings.yaml", make sure
# [EXPERIMENTAL] If true, the software will enable music related functions.
EnableMusicFunctions: true
Still no audio at all

log
16:11:17.951 INFO Application: Application started.
16:11:18.030 DEBUG ConfigurationFactory: Config file "appsettings.yaml" was loaded.
16:11:18.188 DEBUG SkinManager: Find skin: SkinDescription { FolderName = Kertwaii, Folder = D:\Games\osu!\Skins\Kertwaii, Name = Kertwaii, Author = Kert, Description = Kertwaii (Kertwaii by Kert) }
16:11:22.961 DEBUG Updater: Current version: 3.0.0-beta.12; Got version info: 3.0.0-beta.12
16:11:36.231 INFO ORTDP: ForceOsuSongsDirectory: 
16:11:36.231 INFO ORTDP: The ForceOsuSongsDirectory does not exist, try searching for the songs path.
16:11:36.231 INFO ORTDP: OSU Client Verison:b20220424 ORTDP Version:2.7.0
16:11:36.231 INFO ORTDP: Osu Path: D:\Games\osu!
16:11:36.231 INFO ORTDP: Beatmap Path: D:\Games\osu!\Songs
16:11:36.231 INFO ORTDP: [ID:0]Found osu!.exe process
16:11:36.231 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:36.231 ERROR ORTDP: Error Code:0x00000000
16:11:36.248 DEBUG ORTDP: Game Status Address (0):0x00000000
16:11:36.248 DEBUG ORTDP: Game Status Address (1):0x00000000
16:11:36.248 ERROR ORTDP: [ID:0]Init StatusFinder Failed! Retry after 3 seconds
16:11:39.258 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:39.258 ERROR ORTDP: Error Code:0x00000000
16:11:39.258 DEBUG ORTDP: Game Status Address (0):0x058595AD
16:11:39.258 DEBUG ORTDP: Game Status Address (1):0x005567F8
16:11:39.258 INFO ORTDP: [ID:0]Init StatusFinder Success!
16:11:39.258 INFO ORTDP: applied offset for osu!version(20220424) : NewerOrEquals 20220406,3 BeatmapAddress: 0 BeatmapFolder: 0 BeatmapSet: 0 BeatmapFileName: 8
16:11:39.274 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:39.274 ERROR ORTDP: Error Code:0x00000000
16:11:39.274 DEBUG ORTDP: Beatmap Base Address (0):0x0585ECD0
16:11:39.274 DEBUG ORTDP: Beatmap Base Address (1):0x03994FA0
16:11:39.274 INFO ORTDP: [ID:0]Init BeatmapFinder Success!
16:11:46.404 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.404 ERROR ORTDP: Error Code:0x00000000
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (0):0x00000000
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (1):0x00000000
16:11:46.419 DEBUG ORTDP: Use Fallback Accuracy Pattern
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (0):0x07AF236A
16:11:46.419 DEBUG ORTDP: Playing Accuracy Base Address (1):0x03995054
16:11:46.419 DEBUG ORTDP: Time Base Address (0):0x0585EFD7
16:11:46.419 DEBUG ORTDP: Time Base Address (1):0x00556A20
16:11:46.419 INFO ORTDP: [ID:0]Init PlayFinder Success!
16:11:46.419 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.419 ERROR ORTDP: Error Code:0x00000000
16:11:46.434 DEBUG ORTDP: Mode Address (0):0x0742C330
16:11:46.434 DEBUG ORTDP: Mode Address (1):0x005568F8
16:11:46.434 INFO ORTDP: [ID:0]Init ModeFinder Success!
16:11:46.434 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.434 ERROR ORTDP: Error Code:0x00000000
16:11:46.466 DEBUG ORTDP: Hit Event (Replay) Base Address: 0x039937E8 by pattern #3
16:11:46.466 ERROR ORTDP: (X64)Error Code:0x00000057
16:11:46.466 ERROR ORTDP: Error Code:0x00000000
16:11:46.466 DEBUG ORTDP: Hit Event (Playing) Base Address: 0x03994904 by pattern #0
16:11:46.466 INFO ORTDP: [ID:0]Init HitEventFinder Success!
16:11:46.486 WARN ORTDP: ------------- ORTDP(Exception)--------------- 
System.MissingMethodException: Can not convert {0.4} to type System.Single.
   at Coosu.Beatmap.Configurable.KeyValueSection.Match(String line)
   at Coosu.Beatmap.Configurable.ConfigConvert.DeserializeObject[T](TextReader reader, ReadOptions options)
   at Coosu.Beatmap.OsuFile.ReadFromStream(Stream stream, Action`1 configReadOption)
   at Coosu.Beatmap.OsuFile.ReadFromFile(String path, Action`1 configReadOption)
   at OsuRTDataProvider.BeatmapInfo.Beatmap..ctor(Int32 osu_id, Int32 set_id, Int32 id, String filename) in D:\a\KeyASIO.Net\KeyASIO.Net\dependencies\OsuRTDataProviderCore\BeatmapInfo\Beatmap.cs:line 111
   at OsuRTDataProvider.Memory.OsuBeatmapFinder.GetCurrentBeatmap(Int32 osu_id) in D:\a\KeyASIO.Net\KeyASIO.Net\dependencies\OsuRTDataProviderCore\Memory\OsuBeatmapFinder.cs:line 87

16:11:46.486 WARN RealtimeModeManager: Failed to start: the beatmap is null
16:11:51.325 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.325 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.325 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.325 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,239ms
16:11:51.529 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.529 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.529 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.529 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,035ms
16:11:51.719 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.719 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.719 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.719 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,031ms
16:11:51.897 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:51.897 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:51.897 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:51.897 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,032ms
16:11:52.096 DEBUG STA Window: [DEBUGGING] OemQuestion KeyDown
16:11:52.097 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executing
16:11:52.097 WARN StandardAudioProvider: [DEBUGGING] Game hasn't started, return empty.
16:11:52.097 DEBUG StandardAudioProvider: [DEBUGGING] [GetSoundOnClick] executed in 0,032ms
16:13:04.344 INFO Application: Application stopped.
log2
2022-07-26 16:11:17.8916 Info Message Template Auto Format enabled
2022-07-26 16:11:17.9086 Info Adding target FileTarget(Name=allfile)
2022-07-26 16:11:17.9186 Info Adding target ColoredConsoleTarget(Name=logconsole)
2022-07-26 16:11:17.9186 Warn Error has been raised. Exception: NLog.NLogConfigurationException: Failed to create Target of type: RichTextBoxTarget
 ---> System.ArgumentException: Target type-alias is unknown: 'RichTextBoxTarget'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.FactoryCreateInstance[T](String classType, INamedItemFactory`2 factory)
   --- End of inner exception stack trace ---
2022-07-26 16:11:17.9366 Warn Error has been raised. Exception: NLog.NLogConfigurationException: Target 'RichTextBoxTarget' not found for logging rule: *.
2022-07-26 16:11:17.9366 Info Validating config: TargetNames=logconsole, allfile, ConfigItems=61, FilePath=E:\Downloads\KeyAsio.Net-v3.0.0-beta.12-win64\bin\NLog.config
2022-07-26 16:11:17.9517 Info Configuration initialized.
2022-07-26 16:11:17.9517 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.0.1.1159. Product version: 5.0.1+a3718b8417284a90b0f73b2cbba47bc4067f6a3a. GlobalAssemblyCache: False
2022-07-26 16:13:04.5757 Info AppDomain Shutting down. LogFactory closing...
2022-07-26 16:13:04.5757 Info LogFactory has been closed.

UPD: Added log files
It seems that it's a beatmap parsing issue, please try other beatmaps? or which beatmap did you select.
Edit: OK now I can confirm it's a bug between different CultureInfos. Looks it was fixed in beta13.

Edit to Vivace: There is no better and safe way to detect object hitting with low latency out of process, so this is truly a limited function.
Kert

yf_bmp wrote:

Edit: OK now I can confirm it's a bug between different CultureInfos. Looks it was fixed in beta13.
Thanks
Seems to work now with fullmode on using asio4all and selecting vbcable in osu! as audio device. But if I select default audio device everything sounds alright but all circles become misses when hit
There is a bug though when music isn't synchronized with the map if you start the map -> quit -> then start it again or smth like that. The music volume lowers down, map starts, but music doesn't restart and just continues
I'm not good at audio stuff but can I put an equalizer on top of the output of this program?
Shiyo
Is it possible for you to do a short video explanation of how to use this?
xDololow
Hello. This map acts kinda weird, in the menu it plays fine but when you start paying it's not playing beatmap song.
megafuse
been waiting for a program like this. this works well on me, but sometimes the hitsound doesnt register (already known issue). maybe you should enable an option where the hitsound plays even if i miss the hitcircle? like a force-play hitsound thing
xDololow

megafuse wrote:

maybe you should enable an option where the hitsound plays even if i miss the hitcircle?
It already does that thing and its not good tbh.
unholyghsttyper
Hi guys.
Tascam us-4x4 user here.

Okay. It's a little bizzare one.
Wasapi and Asio detects just fine.

I start KeyAsio and configure it.
Start OSU!
KeyAsio detects that i'm in game just fine.

non-exclusive WASAPI:
In realtime mode i can always hear slider related hitsounds. And seems like i can configure it.
Regular hitsounds work ONLY when i'm pressing the button. And not always.
Even on Auto.
Auto works fine on realtime.

Fullmode enables music on top of realtime.

Could be nice if auto played all hitsounds so i can measure latency.
Cuz now i'm not sure how to do it.

exclusive Wasapi:
Same as non-exclusive BUT SOMEHOW Auto forgets how to play the game.
It misses circles and 100 sliders.
Which is funny af.

Asio works like exclusive Wasapi.

Overall... it works.
BUT i can't say how much factual latency there is until auto can play all hitsounds.
Until then i cannot measure it.

Well... if you can automate sliderticks, maybe you can make all hitsounds always play.
I requested this feature here:
community/forums/topics/1635438?n=1

Would be very useful to people who play with perfect offset.

Anyway, good job.
ciru
This seems really useful, unfortunately because the hitsounds keep cutting out it's basically unplayable for me
Hexishu
So idk if anyone else had a problem with it, but when I tried it out on my windows system I couldn't even play osu at all, none of the taps would register, I would just straight up miss, although the taps are shown on the right(tap overlay) clearly that the inputs go through, but not to the game (?) Wanted to test it with a friend aswell and he got the exact the samae issue, maybe I just missed something
-slim-
Really cool program! Id be really happy if you could implement offset adjustment key binds as I play a lot of old maps and they tend to be a little inconsistent in that regard.
knit393
POGGER Program thank you for your develop
Stomiks
This is really useful
Nqinn
can you explain again to us how to use this? I tried it and it didnt working (maybe its because im doing it wrong or any else). And what is standalone soundcard thing?
Hadal
This doesn't work well at all for me currently, hitsounds are very broken and the latency between songs seemed to vary wildly and was never that good in the first place.
Wutever

yf_bmp wrote:

Hi! "FullMode" enabled means that we give up osu's audio system,
considering how much i utterly despise osu's audio since peppy did god knows what in 2020 does this fix the fucking CONSTANT offset inconsistency? if so the idea of saying fuck osu's audio lets do it ourselves sounds VERY appealing.

every effort or look at ive done at audio latency stuff has been an attempt to fix that inconsistency. im tired of needing varying local offsets NO MATTER the global on 75-80%+ of all maps i play. honestly i care much less about the actual audio latency then i do this detail right here.

im gonna have to figure out how the hell to use this then.....if i even can use this
peppy
> every effort or look at ive done at audio latency stuff has been an attempt to fix that inconsistency

The change we made was one to bring the audio subsystem up-to-date with newer windows standards. You can still toggle the old version in settings.

Anyway, have you tested whether lazer fixes your issue? We've made improvements there that may fix what is likely something local to your hardware that (since we don't see anything like this when testing stable).


I'd also highly recommend against using modifications like the one in this thread. To us it can look like a cheat, since it's modifying game DLL and timing interactions.
Topic Starter
yf_bmp

peppy wrote:

> every effort or look at ive done at audio latency stuff has been an attempt to fix that inconsistency

The change we made was one to bring the audio subsystem up-to-date with newer windows standards. You can still toggle the old version in settings.

Anyway, have you tested whether lazer fixes your issue? We've made improvements there that may fix what is likely something local to your hardware that (since we don't see anything like this when testing stable).


I'd also highly recommend against using modifications like the one in this thread. To us it can look like a cheat, since it's modifying game DLL and timing interactions.
Actually it's not modifying the game. It was only reading the game timestamp/status and keyboard status in memory by system wide API like other broadcast tools (https://github.com/l3lackShark/gosumemory) and playing audio in another application. Muting is necessary in osu.
-- - --
Device: Topping E2x2
Latency just EXTREMELY good.Thanks for the tool:)
Wutever
finally trying this out LOL. and uhhh its interesting. i do not know very much about audio stuff at all regarding aiso, dacs, etc. for the most part ive just always used a usb headset or 3.5mm. anyway i can get it to kinda work....like i get audio and hitsounds except its very clippy, especially the hitsounds. actually like every 10-15 hitsounds or so they just stop for a second or two then start doubling or tripling up all at the same time and honestly is kinda ehh. might be better off just disabling the hitsounds and going pure audio that seems pretty doable for what ive messed around so far with this thing.
CommonDave
Was wondering why Osu! didn't support ASIO and then I found this, thanks a lot!
Works great with my PreSonus Studio 68c's ASIO drivers.

For anyone who wants a good generic asio driver (that also allows other system sounds to play) give FL Stuio ASIO a try - I used it for years before I got a proper audio interface while producing and it was phenomenal, latencies can go as low as 256 samples (around 6ms).

Looks like you can't download it separately but it's included with the FL Studio demo, so no purchase is required.
Mattyz
Cool , it was working fine at first, then it started crashing after starting a map for no reason , any solutions?

EDIT: It crashes after i turn on FullMode , without it, it works but i have no music at all
Cosmic Corsair
The change in delay is insane, but without being able to adjust song offset it's completely unusable.... :(
Hottabich2202
when you see it
full alt
yo im a stupid idiot who doesn't have any knowledge about audio tech stuff, could someone explain in simplest terms what all i need to do lol (for windows 11)
Tzumer
I tried everything and it doesnt seem to work AT ALL. There are error messages coming when starting OSU too.

"Invalid reading KeyAsio.MemoryReading.OsuMemoryModels.Direct.GeneralDataSlim: GeneralDataSlim.AudioTime"

Im desperate for answers because I really need that low latency. I can manage to get it to work if I use no soundcard + WASAPI High definition audio device WITHOUT exlusive mode. If I use exlusive mode, I cannot hit the circles at all. it wont work. Also I tested the latency. It is literally the same latency and hasnt changed a millisecond (keypress to earplugs latency)

Does anyone have answers or can make a tutorial on how to make this work
Please sign in to reply.

New reply