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