Commit Graph

383 Commits (main)

Author SHA1 Message Date
Christopher Snowhill 4c95c943ef [Playlist Storage] Rewrite to use Core Data
Completely rewrite the playlist storage once again, this time with a
much faster Core Data implementation. It still uses a little magic for
Album Artwork consolidation, but string consolidation doesn't seem to be
needed to reduce the disk storage size. Works much faster than my silly
implementation, too.

Old implementations are still kept for backwards compatibility with
existing playlists.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-16 07:14:33 -07:00
Christopher Snowhill 92573ec088 [Job Queue] Overhauled long action handling
Long actions, such as file opening, playlist loading, metadata loading
and refreshing, etc, are now handled through NSProgress. Additionally,
a new status bar change displays the progress of the task instead of
the total duration of the playlist. Finally, app quit is blocked by a
running task, and if the app is quit while a task is running, it will
be delayed until the task completes, at which time the app will
terminate cleanly.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-15 01:01:45 -07:00
Christopher Snowhill d875be0454 [Project Files] Add possibly missing framework
Bugsnag framework was possibly missing from the config files, so
it's been added properly on older Xcode.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-11 17:01:42 -07:00
Christopher Snowhill 2dabcb2581 [Build System] Forgot to set API key for symbols
The symbol uploads on archive are useless unless they're uploaded with
the API key set correctly in the script.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-09 21:25:03 -07:00
Christopher Snowhill aca29e472b [Bug Reporting] Introduce Bugsnag crash reporting
Crashes will now be collected with an optional comment, and uploaded on
next launch of the app.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-09 18:58:42 -07:00
Christopher Snowhill 1728debe94 [Visualizer] Bring back CoreGraphics visualizer
For legacy systems that do not support Metal. The Metal SceneKit view
does work on even 10.13.6, if a Metal GPU is present in the system.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-08 21:32:52 -07:00
Christopher Snowhill 00ea4562dc Update project files for Xcode 14 recommendations
Update all project files with new upgrade version number, and add the
dead code stripping option. Don't touch MASShortcut because it's not my
project.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-07 18:56:11 -07:00
Christopher Snowhill f4712ad219 [Visualization]: Add Spectrum window
Add a dedicated spectrum visualization window, and add the necessary
hooks to start its event timer if playback is already running when it is
first opened.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-05-22 17:24:35 -07:00
Christopher Snowhill 25906d1b2b Project file: Remove team ID that leaked in
I accidentally forgot to enable my hooks after cloning on a new macOS
installation.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-05-22 16:10:51 -07:00
Christopher Snowhill 4035ca861f Spectrum Visualizer: Add customization options
Add options to the Appearance preferences page to allow changing the
spectrum's projection between a 2D-like one and 3D perspective, and add
options to change the bar and peak dot colors.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-05-22 15:26:27 -07:00
Christopher Snowhill fce0e129a5 Spectrum Visualization: Replaced spectrum view
Introduced a brand new spectrum view based on SceneKit, with a scene
created by @kddlb and then altered by me to add the peak spheres. This
new scene should be lighter on display resources, even though it's fully
3D instead of a vector 2D scene done in Cocoa drawing primitives.

Co-authored-by: Kevin Lopez Brante <kevin@kddlb.cl>
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-05-22 00:03:52 -07:00
Christopher Snowhill 2aa3ddd545 Icon: Replace icon with a newly rendered design
Icon has now been replaced with a newly rendered design, and code
changed accordingly.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-05-02 14:35:09 -07:00
Christopher Snowhill 19556cc630 Brought back the MAD plugin from death
Now Cog supports freeformat MP3 once again. The plugin has been extended
to include sample accurate seeking, accurate length probing of files
missing headers, and iTunes gapless info reading using libid3tag.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-24 17:51:10 -08:00
Christopher Snowhill 1da6cf2557 Deduplicate artwork using hashes
Artwork deduplication should be done with hashes, not by full data
comparison. This should be a lot faster loading artwork from files now,
especially if the playlist already contains a lot of unique artwork.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-22 23:10:02 -08:00
Christopher Snowhill b63a076e21 Add more automation commands and properties
Added commands to control playback: play, pause, stop, previous, next.
Also added a spam property to PlaylistEntry, to return the formatted
spam string for the playlist entry, which is currently limited to the
playing item.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-21 21:52:09 -08:00
Christopher Snowhill b995030aec Bring back scripting automation
This fixes #126 and brings back basic automation support. The basic
currentEntry object will return an object that can enumerate the track
metadata or the file URL of the currently playing track. More automation
suggestions are welcome, including playlist manipulation, or playback
control.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-20 01:53:25 -08:00
Christopher Snowhill 5611d08df1 Reduce memory usage of adding tracks
Significantly reduce the memory footprint of adding tracks to the
playlist, by coalescing the NSString and NSData objects in the info
dictionaries as they are being loaded in the background, into a common
data set which will then be discarded when the whole job is completed.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-16 21:38:43 -08:00
Christopher Snowhill b8057b7c29 Add support for AVIF album artwork
Import libavif and libaom, specifically built only for decoding, not
encoding.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-16 01:52:51 -08:00
Christopher Snowhill f071d3e90c Build several libraries out of tree now
Building libogg, libvorbis, libvorbisfile, libFLAC, libopus, and
libopusfile out of tree, to utilize their projects' CMake build scripts,
and also enable any platform optimizations that may have been missing.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-15 00:26:55 -08:00
Christopher Snowhill 344ceb173d Visualization: Increased fft size, imported code
Boy, I just be outright stealing code now. But it looks nicer now.

Fixes #234

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-13 12:18:58 -08:00
Christopher Snowhill 7ef583340d Equalizer: Replace dialog with custom job
New custom equalizer dialog, painstakingly hand assembled.
2022-02-13 11:05:32 -08:00
Christopher Snowhill 992b716193 Visualization: Greatly improve spectrum design
Improvement includes greatly reducing the CPU usage by not using an
NSImage based painting system.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-13 01:32:26 -08:00
Christopher Snowhill 417687600b Implement visualization support and a spectrum
Borrowing some DFT code from deadbeef, this implements a simple spectrum
visualization into the main toolbar of the app.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-12 23:04:03 -08:00
Christopher Snowhill 086367f388 Add two new toolbar buttons
Added buttons to remove duplicates and remove dead items, in case anyone
finds themselves needing these options often enough to want to put them
in their toolbar instead of using the menu.

Fixes #225

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-09 23:12:50 -08:00
Christopher Snowhill d4990de7f3 Adopt the sox resampler instead of RetroArch
Removing RetroArch code from my project.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 18:55:39 -08:00
Christopher Snowhill efc044ae33 Toolbar / Menu adjustments for equalizer, etc.
Added a keyboard shortcut for the equalizer menu item, added a user
contributed button for an equalizer toolbar button, and replaced the
randomize playlist button with something different from the same user.

I had to redo the randomize button, because template PDFs don't support
white cutout shapes, but instead need to be formatted as hollow spaces
in the paths. Naturally, I couldn't figure out how to do this with
Inkscape the right way, so I rendered the original to a 1024x1024
bitmap, then imported that into a new document and traced it. Meh. I
need a better icon anyway, but this looks okay on the toolbar for now.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-27 01:31:50 -08:00
Christopher Snowhill e7b78085ca New feature: Implemented headphone virtualization
This new virtualizer uses the Accelerate framework to process samples.
I've bundled a HeSuVi impulse for now, and will add an option to select
an impulse in the future. It will validate the selection before sending
it to the actual filter, which outright fails if it receives invalid
input. Impulses will be supported in any arbitrary format that Cog
supports, but let's not go too hog wild, it requires HeSuVi 14 channel
presets.
2022-01-25 16:50:42 -08:00
Christopher Snowhill e471945a08 Equalizer: Implemented new presets contributed by Oleg-Chashko 2022-01-24 20:01:22 -08:00
Christopher Snowhill d771a58e69 FFmpeg: Update to version 5.0, and add another patch for iTunes MP3 gapless info 2022-01-24 04:41:27 -08:00
Christopher Snowhill 2165d37144 Metadata: Now supports disc number field where possible 2022-01-21 21:49:17 -08:00
Christopher Snowhill 26e0e0cead HDCD Decoding: Add HDCD indicator 2022-01-20 23:53:45 -08:00
Christopher Snowhill 2b4de1033d Playlist View: Replace Cell-based table with View-based table. It needs some work still, though. 2022-01-20 14:59:26 -08:00
Christopher Snowhill dbc0698cee Equalizer: Implemented stock presets 2022-01-17 06:37:38 -08:00
Christopher Snowhill 71b2f7a4f2 Implement graphic equalizer 2022-01-16 07:32:47 -08:00
Christopher Snowhill bfa178f4e2 FFmpeg input: Add support for libfdk-aac, which will be used to support USAC and AAC on 10.14.x and older 2022-01-13 04:13:58 -08:00
Christopher Snowhill 888ee2fb38 Implemented new libvgm-based VGM, S98, DRO, and GYM player 2022-01-03 01:55:48 -08:00
Christopher Snowhill df9743c821 Consolidated Vorbis framework usage 2021-12-31 01:35:08 -08:00
Christopher Snowhill 4cb4a000f0 Consolidate Ogg framework usage 2021-12-31 01:30:16 -08:00
Christopher Snowhill 98ead66851 Consolidate File_Extractor framework usage 2021-12-31 01:16:44 -08:00
Christopher Snowhill 2e76c56ba7 Switch FFmpeg libraries to dynamic builds, consolidate to a single copy in the main application framework folder 2021-12-31 01:07:05 -08:00
Christopher Snowhill cd8b728ca6 Removed plugin 2021-12-29 15:24:23 -08:00
Christopher Snowhill 106eb587b4 Updated libopenmpt to version 0.6.0, with major new changes. This new version requires macOS 10.15 to work, due to libc++ features required. A compatibility plugin has been duplicated from the existing plugin, which will now load libopenmpt 0.5.14, or whatever newer version may come out that still supports as old as macOS 10.12. 2021-12-26 03:29:43 -08:00
Christopher Snowhill 2445cc94a9 - Retrieve profile paths properly instead of hard coding
- Display playlist total duration in units up to weeks and down to just seconds, and only pluralize units as necessary
- Major change: Implemented a SQLite disk backed playlist, track data, and queue storage system, which will be synchronized from the player in real time, and will hopefully survive system or app crashes. Existing plist playlist will be imported on first run, and removed on shutdown.
2021-12-24 01:01:21 -08:00
Christopher Snowhill 5772662984 Cuesheet: Read and merge metadata from referenced audio files, no matter their format 2021-11-21 00:16:16 -08:00
Christopher Snowhill 66f8697435 Remove DSA signing stuff, since nothing should be using it by now 2021-09-27 14:33:06 -07:00
Christopher Snowhill cfeadad97f Reduce minimum OS to macOS 10.12 2021-09-18 01:08:49 -07:00
Dzmitry Neviadomski b69cb98240 Revert display regressions.
1. Revert "Merge pull request #148 from JanX2/two-gigaseconds-mini"

This reverts commit 7365174b11, reversing
changes made to c5ac86725d.

2. Revert "Two gigaseconds (#147)"

This reverts commit c5ac86725d.
2021-05-09 01:16:20 +03:00
Jan c5ac86725d
Two gigaseconds (#147)
* Fix look of position time field to match the rest of the UI.

* Fix typo.

* Improve position time display.

* Add days, hours support to position time display.

* Fix "Current Time" toolbar item geometry/layout.

* Don’t enforce leading double-digits in position time display.

* MainMenu.xib touched by Xcode.

* Implement and use MonospacedDigitTextFieldCell.
This way the digits of numbers in playlist columns consisting of mostly digits will be aligned vertically.

* Disable font scaling code without effect.

* Set "Current Time" toolbar item to use MonospacedDigitTextFieldCell.

* Improve SecondsFormatter.

* Merge in SecondsFormatter improvements from Play.

* Move formatter setup into XIB.

* Add CogTests.
These can later be used for integration tests.

* Add SecondsFormatterTests.
Tests are stubbed out.

* Pouring foundation for SecondsFormatterTests.

* Implement -testPositive.

* Replace unsigned with int in SecondsFormatter.

* Implement negative support, tests.

* Rewrite SecondsFormatter in preparation for better readability..

* Rewrite SecondsFormatter for better readability.

* Add negative zero support.

* Improve SecondsFormatter readability.

* Refactor into -stringForTimeInterval: in SecondsFormatter.

* Cleanup.

* Mark TimeField as space-indented.

* Replace custom time formatting code in TimeField with SecondsFormatter.

* Cleanup.

* Improve SecondsFormatter format strings.

* Add internal type for time calculations.

Co-authored-by: Jan Weiß <jan@geheimwerk.de>
2021-05-06 19:50:26 -07:00
Christopher Snowhill 1e97d02384 Cleaned up project files, also removed accidental and remaining team identifiers 2021-05-01 15:43:56 -07:00
Christopher Snowhill 13bd399b31 Clean up most warnings and update some dependencies 2021-04-29 18:16:24 -07:00
Christopher Snowhill f86f7dc532 Fixup for main branch 2021-02-28 18:48:31 -08:00
Christopher Snowhill 6e73220211 Revert "Add siplayfp.framework to Cog target."
This reverts commit eaca38df89.
2021-02-28 18:48:05 -08:00
Dzmitry Neviadomski 219cd937e1 Add siplayfp.framework to Cog target. 2021-02-28 18:47:59 -08:00
Dzmitry Neviadomski d1469ebfe4 Sort plugins by name. 2021-02-26 15:17:01 +03:00
Dzmitry Neviadomski 204d63923e Fix build after removing resources. 2021-02-22 11:54:04 +03:00
Dzmitry Neviadomski 18896dcc3e Rework Titlebar.
Show Album art in info button.
2021-02-19 02:58:57 +03:00
Dzmitry Neviadomski b08263159e Show Now Playing bar only when needed.
Fixes #101
Fixes #105
2021-02-19 01:07:05 +03:00
Christopher Snowhill 0b88e5f041
Remove development team setting leak 2021-02-06 14:34:08 -08:00
Dzmitry Neviadomski 5e3ed2af4b Remove ThirdParty SPMediaKeyTap 2021-02-07 00:27:14 +03:00
Dzmitry Neviadomski 64b9764b2e Inhibit ThirdParty libraries build errors.
This helps as to actually see warnings of our code.
2021-01-27 04:31:43 +03:00
Dzmitry Neviadomski 19dbf4c9f5 Migrate to MASShortcut.
Removed NDHotKey code.
Added ability to restore default shortcuts.
Migrated old user-set shortcuts.
2021-01-25 06:47:09 +03:00
Dzmitry Neviadomski 0c820a1d1c Copy Preferences.preferencePane in a more straightforward way. 2021-01-25 01:25:56 +03:00
Dzmitry Neviadomski 52b2610324 Rename General target to Preferences to reflect it's real purpose. 2021-01-25 01:20:27 +03:00
Dzmitry Neviadomski 8fa30d109d Remove dead code after NSPopover migration. 2021-01-10 03:33:21 +03:00
Christopher Snowhill 858b22d60b Move new PositionSliderToolbarItem.swift to correct folder 2021-01-06 14:56:04 -08:00
Christopher Snowhill a5f0ee7d68
Remove developer team 2021-01-06 14:39:03 -08:00
Dzmitry Neviadomski 6a4243128e Update Toolbar items visibility.
Use backported NSSearchToolbarItem to support collapsed state.
Give more priority to Playback controls.
Fix sizing of Playback Slider.
2021-01-07 00:49:14 +03:00
Christopher Snowhill 002fa3b63e Fix last remaining references to old build target 2021-01-06 00:38:23 -08:00
Jan Weiß 63ed28919b Second attempt to fix build with other than maintainer’s TeamIDs. Worked for me with Xcode 12.3. 2021-01-05 17:25:12 +01:00
Christopher Snowhill dbc51d76f9 Revert PR #60 - Nope, that breaks hardened runtime and signing it myself 2020-12-22 02:11:50 -08:00
Jan Weiß c305a5f949 Fix build with other than maintainer’s TeamIDs.
This commit removes development team and code signing key/value pairs that slipped through when Xcode applied code signing changes.
2020-12-13 12:01:48 +01:00
Christopher Snowhill 91b1271ae2 Bump deployment target to 10.13 2020-11-24 15:26:26 -08:00
Dan Leehr cd84ec683e Fix path to icon_blank.icns 2020-11-23 17:01:25 -05:00
Christopher Snowhill dedeb399a8 - Big Sur phase two
- Restructure main window a bit more
- Remove attempt at SF Symbols icons for now
- Add Now Playing popout to Stacks style main window, tooltip instructs to click to select the current track in playlist
- Disable libFLAC plugin on macOS 10.13 and newer, letting Core Audio handle it instead. Apparently, libFLAC is not really ready for Apple Silicon yet.
2020-11-22 18:16:34 -08:00
Christopher Snowhill 002e16260c Change delpoyment target to 10.9 2020-09-06 21:52:07 -07:00
Christopher Snowhill 0001bd581b Phase one of Big Sur 2020-06-30 01:04:55 -07:00
Christopher Snowhill 3b628c3989 Touched by Xcode 2020-06-07 19:57:15 -07:00
Christopher Snowhill 3e6d599452 Implement new notification display system, when running on Mojave or newer 2020-03-21 01:51:35 -07:00
Christopher Snowhill 6a17d6426e Switch to Sparkle binaries. Currently trying 1.22.0. 2020-02-29 17:47:07 -08:00
Jan Weiß f01915ed80 Project touched by Xcode. 2020-02-17 17:06:48 +01:00
Jan Weiß 4f9c58ec4a Remove DevelopmentTeam that slipped through. 2020-02-17 13:47:16 +01:00
Christopher Snowhill 8bc6396918 Fix local signing issues 2020-02-13 17:45:11 -08:00
Christopher Snowhill 765cb5e890 Usual Xcode update mess 2020-02-13 01:41:21 -08:00
Christopher Snowhill eba116d92e Replace Feedback submission dialog with link to special contact form 2019-11-16 14:49:30 -08:00
Christopher Snowhill 2476f8827d Hopefully fix compatibility with systems older than 10.12.1 2019-11-14 19:16:43 -08:00
Christopher Snowhill 09777d4554 Implemented support for MediaPlayer framework, which fixes media key support on newer systems, and also media info reporting 2019-11-13 19:13:59 -08:00
Jan Weiß f5edb6ae71 Added unversioned TeamID infrastruture.
This is described in detail in the file "Shared.xcconfig".
2019-10-19 18:11:56 +02:00
Christopher Snowhill a23085082a Switch back to lazyusf2, and enable JIT entitlement for it 2019-10-15 14:32:18 -07:00
Christopher Snowhill 9a47c0ebe9 - Remove obsolete Growl framework
- Update BASS and friends to latest versions
- Remove unused unmo3 library
- Add entitlements to Hardened Runtime for unsigned plugins (for
  AU MIDI playback), and for executable memory use (for the USF
  recompiler)

- TODO: Replace Growl branding with generic notification icon
2019-10-10 15:47:46 -07:00
Christopher Snowhill fd7ab684c2 Updates for modern Xcode 2019-10-05 00:12:36 -07:00
Christopher Snowhill 050eef7225 Updated to latest Xcode 2019-07-02 16:37:17 -07:00
Christopher Snowhill fd61d465f7 Fix string resources encoding. Fix runtime path for Sparkle framework. 2018-07-22 02:00:10 -07:00
Christopher Snowhill aa3a4d71cc Update post build script. 2018-06-28 05:10:27 -07:00
Christopher Snowhill 67495009ff Updates for new build system. 2018-06-28 04:03:37 -07:00
Christopher Snowhill bcf839efd1 Apply Xcode's suggested changes to project files. 2018-06-04 00:13:55 -07:00
Chris Moeller f97ffd0574 Updated VGMStream to r1050-1289-g35cd14fa. 2018-05-01 00:05:29 -07:00
Christopher Snowhill 50616714ad Implemented AdPlug decoder. 2018-01-27 15:08:06 -08:00
Christopher Snowhill aaaa5d574f Replaced DUMB and company with libopenmpt. 2018-01-04 18:00:39 -08:00
Christopher Snowhill 0ddddb7965 Oops. 2017-12-27 17:38:00 -08:00
Christopher Snowhill 2abba64b32 Hopefully fix Travis CI building once and for all. 2017-12-27 17:33:52 -08:00