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
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
6d09b72c1d
Dynamic info now pushes to the correct track
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-12 07:29:02 -08:00
Christopher Snowhill
c39b7ee96a
Converter: Smarter, if less portable, endian swap
...
For big endian sample formats, endianness can be swapped using Clang
specific byte swap functions, which are present in all supported
versions of Xcode.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-12 00:38:08 -08:00
Christopher Snowhill
5f68131437
Converter: One minor change to double to float
...
Use Accelerate for this, too.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-12 00:03:25 -08:00
Christopher Snowhill
6b148fef11
Channel Mixer: Rewrite upmixing, changed HRIR
...
Simple upmixing algorithms now use Accelerate framework functions
instead of complex loops, and the HRIR filter now supports forcing
stereo output to any channel output configuration that has at least
front stereo speakers.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-11 23:51:41 -08:00
Christopher Snowhill
3711999112
Cog Audio: Allocate maximum needed audio memory
...
The chunk could be any format, up to floating point double samples, and
up to 18 channels.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-11 13:50:26 -08:00
Christopher Snowhill
7f8c19799d
Fix a very serious error resampling short files
...
Files that are so short that they need both pre- and post-extrapolation
at the same time.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-11 07:10:31 -08:00
Christopher Snowhill
0b33fe6dea
Don't count output buffering for queue hold
...
This would count the output duration for every file buffered, rather
than only once.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-11 06:50:58 -08:00
Christopher Snowhill
69c4cb3c16
Minor change to remove unnecessary mutable objects
...
These are no longer being manipulated, so remove their mutable state.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-11 05:59:44 -08:00
Christopher Snowhill
39dcb88728
FFmpeg input: Support reading metadata
...
Where TagLib is not being employed, use FFmpeg to read tags where
possible. This allows reading tags from files like IFF. It reads it
through properties, otherwise allowing tag readers to function like
usual.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-10 15:29:13 -08:00
Christopher Snowhill
5ff1f95481
Add decoder open error indicator
...
When decoder is redirected to the internal silence decoder, show an icon
on the playlist indicating a playback error.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-10 02:15:48 -08:00
Christopher Snowhill
df63726128
Track properties take priority over metadata read from tag readers
...
This allows inputs to override things with self-read tags and such, such
as ReplayGain tags.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-09 21:26:17 -08:00
Christopher Snowhill
b1a98139cb
Cog Audio: Fix generic upmixer mode
...
This resulted in horrible things, the generic N to N upmixer was leaving
unmapped channels as uninitialized memory. This fixes horrible things
happening for people with interfaces with more channels than the source
file, frequently when the source file is stereo, or if the file is mono
and a center channel is present.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-09 15:16:19 -08:00
Christopher Snowhill
0012d1b17e
Implement dynamic metadata reading for streams
...
Supported by FFmpeg, FLAC, Ogg Vorbis, and Opus.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-09 13:44:50 -08:00
Christopher Snowhill
cdf27e4786
CogDecoderMulti: Reset file even if not seekable
...
HTTP Reader now supports limited seeking backwards even in streams, so
seek back to file start for repeated file tests, since there are at
least a few inputs that all claim to support things like Ogg containers.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-09 13:44:04 -08:00
Christopher Snowhill
7cea254f4c
Implement framework for dynamic metadata updates
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-08 21:21:53 -08:00
Christopher Snowhill
0763b28f38
HRIR Filter: Replace deprecated Intel-only code
...
_mm_malloc and _mm_free are apparently based on intrinsic functions,
and only exist on Intel or older macOS targets. So removing them in
favor of posix_memalign.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-08 00:13:41 -08:00
Christopher Snowhill
f4f4f80f64
Restart playback on device or output format change
...
Now the output is restarted on the current file at the current position
if the output format has changed. This should resolve the issue finally.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 22:44:56 -08:00
Christopher Snowhill
728c44242c
Do not reset output sample rate automatically
...
This was buggy as hell, and resulted in errors. Now the user should
restart playback if they change output device formats.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 22:02:17 -08:00
Christopher Snowhill
477feaab1d
Now properly supports sample format changing
...
Sample format can now change dynamically at play time, and the player
will resample it as necessary, extrapolating edges between changes to
reduce the potential for gaps.
Currently supported formats for this:
- FLAC
- Ogg Vorbis
- Any format supported by FFmpeg, such as MP3 or AAC
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 19:18:45 -08:00
Christopher Snowhill
91da112e35
Cog Audio: Fix potential hang on stop
...
The ChunkList wasn't clearing the remover entered flag when the chain
was empty. Now it does, so it will shut down correctly.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 15:31:57 -08:00
Christopher Snowhill
08da31f96c
Cog Audio: Fix generic downmix to stereo
...
Code ordering was wrong, it was writing the output samples repeatedly
for each input speaker, now it will only write them once.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 04:17:53 -08:00
Christopher Snowhill
acb1dd75d3
Cog Audio: Fix memory leaks with new buffering
...
By applying copious amounts of autorelease pools, memory is freed in a
timely manner. Prior to this, buffer objects were freed, but not being
released, and thus accumulating in memory indefinitely, as the original
threads and functions had autorelease pools that scoped the entire
thread, rather than individual function blocks that utilized the new
buffering system. This fixes memory growth caused by playback.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 04:06:36 -08:00
Christopher Snowhill
1ef8df675f
Cog Audio: Implement support for channel config
...
This implements the basic output and mixing support for channel config
bits, optionally set by the input plugin.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-07 01:10:05 -08:00
Christopher Snowhill
b0b1446aa7
HRIR Filter: Corrected scale math, fixing volume
...
The volume should have been twice what it was, because I got this scale
wrong. The correct scale for Accelerate inverse FFT is 1/4 per sample,
not 1/8 like I accidentally misread while rewriting a convolver for the
umpteenth time from scratch.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-06 21:53:42 -08:00
Christopher Snowhill
7bf4c4445d
Remove old, now unused code
2022-02-06 21:50:23 -08:00
Christopher Snowhill
85c7073649
Reformat my own source code with clang-format
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-06 21:49:27 -08:00
Christopher Snowhill
62edb39761
Cog Audio: Major rewrite of audio buffering
...
Rewrite attempt number two. Now using array lists of audio chunks, with
each chunk having its format and optionally losslessness stashed along
with it. This replaces the old virtual ring buffer method. As a result
of this, the HRIR toggle now works instantaneously.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-06 03:08:34 -08:00
Christopher Snowhill
0131f7c925
Revert "Core Audio output: Rewrote major portions"
...
This reverts commit 637ea4efe1
.
2022-02-05 04:14:03 -08:00
Christopher Snowhill
4cdca2f5f8
Converter: Fix DSD gaplessness
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-05 04:03:40 -08:00
Christopher Snowhill
637ea4efe1
Core Audio output: Rewrote major portions
...
After all this rewriting, down or upmixing the audio is now handled with
the lowest latency possible, meaning that toggling the HRIR option now
takes effect immediately.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-05 03:45:02 -08:00
Christopher Snowhill
3069a81d85
HDCD Decoder: Adjust gain stepping algorithm
...
This is a fixed point implementation identical to Microsoft's original
algorithm. Or at least I assume it's Microsoft's. It was actually
adapted from hdcd_decode.exe, which was adapted from somewhere else.
It's entirely in fixed point math now, so it's fairly deterministic.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-04 21:52:20 -08:00
Christopher Snowhill
39cc33cac4
Converter: Remove no longer necessary includes
...
These were only needed when I wasn't using Accelerate framework.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-04 19:53:17 -08:00
Christopher Snowhill
d6760c823a
HRIR Filter: Change resampler to use soxr oneshot
...
This should use the oneshot method, which takes care of flushing for us.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 22:54:27 -08:00
Christopher Snowhill
002be384ff
Cog Audio: Terminate queueing when stopping
...
The end of input queueing, which can go nuts when there are a lot of
short files, should be terminated when the user asks the player to stop.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 22:48:25 -08:00
Christopher Snowhill
074e4115dd
sox resampler: Perform post file flush
...
Flush the resampler when the source file terminates, so that it outputs
delayed samples properly. This fixes gapless decoding of resampled
files.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 22:47:11 -08:00
Christopher Snowhill
587be93f21
Cog Audio: Fix runpath search path for libsoxr
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 19:44:48 -08:00
Christopher Snowhill
0e6350116b
libsoxr: Fix import path
...
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 19:28:28 -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
78e960a9e4
Revert "Ring Buffer: Replace virtual buffers"
...
This reverts commit 476c88973b
.
2022-02-01 18:45:12 -08:00
Christopher Snowhill
641f6390c5
HRIR Filter: Quality of life improvements
...
The memory allocation is now nicer, and only allocates what is needed.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 15:28:24 -08:00
Christopher Snowhill
61a30c959c
Bundled resources: Use NSBundle interface
...
These methods should use NSBundle, rather than CF* C functions
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-02-01 14:40:02 -08:00
Christopher Snowhill
808710b881
Volume Control: Fix linear 100% range control
...
Range is now linear on 100%, like it should be.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-30 00:18:07 -08:00
Christopher Snowhill
476c88973b
Ring Buffer: Replace virtual buffers
...
Replace individual virtual buffers with large _mm_malloc blocks at a
time, then dole out chunks of those buffers as the nodes need them.
Should reduce memory contention a little bit.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-29 21:32:59 -08:00
Christopher Snowhill
9e5a70c9ae
Cog Audio: Dealt with a major retain cycle leak
...
This seals up a major memory leak of the playback state whenever a chain
is released on stop or on manual track change. CogAudioMulti was
retaining the input node due to its listeners, and InputNode was not
releasing the listeners when asked to stop running. This is fixed now.
Fixes #221
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-29 21:31:19 -08:00
Christopher Snowhill
85fd3836c0
Debug logging: Added logging of playback and tags
...
Added a logging method that indicates starting playback of a given URL,
and added a debug build only logging of every metadata load event.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-29 16:34:43 -08:00
Christopher Snowhill
d239b58ab1
HRIR Filter: Fix 7.0 downmix and WAV files
...
7.0 downmix was passing parameters to cblas_scopy backwards, and WAV
files report "host" endian, not "native".
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-27 23:02:04 -08:00
Christopher Snowhill
cc2b27d43f
Core Audio output: Potential shutdown fix
...
The thread wait on shutdown had the potential to lock up waiting for the
thread to shut down. Now it should at least spam the semaphores, so that
the thread should progress to shutdown a lot quicker.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-27 00:09:40 -08:00
Christopher Snowhill
bbce6880d7
Core Audio output: Add a quick safety fix
...
Add a safety fix for pausing and shutting down, so that we don't call
into AUAudioUnit's stopHardware function unless the stream has already
been started by the output.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-26 15:42:28 -08:00
Christopher Snowhill
600c447531
Virtual Surround: Further cleanup
...
Quick changes I missed. Oops.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-26 01:03:12 -08:00
Christopher Snowhill
7b5925d7d2
Virtual Surround: General cleanup
...
This should fix some coding issues, and also fix some potential memory
leaks in the file verifier, assuming it didn't already release the
files it was pulling the stats from.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-26 01:00:28 -08:00
Christopher Snowhill
778ac0699e
Virtual Surround: Cleanup properly
...
The filter wasn't properly freeing its FFT setup state, and also was
unnecessarily null checking the pointers before passing them to the
aligned free function, which already does null checking.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-25 22:06:53 -08:00
Christopher Snowhill
c7c3c82c18
Core Audio output: Change end of file timing
...
Reduce the timing at which an end of file notification is sent to the
main thread from 16384 bytes to 8192 bytes. This may help with playback
of a lot of really small files, and skipping tracks.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-25 21:55:08 -08:00
Christopher Snowhill
708c7dc721
Headphone Virtualization: Implement customization
...
Implement the ability to configure and select an HRIR preset to use with
the HRIR filter, or remove the preset. It will validate the file's
usefulness before setting it for the player to use.
Also, fixed back center channel filtering for 7.0 format audio.
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-01-25 21:30:33 -08:00
Christopher Snowhill
bb029757fd
Headphone Virtualization: Fix an oops
...
The previous commit was not sound. Now it is.
2022-01-25 17:45:32 -08:00
Christopher Snowhill
e53144acfa
Headphone Virtualization: Implement 7ch impulses
...
This is needed for HeSuVi no-echo impulses, which are only one channel
per input channel, and mapping uses symmetrical mirroring of the input
set to create the surround effect, since there's no side-to-side delay
in these impulses.
2022-01-25 17:23:34 -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
ec7009f3fc
Equalizer: Instances of GraphicEQ AU are now relinquished to the main thread for destruction instead of being destroyed by the Core Audio Output shutdown
2022-01-24 19:49:43 -08:00
Christopher Snowhill
51caf3f4e3
Cog Audio: Don't overfill the output buffer when asked to reset the buffers
2022-01-23 19:53:50 -08:00
Christopher Snowhill
d364d48944
Cog Audio: Change for recursive lock, fixing a deadlock on buffer resets
2022-01-23 19:50:01 -08:00
Christopher Snowhill
494ad84ea7
Cog Audio: Made ring buffer locking mechanism more secure and/or smarter
2022-01-23 19:36:33 -08:00
Christopher Snowhill
502e52d699
Core Audio output: Hopefully stop buffer looping on device stop
2022-01-22 14:37:37 -08:00
Christopher Snowhill
6011982a63
Equalizer: Correctly activate the equalizer when starting playback
2022-01-22 12:59:59 -08:00
Christopher Snowhill
9d1fd08574
HDCD Decoder: Only process lossless tracks
2022-01-21 22:47:11 -08:00
Christopher Snowhill
26e0e0cead
HDCD Decoding: Add HDCD indicator
2022-01-20 23:53:45 -08:00
Christopher Snowhill
178b32cbdf
Core Audio output: Remove all delayed track end events when buffer reset
2022-01-19 14:54:04 -08:00
Christopher Snowhill
576f1a702a
Core Audio output: Hopefully really fix deadlock issue
2022-01-19 14:50:48 -08:00
Christopher Snowhill
16a58e87a0
Core Audio output: Attempt to fix deadlock near track transitions when buffer resets occur
2022-01-19 14:38:48 -08:00
Christopher Snowhill
6f0a737123
Cog Audio: Implement HDCD decoding
2022-01-19 02:08:57 -08:00
Christopher Snowhill
f2feb3bcd7
Equalizer: Fix applying equalizer presets on automatic track change
2022-01-19 01:23:59 -08:00
Christopher Snowhill
31e5cd9337
Core Audio output: Add debugging code for logging output to disk, only enabled at compile time as necessary
2022-01-19 00:41:42 -08:00
Christopher Snowhill
de193b70e2
Converter: Improve extrapolation for resampler, and also pad decimated DSD, even if not resampling it
2022-01-19 00:40:40 -08:00
Christopher Snowhill
684951bdc0
Change a bunch of NSArray declarations to const collection literals
2022-01-18 18:12:57 -08:00
Christopher Snowhill
f9ace87319
Add static container types to Info.plist generator stub
2022-01-18 16:58:31 -08:00
Christopher Snowhill
9085cf18df
Core Audio output: Fix crash on playback reaching the end of the playlist
2022-01-18 16:48:37 -08:00
Christopher Snowhill
5c0a510848
Core Audio output: Add various minor changes
2022-01-18 16:43:58 -08:00
Christopher Snowhill
c4c29be35a
Output converter: Limit extrapolation to only be trained on twice as many samples as the extrapolation order
2022-01-18 16:43:10 -08:00
Christopher Snowhill
39a5ee8ab7
Utility: Add stubs to regenerate Info.plist with file type associations
2022-01-18 03:07:32 -08:00
Christopher Snowhill
7a0c1d230e
Volume control: Make preamp optional, defaulting to a limit of 100% volume
2022-01-17 22:41:26 -08:00
Christopher Snowhill
83ad969d9b
Equalizer: Add option for presets to track the music genre tags
2022-01-17 20:43:08 -08:00
Christopher Snowhill
87c771c67c
Equalizer: Add option to toggle the equalizer on or off
2022-01-17 01:22:15 -08:00
Christopher Snowhill
c8057e1037
Fix bug in new Core Audio output code
2022-01-16 14:08:17 -08:00
Christopher Snowhill
71b2f7a4f2
Implement graphic equalizer
2022-01-16 07:32:47 -08:00
Christopher Snowhill
c640481c25
Add SIMD optimized volume scaling
2022-01-16 00:46:21 -08:00
Christopher Snowhill
72453ba05a
Cog Audio: Converter now rounds up sample counts affected by resamlping ratio
2022-01-15 23:41:31 -08:00
Christopher Snowhill
8eb2b4c4a3
Cog Audio: Finally fix track glitching on lots of tiny tracks
2022-01-15 02:52:35 -08:00
Christopher Snowhill
fbef034903
Cog Audio: Further overhaul output buffering and track queue code
2022-01-15 02:09:26 -08:00
Christopher Snowhill
5ab728b205
Cog Audio: Overhaul output buffering yet again, adding an extra buffer stage between the converter and the output thread
2022-01-14 22:46:41 -08:00
Christopher Snowhill
ccbfc6ec4b
Semaphore: Change timedWait to wait in microseconds
2022-01-14 22:43:46 -08:00
Christopher Snowhill
d24a01a637
Implemented basic embedded CueSheet support
2022-01-14 16:46:35 -08:00
Christopher Snowhill
6315377eaf
Cog Audio: Fix extrapolator to use signed type for sample delta
2022-01-14 11:37:52 -08:00
Christopher Snowhill
af6677cf34
Cog Audio: Keep track of last resampler quality used so we don't reinitialize when not necessary, and also keep track of DSD decimated sample rate separately, so the input format remains unmodified
2022-01-14 11:18:50 -08:00
Christopher Snowhill
2e164d3fc8
Cog Audio: Reduce glitching on track change by invoking a delegate method that occurs when the track finishes outputting without waiting for it
2022-01-14 11:16:35 -08:00
Christopher Snowhill
3cc5b46a0e
Cog Audio: Improve end of track handling
2022-01-14 10:17:41 -08:00
Christopher Snowhill
cb3782d0b1
Cog Audio: Improve ring buffer
2022-01-14 10:17:08 -08:00
Christopher Snowhill
3ce3edde88
Cog Audio: Fix track end extrapolator used by resampler
2022-01-14 07:39:55 -08:00
Christopher Snowhill
748891f285
Cog Audio / WavPack input: Add DSD decimation to converter, and change WavPack input to emit only raw DSD
2022-01-14 06:26:09 -08:00
Christopher Snowhill
903b457a28
Cog Audio: Make it possible to play obscene sample rate files without major failures
2022-01-14 02:00:32 -08:00
Christopher Snowhill
5aa3f7dd0a
Cog Audio: Properly support seeking within the file that appears to be playing, even if it has already finished decoding
2022-01-14 00:29:02 -08:00
Christopher Snowhill
083dbbf18b
Cog Audio: Also commit synchronization delay on new track playback
2022-01-13 23:54:16 -08:00
Christopher Snowhill
c8d2864862
Cog Audio: Enhance playback queue handler, so it always halts buffering when there are at least 30 seconds worth of buffers filled, possibly spanning multiple files. Also improve the chain reset function so that playlist changes and playback order control reset the queue properly when the queue refill function is currently entered in another thread.
2022-01-13 23:05:32 -08:00
Christopher Snowhill
7cc89c9f92
Cog Audio: Enhance track end extrapolator so it will always have a reasonable amount of buffered data for extrapolation
2022-01-13 23:03:53 -08:00
Christopher Snowhill
e6124335d1
Cog Audio: Change output callback to always retry reading for sample data until the requested buffer is filled, or until the playback either ends or is torn down. This prevents gaps when the preceding ring buffer wraps around.
2022-01-13 23:02:01 -08:00
Christopher Snowhill
92d29e7acf
Cog Audio: Now preserves already resampled output when switching output formats
2022-01-13 19:43:18 -08:00
Christopher Snowhill
ee509b6e13
Cog Audio: Remove unnecessary preprocessor macro for RetroArch code
2022-01-13 18:01:12 -08:00
Christopher Snowhill
73348b1616
Cog Audio: Implement play position skip ahead when output format changes, based on how much converter output is being discarded
2022-01-12 23:17:07 -08:00
Christopher Snowhill
52b17bd4d8
Cog Audio: Implement virtual ring buffer function to read buffered bytes count
2022-01-12 23:16:13 -08:00
Christopher Snowhill
d1b519d59d
Cog Audio: Only declare end of stream on read when previous node has declared end of stream and the buffer has actually run empty. This prevents the case where the buffer may terminate early due to the read pointer hitting the end of the ring buffer and wrapping.
2022-01-12 23:15:23 -08:00
Christopher Snowhill
ec7ac74fcd
Cog Audio: Fix input chain to reset its buffers when seeking properly
2022-01-12 23:13:49 -08:00
Christopher Snowhill
cc134ce293
Cog Audio: Converter node actually pauses when it is being reconfigured, and resets its buffer when the output format is changed
2022-01-12 23:13:00 -08:00
Christopher Snowhill
b0f5a37e85
Cog Audio: Only proceed to the next track when the current track has actually finished
2022-01-12 21:53:58 -08:00
Christopher Snowhill
5fef62dd03
Cog Audio: Implemented device output and input file format changing support
2022-01-12 21:31:22 -08:00
Christopher Snowhill
9feaffc92d
Cog Audio: Made RetroArch resampler safer
2022-01-12 18:45:43 -08:00
Christopher Snowhill
8664bacc60
Core Audio output: Correctly terminate output when requested to stop, preventing a case where multiple outputs were draining the playback buffer at once
2022-01-12 16:04:41 -08:00
Christopher Snowhill
2633e713a3
Cog Audio: Remove seek mess from previous commit
2022-01-12 16:03:49 -08:00
Christopher Snowhill
f1d70aaa54
Cog Audio: Add explanatory comment to source code
2022-01-12 03:36:27 -08:00
Christopher Snowhill
84d445cffe
Cog Audio: Fix converter so that seeking on startup playback position resume works properly
2022-01-12 03:01:55 -08:00
Christopher Snowhill
16402f9982
RetroArch resampler: Stub out code we don't need, reducing code size
2022-01-12 03:01:55 -08:00
Christopher Snowhill
3b125c0440
Cog Audio: Improve virtual ring buffer class
2022-01-11 22:50:18 -08:00
Christopher Snowhill
a76f3c3476
Cog Audio: Reorder project files
2022-01-11 22:48:50 -08:00
Christopher Snowhill
f8e3b0e1ee
Core Audio output: Some more minor changes
2022-01-11 22:06:41 -08:00
Christopher Snowhill
557e0bd399
Core Audio output: Fix so it stops properly
2022-01-11 20:38:17 -08:00
Christopher Snowhill
91c3feac2e
Cog Audio converter: Fix handling signed versus unsigned for 8 bit samples
2022-01-11 19:37:47 -08:00
Christopher Snowhill
f44e4e793b
Cog Audio converter: Fix end of track flush and extrapolation
2022-01-11 19:37:17 -08:00
Christopher Snowhill
ed882e25cb
Cog Audio: Resampler now extrapolates into latency padding for better gapless playback
2022-01-11 18:19:30 -08:00
Christopher Snowhill
7d4841b1c6
Core Audio output: Don't upmix unless output device requests it by default
2022-01-11 18:18:38 -08:00
Christopher Snowhill
ee05fe9e44
Core Audio output: Add sanity checking for supported formats, and support 64 bit float input data, in case anything actually uses that
2022-01-11 17:09:06 -08:00
Christopher Snowhill
4dd46a1b5b
Core Audio output: Fix output stopping properly
2022-01-11 07:52:44 -08:00
Christopher Snowhill
72210c67e4
Replaced AudioQueue output with AUAudioUnit
2022-01-11 07:06:40 -08:00
Christopher Snowhill
c4c9a741ef
Replaced AudioToolbox converter process with homebrew solution, using the RetroArch sinc resampler
2022-01-11 04:09:19 -08:00
Christopher Snowhill
dfe92ffedc
Audio Player: Fix so ReplayGain isn't reset on seek
2021-12-28 21:05:25 -08:00
Christopher Snowhill
841481599e
Audio Player: Minor change
2021-12-28 21:04:46 -08:00
Christopher Snowhill
c1c21ec84f
Hopefully fix glitching on seeking
2021-12-28 16:04:16 -08:00
Christopher Snowhill
486352ea72
Core Audio output: Enforce some minimum quality settings
2021-12-28 15:41:31 -08:00
Christopher Snowhill
ba3746fcff
Remove blank line
2021-12-28 15:40:53 -08:00
Christopher Snowhill
476dd913b2
Audio player: Attempt to fix queue issues. There are still remaining issues if a single short track queues repeatedly and the user changes tracks manually.
2021-12-28 15:40:26 -08:00
Christopher Snowhill
38c530043d
Output converter: Add more upmixing modes
2021-12-28 15:39:23 -08:00
Christopher Snowhill
b13235ec5f
Fix 6.1 stereo downmix mapping
2021-12-28 00:10:44 -08:00
Christopher Snowhill
258a56a276
Audio Output: Implement more upmixing modes, and correct some upmixing behavior
2021-12-28 00:09:57 -08:00
Christopher Snowhill
ad3058c4f3
Audio Queue: Better handle a lot of short files playing in a row, so files don't get skipped, and so the player doesn't get overburdened starting new files
2021-12-27 23:21:48 -08:00
Christopher Snowhill
e2bca8f93b
OpenMPT: Correctly OS version gate the OpenMPT plugins, and add an interface for any other plugin to use, should it ever become necessary
2021-12-27 17:46:09 -08:00
Christopher Snowhill
25a43a9083
Audio Output: Fix converter to always emit trailing samples on end of track
2021-12-27 17:04:16 -08:00
Christopher Snowhill
8e895c88c0
Core Audio output: Properly apply or remove default device change listener when switching preferences between the 'System Default Device' setting and manually setting the device to the current default
2021-12-26 21:33:28 -08:00
Christopher Snowhill
8435416cd7
Core Audio output: Default device setting now tracks system device changes, and output assigns a speaker mapping depending on the channel count
2021-12-26 21:27:26 -08:00
Christopher Snowhill
378aaf23ae
Clean up several CFStringRef leaks
2021-12-26 18:08:53 -08:00
Christopher Snowhill
d2e480ace5
Core Audio output: Properly support switching output devices
2021-12-26 17:16:16 -08:00
Christopher Snowhill
917b7457b6
Made resume playback on startup so that seeking operation is entirely atomic with starting playback, so the new seeking behavior doesn't have the potential to crash the player
2021-12-26 04:35:54 -08:00
Christopher Snowhill
1cc34ea7d4
Audio Output: Made converter cleanup atomic, to wait on any threads that are still running
2021-12-26 04:34:33 -08:00
Christopher Snowhill
8d7cd6cc93
Multi Input plugin: Correctly forward register and remove observer callbacks to the actual decoder in use
2021-12-26 02:01:53 -08:00
Christopher Snowhill
dfeca7aa97
Seeking now takes the true nuclear approach to output, and should no longer have glitches
2021-12-26 02:01:02 -08:00
Christopher Snowhill
d22ee14a36
Audio Output: Take a more nuclear approach to output resetting when seeking
2021-12-25 23:41:45 -08:00
Christopher Snowhill
1278b64afd
Audio Output: Fixed converter so it won't loop endlessly when it either reaches the end of a stream or is otherwise supposed to terminate
2021-12-25 22:47:17 -08:00
Christopher Snowhill
5246731189
Core Audio: Overhauled audio output to use AudioQueue instead of AudioUnit, fixed downmixing to mono, and implemented upmixing mono or other formats to more channels if the device requests them
2021-12-25 22:32:43 -08:00
Christopher Snowhill
c6b112f512
CoreAudio output: Fix buffer underruns on output that could result in buffer looping in CoreAudio, by feeding silence from the callback instead of returning incomplete or possibly empty buffers
2021-12-25 19:43:10 -08:00
Christopher Snowhill
9c9d71cd9c
Overhaul CoreAudio output code: Downmix properly from 8 channels, redo converter process, and no longer crash when forced to output to a low quality device. Switchover to stereo from mono isn't perfect, however.
2021-12-25 15:02:13 -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
4ff38268ae
Plugins: Support multiple handlers per MIME type for streams
2021-12-22 16:22:49 -08:00
Christopher Snowhill
9566a36815
Error handler: Better handle errors and increase silence generator to 10 seconds at a time
2021-12-22 16:22:05 -08:00
Christopher Snowhill
44b813d2bf
Audio queue: Better handle queues of lots of short files
2021-12-11 00:22:54 -08:00
Christopher Snowhill
00f1e0957c
FLAC: Move libFLAC decoder to higher priority than any potential system decoder, support arbitrary sample bit depths
2021-12-11 00:22:19 -08:00
Christopher Snowhill
ed8a5763ab
Output: Add System Default Output option, rather than adjusting the listing to display the current system default only the first time
2021-12-05 22:49:56 -08:00
Christopher Snowhill
ceb2e3f7dd
Fix warning due to incorrect delegate function prototype
2021-09-25 13:17:00 -07:00
Christopher Snowhill
cfeadad97f
Reduce minimum OS to macOS 10.12
2021-09-18 01:08:49 -07:00
Christopher Snowhill
da96d2c21e
Core Audio Output: Add a check that should prevent it from attempting to output data through the callback during or after destruction
2021-09-17 19:09:34 -07:00
Christopher Snowhill
13bd399b31
Clean up most warnings and update some dependencies
2021-04-29 18:16:24 -07:00
Christopher Snowhill
483b8d6647
Don't load metadata for stream URLs
2021-02-28 18:48:21 -08:00
Dzmitry Neviadomski
9840d87127
Convert CogStatus enum to NS_ENUM
2021-02-07 00:22:19 +03:00
Dzmitry Neviadomski
70a22e9611
Fix some more warnings.
2021-01-27 05:12:07 +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
Christopher Snowhill
97fee7e486
Add a bodge so playback status bar doesn't pop in and out repeatedly on manual track changes
2021-01-06 00:39:12 -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
850fe390ca
Fixes FLAC playback crash on Apple Silicon
...
- Avoid creating an NSDictionary with NULL context object (https://github.com/kode54/Cog/blob/master/Audio/Chain/InputNode.m#L81 passes NULL as context, so this must be handled in NSDictionary creation
- When calling addObserver, downgrade options from NSNumber * to NSKeyValueObservingOptions (aka NSUInteger)
Not sure why this would be specific to Apple Silicon...
2020-11-23 17:01:25 -05: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
6c7b7f7213
Maximum volume increased to 800%
2020-04-06 23:30:07 -07:00
Christopher Snowhill
b7487e2ad2
Clean up audio output code just a bit
2020-03-23 01:46:41 -07:00
Christopher Snowhill
117ab53343
Fix multi-plugin cascade to handle non-seeking readers, where disposing of some data while finding an input is okay
2020-03-08 20:04:10 -07:00
Christopher Snowhill
6d0166e69b
Fix multi-plugin cascade when using non-seeking readers
2020-03-07 16:09:26 -08:00
Christopher Snowhill
7308aa5f7b
Fall back on non-container file parsing, since VGMStream is too greedy with its extension list
2020-02-17 19:50:32 -08:00
Jan Weiß
da775ce8a6
Clean up output device code.
2020-02-17 18:20:48 +01:00
Christopher Snowhill
765cb5e890
Usual Xcode update mess
2020-02-13 01:41:21 -08:00
Jan Weiß
b22c5964e4
Improve output handling, 2.
...
Fix issues with above.
2020-02-01 14:44:07 +01:00
Jan Weiß
97ed738846
Improve output handling.
2020-02-01 14:00:41 +01: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
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
9e8fd61d8c
Update xcschemes.
2017-12-05 19:10:41 -08:00
Christopher Snowhill
913287665d
Update project files to current recommendations.
2017-09-26 16:12:33 -07:00
Christopher Snowhill
039347f36f
Made all scheme configurations shared, imported.
2017-09-17 18:40:02 -07:00
Christopher Snowhill
8ad0b7e8e3
Updated projects to Xcode recommendations.
2016-11-03 22:42:21 -07:00
Christopher Snowhill
7bb116a33b
Added a fix so that a rapid succession of sub-10 second files do not get queued up until the player eventually crashes.
2016-09-17 20:59:58 -07:00
Christopher Snowhill
a95280626f
Fix Projects. Fix a major deadlock introduced by previous commit. Introduce new mGBA based GSF player.
2016-09-04 12:49:43 -07:00
Christopher Snowhill
899cfd6b42
Update project files.
2016-09-01 18:50:33 -07:00
Chris Moeller
aaf320a96c
Add autorelease pools to various info loading functions, so that adding massive amounts of tracks to the playlist will not run out of file handles.
2016-06-29 22:14:13 -07:00
Chris Moeller
17272ce43c
Clean up lots of warnings and minor issues.
2016-06-29 22:10:29 -07:00