Oct 11, 2026
I changed my mind on the lyric restrictions.
In my own library I had way too many songs with bad lyric metadata. I tried fixing the mid files or looking for updated ones and it takes way too long. So now I do some checks on text data too and not just rely on proper LyricEvent types.
If you saw missing lyrics before, they should work now
It's not all back-tracking tho, I also fixed a few lyric markers
I forgot to filter before
Oct 6, 2026
In version 1.3, I made a few changes for more responsive game feedback and more ecompassing note checking. While this was a great improvement it also exposed some race conditions that weren't a problem before
Hit testing happens in different threads. When pressing a button a note gets checked instantly indepedent of the renderloop/fps. The renderloop in turn tracks notes that were missed and then does some followup cleanup. This was done conservatively - the cleanup only checked one note per frame keeping things safe, but visually meant that some animations were updated 1-3 frames late
That's what I chaged in 1.3, and the race condition was on - The note checker and the renderloop were looking at the same data that could be modified within the same frame, or outside the frame at any time
I've reworked the note tracking and this race condition no longer exists, the result is also a leaner more responsive game, you can actually sense it
Although completely different system, SP had a similar race condition caused for slightly different reasons
The timer in previews also caused a race condition, altho it never lead to any crashes, it had unexpected results
When beats track was missing I generated beatlines from the song duration, due to different BPMs throughout the track, these lines would often not line up. I calculate every beat accurately now. This also affects how star power and note duration gets scored
Lyric parsing is more strict. If midi file has lyrics but they are marked as "text", they won't show up. Same if a text event is mistakingly marked as lyric, it will show up as lyric. I was catching these mistakes iand fixing them, but it leads to other issues on well formatted songs. If the lyrics display wrong, fix the .mid file
Fixed an issue were lyric phrases where split at the wrong syllable. This is an authoring issue
I was using the actual audio duration for gameplay. The new player uses of the "[end]" event in the midi file when present
For song meta data that is missing song duration, the duration is now displayed as soon as it is generated by the player. Note that the duration in the menu is usually the audio duration, not the actual "[end]" event in gameplay
Added support for album art image types other than png. When I first started this project png was the only format, but now I'm seeing jpegs. The format is no longer hardcoded and you can have any image file type. Beware of memory usage
Sep 29, 2026
Instead of realying on third party libraries like FFMpeg to decode Ogg files I made my own using Vorbis - I also wrote a new streaming decoder for native files to match the Ogg decoder and consolidate all file types under the same player with identical features
The new player now handles all file types, but more importantly it handles multiple tracks with a unified synchronizer. This improves synchronization between tracks but also allows for cleaner event handleling and fixes a few issues in game - like game exiting imidiately after the last note is played on some songs
New decoders are multi-thread safe. This should reduce most common sound file related crashes and playback inconsistencies. Overall game should be more stable
None vital time tracking events such as lyrics and timers are no longer in the game loop tracked 120 frames per second. All non game events are handled by the music player synchronizer providing a small performance boost
UPDATE - I didn't provide enough fallbacks - Why don't atuhors just use UTF8? I ran into a spanish song encoded in Romanian Latin 1? Like Why? Why? Why?
Early in development I hit a wall parsing Midi files for lyrics so I relied on MIKMidi. Turns out I was really close to cracking it and gave up too early. Well I figured it out and I've also included encoding fallbacks. Midi files don't have an encoding header and MIKMidi defaulted to UTF8 - Most note.mid files are made on PCs with different encodings so special characters would appear garbled or missing. NOT NO MORE!
Not midi related but I too made the mistake of relying on UTF8 for all song.ini parsing resulting in some meta data displaying wrong. I wrote fallbacks for this too and a file cleanser to unify .ini files to UTF8
I didn't fully understand these settings early on but I removed them now. Should make it less complicated to open noice as I don't have a paid Apple Developer account. Sorry for the inconvenience
I went through and cleaned up a lot of code. Some improvements to game were made but this is more relevant to the git repository which I will be uploading soonish. The current repository won't build without a lot of work, I fixed a lot by removing dependencies like FFMpeg, SwordRPC and MIKMidi. If you want to dig into this project, you should be able to download and build without issue after the next uplaod
Scenekit has been depricated by Apple so I've been slowly working on porting the game to RealityKit. That has been a lot more difficult than I anticipated since realitykit doesn't offer a lot of features I heavily relied on for visuals in Scenekit.
The RK version won't support older Mac OSs, but this version of noice should continue to work and I will bring updates that cross over from the RK version - the new player and midi parser in this version are examples of that
May 15, 2023
During random play, the option to make the current random artist become the selected artist has been added
Crash caused by OGG previews has been fixed - I think. when decoding ogg files ffmpeg does the seeking in an Async thread, when changing songs, the audiostream would be cleared but the seeking might not be done which would then crash the app. I have no way of canceling the seeking when the file is gone, best I could do is delay the song switch by a fraction of a second to allow the seeking to finish. This was not an issue with m4a and mp3 files, just OGGs
Sometimes when going into any list menu and a preview song was about to play, it would play anyway. This works as expected now. Other improvements have been done in this area too
When selecting a song from a list and the screen jumps to the detail page, sometimes the album art would not get a chance to load. Now it Does!
May 13, 2023
Logo Animation! - This really completes it
Cleaned up menu transitions
Screened back the octopuss background during the Score menu for better legibility. This is also smoothly transitioned
This is the reason why I released this revision so soon. I messed up and didn't include the FC artwork, so if you had an FC, all you saw was 5 Gold stars. The FC was still logged tho and it would display back in the menus selection
Apr 25, 2023
This is the official start of the full release, so noice got a new logo, app icon and splash screen
The new logo is cleaner and more adaptable to different looks and themes I'd like to explore in the future
The icon took the longest to develop. I did many concepts, studies, and color combinations ranging from very detailed renders, to very abstract and flat, to crazy colors, to no color at all. But I'm happy with the end result - it is simple & carries a continuation with color
The new loading screen is a vast improvement and sets a really nice vibe for the start of a game session. I recycled the old artwork and cleaned it up a bit, but I really put the work in the presentation which is now dynamic and different every time you start the game
Now there is an option to start the game in full screen mode. This was something I should have done long ago
I cleaned up the song selection screen a bit. Fine-tuned type, adjusted some colors and animations, but most obvious is the Up Next song list - I have redesigned it quite a bit and it looks much cleaner and more usable, but also I will be displaying more track info within it in the future
I removed unused menu items and organized the menus
Fixed an issue where upon starting the game, you couldn't move the window around till after it was resized. Also cleaned up the title bar. The window title no longer shows during the game and I removed the close button because there is no way to reopen the window after it is closed
Fixed a memory leak caused by a bug in SpriteKit for which I submitted a ticket. But regarless, I avoided the issue anyway
Improved performance on song previews
Fixed a crash that happened when quiting the app from certain menus - it didn't affect anything because it was when quitting anyway, but still