Commit Graph

3710 Commits (main)

Author SHA1 Message Date
Christopher Snowhill a366cbadee
Remove a saucy option
Nobody was likely to be using it, much less even know what it was.

Signed-off-by: Christopher Snowhill <>
2023-06-13 22:42:13 -07:00
Christopher Snowhill 3c91aab9d8
Updated BASS and company
Also included missing BASS_MPC, which was still being imported
even though it wasn't actually included.

Signed-off-by: Christopher Snowhill <>
2023-06-12 17:29:01 -07:00
Christopher Snowhill 3689fb51f8 Update MASShortcut for Xcode 15
Signed-off-by: Christopher Snowhill <>
2023-06-08 04:40:44 -07:00
Christopher Snowhill e1e5c22b8a Touched by Xcode
Signed-off-by: Christopher Snowhill <>
2023-06-08 04:40:32 -07:00
Christopher Snowhill cb0ae6db6c
Organya: Fix deployment target for 10.13
Oops, it was somehow still set to 13.0, from when I created it.

Signed-off-by: Christopher Snowhill <>
2023-06-08 04:15:41 -07:00
Christopher Snowhill 39459b89cb
Update projects and source in prep for Xcode 15
Signed-off-by: Christopher Snowhill <>
2023-06-08 04:14:45 -07:00
Christopher Snowhill 5aaea62b54
About Dialog: Move logo to asset catalog
Also convert it to a supported HEIF format, making it much smaller.

Signed-off-by: Christopher Snowhill <>
2023-06-08 04:14:38 -07:00
Shoh Sewell baf9797907 Volume slider changes
Makes volume slider logarithmic when limited to 100% to allow easier changing of volume towards the bottom of the slider.
The tooltip remains as the slider location instead of the logarithmic value of the actual volume.
2023-06-08 02:10:15 -07:00
Christopher Snowhill dd630ba394
File Tree: Reduce monitoring to limited changes
Only track new, removed, or renamed files. Tracking Xattr changes was
apparently causing the tracker dialog to crash on things like the user
changing file type associations, which either added or removed a per-
file association xattr, or when clicking Change All, removed this xattr
from all associated files tracked by Spotlight.

Fixes #361

Signed-off-by: Christopher Snowhill <>
2023-06-04 01:37:46 -07:00
Christopher Snowhill a640627fe1
Playlist: Add a workaround for AppleStript URLs
AppleScript is apparently such a legacy system, that when it sends URLs
to your app to open, they're in the old Carbon format. So we need to
translate these to proper URL strings for the rest of the app to deal
with them at all.

The format of these URLs is as follows:


Followed optionally by:


Where the slash and password are optional.

Followed by:


Followed optionally by:


And finally, followed by:


So, in hostname field, we must swap slashes to colons. And in the path
field, swap colons to slashes. What a bizarre world.

Signed-off-by: Christopher Snowhill <>
2023-06-01 21:34:34 -07:00
Christopher Snowhill 5550af7e64
HTTP Input: Do not hang if transfer completes
If transfer completes quickly, do not hang waiting for it to achieve
reading state. Also add some comments indicating what we're doing.

Signed-off-by: Christopher Snowhill <>
2023-06-01 21:34:29 -07:00
Christopher Snowhill e0a1cf49e7
Metadata: Fixes metadata reading
metadataBlob may be null, so create dictionary in that case.

Fixes #360

Signed-off-by: Christopher Snowhill <>
2023-06-01 15:15:36 -07:00
Christopher Snowhill 391b9cf6dc
Update feed updater script for R2
Update to use rclone with out of tree config to upload

Signed-off-by: Christopher Snowhill <>
2023-06-01 00:15:03 -07:00
Christopher Snowhill 689010b714
Playlist: Fix merging dynamic metadata dictionary
Merge the existing metadata entry dictionary with new values, because
sometimes, the caller may pass us a dictionary with some fields missing.

Fixes stream metadata for many HTTP streams.

Signed-off-by: Christopher Snowhill <>
2023-05-31 22:36:04 -07:00
Christopher Snowhill c88c9e9aa0
HTTP: Support a stream title hack
Support a stream title hack employed by some iHeartRadio streams

Signed-off-by: Christopher Snowhill <>
2023-05-31 22:36:00 -07:00
Christopher Snowhill 90eb2ded1d
HTTP: Support much larger metadata blocks
Support icy metaint data blocks up to 4KiB in size

Signed-off-by: Christopher Snowhill <>
2023-05-31 22:35:45 -07:00
Christopher Snowhill 7640c869de
Updated VGMStream to r1843-0-gb158e812
Signed-off-by: Christopher Snowhill <>
2023-05-31 22:35:40 -07:00
Christopher Snowhill 1ef7853488
FFmpeg: Fix AAC streaming
Fix AAC streaming by adding the correct audio/aac MIME type.

Signed-off-by: Christopher Snowhill <>
2023-05-31 22:35:36 -07:00
Christopher Snowhill e7692dc40b
Touched by Xcode
Signed-off-by: Christopher Snowhill <>
2023-05-04 18:23:06 -07:00
Christopher Snowhill b9768e8100
Updated Turkish translation to near completion
Signed-off-by: Christopher Snowhill <>
2023-05-04 18:22:53 -07:00
Christopher Snowhill d2adf39e04
Updated VGMStream to r1831-27-ge6883cbd
Signed-off-by: Christopher Snowhill <>
2023-05-04 18:22:08 -07:00
Christopher Snowhill dfa5f41984
Updated libOpenMPT to version 0.7
Signed-off-by: Christopher Snowhill <>
2023-05-04 18:20:54 -07:00
C.W. Betts 49bfd5053f Move most image assets to Xcode assets.
AboutCog.jp2 isn't moved because Xcode/Xcode assets doesn't recognize jp2 files as images.
2023-05-03 17:59:50 -07:00
Shoh Sewell 9c5a7d0e3e
Adds decimal digits to volume slider tooltip (#356)
* Adds decimal digits to volume slider tooltip

Modifies the volume slider tooltip so that:
-If the volume slider falls below 10%, the volume tooltip will display one decimal digit of precision (e.g. 3.4%).
-Else if the volume slider falls below 1%, display one decimal digit of precision (e.g. 0.34%).
-Otherwise display the volume slider tooltip as normal.

This helps show changes in volume between 0% and 10% where a change in volume isn't shown in the UI but is heard (especially when the "Limit volume control to 100%" option is unchecked in the "Output" Preferences submenu.

* Update VolumeSlider.m

Fix variable declaration


Co-authored-by: Christopher Snowhill <>
2023-05-03 17:59:24 -07:00
Christopher Snowhill 07680673f8
Translation: Added Turkish language support
This translation is mostly complete.

Signed-off-by: Christopher Snowhill <>
2023-02-23 22:44:43 -08:00
Christopher Snowhill 37de4dc447
Translation: Updated Spanish translation
Added the new Lyrics window strings.

Signed-off-by: Christopher Snowhill <>
2023-02-23 22:44:38 -08:00
Christopher Snowhill 55e28973d1
Main Menu: Add new Lyrics item to strings tables
Add item to strings tables for translations of the menu item. English is
already done as the base language, awaiting Spanish at least, will await
Polish and Russian when the respective translators get to it.

Signed-off-by: Christopher Snowhill <>
2023-02-23 18:25:46 -08:00
Christopher Snowhill e7b0b8bbb1
Lyrics Window: Added localization templates
Awaiting localizations of the window name in currently supported

Signed-off-by: Christopher Snowhill <>
2023-02-23 18:18:50 -08:00
Christopher Snowhill 3347cbf1da
Lyrics Window: Touched by Xcode
Signed-off-by: Christopher Snowhill <>
2023-02-23 18:18:03 -08:00
Christopher Snowhill 48f339f25b
Info Window: Reorder header imports
Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:32 -08:00
Christopher Snowhill 420d706979
Lyrics: Implement Lyrics window display and hotkey
Implement Lyrics window display into main app as a popup window panel,
with a main menu hotkey.

Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:27 -08:00
Christopher Snowhill 8eaafe8f9b
Tags: Implement unsynced lyrics in Vorbis plugin
Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:23 -08:00
Christopher Snowhill 7b98a64035
Tags: Implement unsynced lyrics in Opus plugin
Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:19 -08:00
Christopher Snowhill 403f02f961
Tags: Implement unsynced lyrics in Flac plugin
Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:15 -08:00
Christopher Snowhill abbb2fece7
Tags: Implement unsynced lyrics in FFmpeg plugin
Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:11 -08:00
Christopher Snowhill e66b01b6db
Tags: Implement unsynced lyrics into TagLib plugin
Implement unsynced lyrics reading into TagLib frontend plugin.

Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:08 -08:00
Christopher Snowhill a21242db55
TagLib: Implement unsynced lyrics tag support
Implement unsynced lyrics tag reading and writing into TagLib.

Signed-off-by: Christopher Snowhill <>
2023-02-23 17:47:04 -08:00
Christopher Snowhill 7e2a286b83
Tags: Added unsynced lyrics tag interface
Added an unsynced lyrics tag interface to the PlaylistEntry class

Signed-off-by: Christopher Snowhill <>
2023-02-23 17:46:59 -08:00
Christopher Snowhill ed281eb743
Update copyright year in various places
Update these things a bit for the next release.

Signed-off-by: Christopher Snowhill <>
2023-02-05 16:46:31 -08:00
Christopher Snowhill d5720e3944
Updated VGMStream to r1810-97-g408cada5
Signed-off-by: Christopher Snowhill <>
2023-02-04 23:52:34 -08:00
Christopher Snowhill 66338e2c83
Updated libOpenMPT to version 0.6.8
Signed-off-by: Christopher Snowhill <>
2023-02-04 23:51:44 -08:00
Christopher Snowhill 4617654b57
Repair SceneKit project definition
Repair the SceneKit container definition in the Xcode project file, so
that the Visualization scene gets copied properly on project build.

Signed-off-by: Christopher Snowhill <>
2023-02-04 23:48:04 -08:00
Christopher Snowhill d4785e0c74
Replaced r8brain with libsoxr
Signed-off-by: Christopher Snowhill <>
2023-02-04 23:47:54 -08:00
Christopher Snowhill e1fb7b9bd7
Playback Controller: Fixed title bar updating
This change had several components. For one, the delay of the dispatch
was increased from 5 milliseconds to 50 milliseconds. Two, the post to
the notification center was included in the delayed dispatch, so that
retains the PlaylistEntry object. Finally, the playlistController's
currentEntry object is reassigned from the input PlaylistEntry object,
which facilitates all watchers which are observing that variable for
updates. This final step also retains self for the callback, which
should be fine, since it's a quick dispatch with a short delay.

Fixes #335

Signed-off-by: Christopher Snowhill <>
2022-12-09 22:34:47 -08:00
Christopher Snowhill 9822dcc4c0
Audio Player: Only wait for unstopped input
Input thread now signals when it has stopped and is about to return, in
case the input thread returns before the BufferChain dealloc function
would be waiting for it to terminate. Somehow, even though the Semaphore
is being signaled at this point, the BufferChain still ends up waiting
the default of 2.5 seconds for the signal that apparently never comes,
delaying file stoppage. This prevents the wait action entirely. Must
have been some sort of race condition.

Signed-off-by: Christopher Snowhill <>
2022-12-09 21:17:45 -08:00
Christopher Snowhill 447a60afd9
Audio Player: Add new method of signaling stop
This new method should cause all stops to default to immediate stoppage,
and only stops that occur after an end of track signal should indicate
to play out the entire buffer.

Signed-off-by: Christopher Snowhill <>
2022-12-09 21:14:45 -08:00
Christopher Snowhill 4f942ac890
Playback Controller: Remove "stopping" status use
This should not really be necessary for proper player operation any
longer, and can safely be removed.

Signed-off-by: Christopher Snowhill <>
2022-12-09 21:13:12 -08:00
Christopher Snowhill 02c5ccaae1
Sandbox: Rework several blocking actions
Several actions have been reworked to be non-blocking, as their
operation should still occur in the main thread, but should not block
the thread they are called from, as they are not required to continue
processing there.

End of secure access has also been made non-blocking, as it is usually
only called when an input is done accessing a given file or folder, so
it should be important to return quickly, as the input is likely about
to terminate, and other things are waiting for it to return.

Also remove a nested block call for the storage access, as it is within
an existing serializing block, so it shouldn't need to be nested.

Signed-off-by: Christopher Snowhill <>
2022-12-09 21:12:33 -08:00
Christopher Snowhill e8caede273
Update script: Purge cache of manifest files
Purge the manifest files from the Bunny CDN cache before starting
the update of the site.
2022-12-05 23:18:29 -08:00
Christopher Snowhill 1c09694f1b
Decoders: Implemented Organya decoder
Based on the C++11 code by Joel Yliluoma / bisqwit, which in turn is
based on information from NX-Engine. I have also taken the liberty of
bundling the required wavetable bank and PixTone drums. Contrary to the
documentation provided with the code, my version of, as
downloaded over a decade ago, had the wavetable bank at offset 635,816
bytes into the file, not 1,115,748 bytes. Possibly a difference of
having applied the translation patch? My copy is the original version,
so I had to use a real resource parser to locate the waveforms.

The player will obey the configured sample rate, loop count, and fade
time for synthesizers, and also obey Repeat One to play indefinitely.
The code should be quite robust to minor abuses, though I can't imagine
how well it would hold up to random bad files, other than playing
outright garbage.

Signed-off-by: Christopher Snowhill <>
2022-12-04 03:03:45 -08:00