1. Project Heartbeat
  2. News

Project Heartbeat News

0.14.5 update notes

0.14.5
  • Update yt-dlp
  • Revive discord rich presence integration
  • Change workshop browser to use note packs instead of resource packs as a name
  • Fix pregame opening per song settings failing when backing out and returning to the pregame screen
  • Fix for some songs not ending for real this time


0.14.4
  • Fix editor crash when changing song after testplaying.
  • Fix more edge cases that would cause songs to never end
  • Fix pregame opening per song settings failing when backing out and returning to the pregame screen.


0.14.3
  • Fix minor memory leak when restarting songs
  • Add safety margin to song end check
  • Fix workshop item state shenanigans in workshop browser
  • Fix custom sfx not reloading automatically


0.14.2
  • Fix shinobu seeking bugs that broke negative start times
  • Fix latency tester crashes on windows (for real this time)


0.14.1
  • Fix practice mode issue where the latency change option would be pressable even in seek mode.
  • Fix audio issues on steam deck caused by steam deck's old version of pipewire, the game now defaults to ALSA on the deck, if you want to force pulse on the deck you can add the "--shinobu-backend pulseaudio" command line argument.
  • Fix crash when exiting and re entering the latency tester

Project Heartbeat 0.14 Anniversary Update 2: New song, new audio engine & more!

Welcome to yet another update to the rhythm game that refuses to die, this is the single biggest update in terms of technical stuff we've done since the game was released over two years ago in March 26th 2020. A lot has changed and a lot will change and I'm super proud of this one.

Shout-outs as always to lino for taking care of ensuring the editor doesn't blow itself into pieces and adding a bunch of nice new features.

Some of the things here might sound familiar, this is because some (like the song) were released in minor updates for 0.13, but they are still listed here as they were part of the development process for 0.14.

New song: Love sacrifice


[previewyoutube][/previewyoutube]

This is Love Sacrifice, the new song featuring in Project Heartbeat and the first new song of the year. As it's tradition it's a Touhou cover from the Takanashi Koubou creator's circle.
The song is composed by SaiNa, sang by Queue, composed by BeatCharger and charted exclusively for Project Heartbeat by resident meme master Yahoo.

The artwork was made specifically for Project Heartbeat by the great Guinii featuring Touhou Project girls Renko Usami and Maribel Hearn of the Girls' Secret Sealing Club lying in a field together in slightly lesbian fashion.

Hopefully you will enjoy this new song release! A few more songs are in the works, including a special non-eurobeat guest artist from Spain.

Big changes


[h2]The Shinobu audio engine[/h2]



One of the biggest issues Project Heartbeat has faced is the Godot audio stack, while sufficient and good enough for most games it really isn't suited for use in rhythm games.

For this reason I spent worked on a new audio engine specifically for Project Heartbeat, it's called the Shinobu engine. It's the biggest engine customization I've done yet and it really does fix many of the issues you guys had with the game.

This new audio engine is based uses the excellent miniaudio sound library. If you need a good library for all your audio needs miniaudio is the king, it's beautiful.

Here's what shinobu does:
  • Better performance
  • No more desyncs
  • Less battery use and better thermals whooo steam deck!
  • Latency should be lower
  • You can now configure the buffer size in options -> audio
  • More smooth note movement
  • Ability to adjust your buffer size




Shinobu is a game changer, I believe it has turned PH from a weird janky rhythm game your weird friends played to a more serious piece of kit that should be up there with the big names.

Audio just like video, has frames, these frames are composed of instantaneous samples for all possible channels, unlike video however the frequency is much higher, while a typical video might have 30 frames per second a typical audio file might do 44100 frames per second, which is quite a lot..

(In case you are wondering the reason why it's ~40 kHz is because of Shannon-Nyquist telling us that "If a system uniformly samples an analog signal at a rate that exceeds the signal’s highest frequency by at least a factor of two, the original analog signal can be perfectly recovered from the discrete values produced by sampling." and as human hearing caps at around 20k kHz it is enough for us).

This means that there has to be an intermediary buffer that gets filled with a bunch of frames, this is the main source of audio latency, as telling the engine to play say a note SFX as soon as possible might take a bit until the OS asks for samples again, reducing this buffer is important to reduce latency, however this must be done with care as CPU usage goes up the lower the buffer size is (for example, at 10 ms the mixing happens 100 times a second).

Timing is then done by using the amount of samples consumed by the audio system every time it asks for it.

Another issue is your operating system, sometimes your audio driver might not allow smaller buffer sizes, Shinobu will try the lowest possible buffer size the operating system gives it (but always bigger than the buffer size you set in audio->buffer size).

As the audio buffer might sometimes be higher than the frame time i.e it might be >16 ms worth of samples timing from that might be jittery, this is why it now uses an internal high precision clock to interpolate the time between updates. This is an alternative to just lowering Shinobu's internal buffer size which increases CPU usage and doesn't give us any benefit in terms of playback latency.

[h2]DJA finally the default[/h2]

Direct joystick access has finally become the default method for analog input in the game, there are still some quirks with heart sustains multis, but it should now be ok for the great majority of people.

[h2]New workshop browser UI[/h2]



I've changed the workshop browser from the grid design you are used to to a less cluttered design which I feel doesn't feel as claustrophobic as the old one, it also has some extra space we can use for other things, talking about other things...

[h2]Romanized title support in the workshop browser[/h2]

The workshop browser will now show the romanized title of the song if it is available, funnily enough PH was already uploading the romanized titles, but I forgor to implement actually being able to view them, whoops.

Do note that searching the workshop by romanized titles is not available, this is a limitation imposed on me by Steam and there's nothing I can do about it.

[h2]Random song button[/h2]



The random song button has been added, a highly requested feature, I also made it pretty looking (and also pretty gay, which is nice). Yes it even works in folders!

[h2]Song list sorting changes[/h2]



The workshop section of the song list has new sorting options available, they are exclusive to this section, for this reason the sorting mode on the workshop is now separate from the other sections.

[h2]Chart sections[/h2]



You can now specify chart sections inside the editor, these are shared between charts of the same song just like lyrics are. Sections can have a name and a color given to them, currently they are only visible in the editor and practice mode, but soon they will be used to give you more detailed information on your scores.

[h2]Practice mode rework[/h2]





Lino has reworked practice mode, you can now switch between modes to adjust latency options, playback speed and other information.

Additionally, a lot of new information is visible in the practice mode information section to the right.

Editor changes


[h3]Search[/h3]



When selecting a chart, you can now search for it by name instead of having to dig through the list

[h3]DIVA F2nd edit importer[/h3]



Lino has made an importer for f2nd edits, these have to be decrypted for them to be read by the game, but I will be looking into how to load encrypted files in the future.

This will allow people to preserve their edits in case Sony wants to pull a fast one on the community again.

[h3]Song settings editor[/h3]



There's now an editor settings section for song-specific settings, you can also use this to test your song variants.

[h3]Sync toolbox[/h3]



Lino added a toolbox with a bunch of tools to aid in syncing songs, fancy.

Minor changes
  • Make combo reset in practice mode whenever stats get reset
  • Add 1440p to desired video resolution options
  • Enable wrap around in options menu and main menu
  • Add CPU-based fallback for slide particles in GLES2
  • Use fancy two pass gaussian blur for the pause menu instead of the current textureLod based solution which doesn't work in GLES2 PokeKMS
  • Save the last selected folder in file dialogs
  • Search for the original title and the romaji of songs when searching in the song list
  • Editor: Add a "Reset position to default" button
  • Editor: Add more shortcuts and separate a lot of them
  • Editor: Add a hold graphic to the editor
  • Editor: Queue notes placed during playback for better consistency
  • Added a button to change the multiplayer host


Bug fixes
  • Fix random quotes not being random (???)
  • Fix workshop upload form replacing metadata when downloading a song while it's open
  • Update YTDL
  • Fix various menu focus issues
  • Fix godot focus stupidity
  • Fix joypad prompts breaking changing from keyboard to controller
  • Fix gamepad keyboard prompts breaking when forcing a prompt type and returning to auto detect
  • Fix background music player not using preview_end at all skull face no space
  • Release drag even if _gui_input doesnt catch the event and allow cross-chart copies
  • Remove video requirement from variant sync & add warnings when using non audio only variants with video
  • Fix song list focus loss issue
  • Fix minor focus bug when selecting custom SFX
  • Disable forced VSYNC in the editor
  • Release focus on all editor inputs upon pressing accept or cancel
  • Fix focus issues on pregame screen
  • Fix editor scale not updating when using control+scroll wheel
  • Fix visualizer in GLES2
  • Fix GLES2 title bar in-game
  • Disable menu FPS limits when using the latency tester
  • Fix song list engine regression
  • Disable forced VSYNC in the editor
  • Fix lyrics not appearing after restart
  • Reset input manager on restart (Fixes issue with input carryover)
  • Fixed most multiplayer issues and weird race conditions


Other stuff


[h2]Project Heartbeat on Steam Deck[/h2]



It's been reported that PH on deck works fine by various parties, such as Liam from GamingOnLinux and some people on Reddit. If you are the owner of one please give it a go.

I will receive mine this week, so if there's any rough edges I'll take a look at them when I receive mine.

[h2]Project Heartbeat @ Sarrià Manga & official merch[/h2]



I together with Guinii will be attending a local event known as Sarrià Manga, we will have a demo booth of the game using the event edition.

We will be selling posters of the game! These will optionally come with a Steam key for the game, so if you happen to be a local and are interested in it please come visit us! We will be at stand number 3, near the entrance.

Besides the PH posters we will be selling postcard-sized prints of Guinii's Remilia Scarlet artwork. I originally wanted to also sell the nsfw version of this but this idea was promptly shut down. We live in a society.

There are no plans to sell these online (yet) but I might one day, let me know if you are interested.

[h2]Future[/h2]

It's not over yet. I will probably resume work on the mgs3-inspired game next week (after the event) but I have a few ideas of the things I want to see in PH in the future. These include replays and an optional life bar, more info soon.

Introducing the Shinobu audio engine: A game changer for Project Heartbeat!

One of the biggest issues Project Heartbeat has faced is the Godot audio stack, while sufficient and good enough for most games it really isn't suited for use in rhythm games.

For this reason I spent this week working on a new audio engine specifically for Project Heartbeat, it's called the Shinobu engine. Keep reading to learn how you can test it and why it's very important for the future of PH!

This new audio engine is based uses the excellent miniaudio sound library. If you need a good library for all your audio needs miniaudio is the king, it's beautiful.

TL;DR: What it means for you
  • Lower latency
  • Better performance
  • No more desyncs!
  • More smooth note movement
  • Ability to adjust your buffer size


The technical side




One of the most important features Shinobu brings to the table is the ability to select your own internal buffer size.

Audio just like video, has frames, these frames are composed of instaneous samples for all possible channels, unlike video however the frequency is much higher, while a typical video might have 30 frames per second a typical audio file might do 44100 frames per second, which is quite a lot..

(In case you are wondering the reason why it's ~40 kHz is because of Shannon-Nyquist telling us that "If a system uniformly samples an analog signal at a rate that exceeds the signal’s highest frequency by at least a factor of two, the original analog signal can be perfectly recovered from the discrete values produced by sampling." and as human hearing caps at around 20k kHz it is enough for us).

This means that there has to be an intermediary buffer that gets filled with a bunch of frames, this is the main source of audio latency, as telling the engine to play say a note SFX as soon as possible might take a bit until the OS asks for samples again, reducing this buffer is important to reduce latency, however this must be done with care as CPU usage goes up the lower the buffer size is (for example, at 10 ms the mixing happens 100 times a second).

Timing is then done by using thea mount of samples consumed by the audio system every time it asks for it.

Another issue is your operating system, sometimes your audio driver might not allow smaller buffer sizes, Shinobu will try the lowest possible buffer size the operating system gives it (but always bigger than the buffer size you set in audio->buffer size).

As the audio buffer might sometimes be higher than the frame time i.e it might be >16 ms worth of samples timing from that might be jittery, this is why it now uses an internal high precision clock to interpolate the time between updates. This is an alternative to just lowering Shinobu's internal buffer size which increases CPU usage.

This buffer size setting might actually be unnecessary, I am not sure: we will have to test over the following months, but if it works we might just target the lowest latency the OS gives us and match the internal buffer to that and interpolate away the rest.

How to test shinobu




Go to your Steam library, right click the game's cover art/name and select properties, click on betas and enter the super duper secret password MARINSTHIGHS, then click the blue button to opt into the bet branch! If you want to return to the normal game just set it back to "None".

What's left to do


The only major thing that isn't implemented in Shinobu is the spectrum analyzer the visualizer used, I will try to implement it using Godot's spectrum analyzer as a reference.

Source code


As it's tradition, shinobu's source code is available in our modified version of godot as a module:

https://github.com/eirteam/godot/tree/0.14/modules/shinobu

Status of Project Heartbeat on the Steam Deck



Hullo,

As you might have heard, the Steam Deck launched last week. We believe Project Heartbeat is an excellent game to play on the deck.

Unofortunately we haven't been among the lucky few who received a devkit from Valve before release, so the game is not Steam Deck verified. We will verify the game as soon as we get the ability to do so.

In the meantime, it's likely PH already works on your Steam Deck if you have one, Liam from GamingOnLinux tested the game and said it worked fine, so while we don't have an official blessing for Steam Deck verification we reckon the game should work fine already. Obviously Liam didn't conduct an exhaustive test, but we don't think there's any reason why PH shouldn't work on the Deck.

A few versions ago we did a lot of work to support all different aspect ratios (this includes 16:10 as in the Deck), as well as improvements surrounding controller usage, mouse hiding and other funky important things.

This very post is visible on a Steam Deck by pressing the compatibility details button on PH's library page and pressing Y.





We have reserved a Steam Deck as normal costumers for testing, we are scheduled to get it before the end of March, hopefully sooner than later.

Happy button mashing.

-EIREXE

0.13.12 update notes

0.13.12
  • Fix song preview time end not being used at all and other minor issues related to it
  • Fix gamepad keyboard prompts breaking when forcing a prompt type and returning to auto detect
  • Various multiplayer bugfixes
  • Add 1440p to resolution options for video downloads
  • Update localization files


0.13.11
  • Fix song list focus loss issue
  • Fix minor focus bug when selecting custom SFX
  • Disable forced VSYNC in the editor


0.13.10
  • Raise internal buffer to 15 ms again to prevent desyncs
  • Fix lyrics not appearing after restart
  • Make latency tester use left notes
  • Reset input manager on restart (Fixes issue with input carryover)
  • Update engine
  • Fix issue with contextual menu by removing engine regression


0.13.9
  • Updated engine
  • Capped the Control+G button display to 30 buttons
  • Changed behavior of slide note sounds
  • Rework some of direct joystick access for better feeling
  • Default to direct joystick access being on again
  • Disable usage of now unneeded set_use_accumulated_input
  • Reduce internal audio buffer to 3 ms
  • Force vsync while in the menus (disabled for the latency tester).
  • Make the GLES2 pause menu gaussian filter use a constant number of iterations, should help on some cars with terrible drivers
  • Add love


0.13.8
  • GLES2 is now the main renderer on Windows, due to better performance, GLES3 is still available as a launch option though
  • Many fixes to the GLES2 renderer's graphic displays, including the visualizer, slide particles and etc