Jonas Kvinge
6b1c14f875
GstEngine: Make sure asiosink is detected
2024-02-16 00:29:17 +01:00
Jonas Kvinge
7770aba877
GstEngine: Add pipewiresink
2024-02-14 18:46:23 +01:00
Jonas Kvinge
05381096aa
RadioParadiseService: Use API to receive streams
2024-02-12 16:57:51 +01:00
Jonas Kvinge
6bdd9ad4dd
GstEnginePipeline: Only hard-code playbin3 with gst 1.22
2024-02-11 23:52:22 +01:00
Jonas Kvinge
0168182af5
CddaDevice: Add missing override
2024-02-11 00:14:19 +01:00
Adam Hill
dd6b9bb38d
MainWindow: Add function to display progress on taskbar
2024-02-09 21:48:12 +01:00
Jonas Kvinge
53fc939e35
ScrobblingAPI20: Ignore permission related error
...
Last.fm returns permission denied error when servers are overloaded, ignore this error instead.
Fixes #442
2024-02-07 01:34:46 +01:00
Strawbs Bot
42d6c79710
Update translations
2024-02-01 21:43:21 +01:00
Jacob Henner
fa057ee9d3
CollectionView: Add "search for this"
...
Add selection search in the collection view, to allow users to quickly
search for similarly-named songs, artists, albums, etc.
2024-01-25 19:16:14 +01:00
Jonas Kvinge
a915e62e2c
GPodDevice: Fix error message
2024-01-24 19:52:24 +01:00
Jonas Kvinge
226a6c50e0
Add better error messages for device and organize
...
Fixes #1364
2024-01-24 19:27:30 +01:00
Jonas Kvinge
269f13de76
MtpLoader: Allow empty artist
2024-01-24 19:21:02 +01:00
Enrique Garcia
f86c3cfd91
SubsonicSettingsPage: Add recommended to MD5 authentication
2024-01-21 04:25:31 +01:00
Jonas Kvinge
f901f802bb
CollectionView: Implement add to playlist with enter
...
Fixes #1360
2024-01-19 23:04:03 +01:00
Jonas Kvinge
a98c209101
AutoExpandingTreeView: Remove doubleClicked on enter
2024-01-19 23:03:37 +01:00
Jonas Kvinge
6a459682ca
Playlist: Check for valid index
...
Fixes #1359
2024-01-19 22:37:14 +01:00
Jonas Kvinge
a4b7766947
DeviceManager: Add nullptr check for connected device
...
Possible fix for #1313
2024-01-11 17:03:00 +01:00
Jonas Kvinge
8d1a0071b6
Playlist: Use effective original year for sorting
...
Fixes #1349
2024-01-11 16:40:12 +01:00
Jonas Kvinge
04e593dc62
CollectionWatcher: Add unavailable song restored logging
2024-01-03 00:45:30 +01:00
Jonas Kvinge
2294c38aa9
CollectionBackend: Rename SqlQuery variable
2024-01-03 00:44:54 +01:00
Jonas Kvinge
7c4e33b676
GstEngine: Treat all stream errors as non-fatal
...
Fixes #1347
2024-01-02 19:54:19 +01:00
Jonas Kvinge
1ff2bfd390
Organize: Only update song path for collection songs
...
Possible fix for #1341
2023-12-28 23:30:07 +01:00
Jonas Kvinge
a35fa5b158
Require KDSingleApplication 1.1.0
2023-12-26 23:30:25 +01:00
Strawbs Bot
22169bda0d
Update translations
2023-12-13 23:59:26 +01:00
Jonas Kvinge
135b93a5af
StretchHeaderView: Set default section size
...
As of Qt 6.6.1, style changes are resetting the column sizes. To prevent this, we set a default section size.
Fixes #1328
2023-12-09 01:47:37 +01:00
BetterCallMolly
84c6e09c42
Player: Fix crossfade crash when decoding fails
...
When the decoding of a track fails, `current_item_` is set to an invalid address, if the Crossfade option is enabled, the `Player::TrackAboutToEnd` method does not check whether `current_item_` is a valid pointer or not, causing a segmentation fault.
Player: Removed extra space
2023-12-03 22:07:09 +01:00
Strawbs Bot
b4f9808d11
Update translations
2023-12-02 04:30:54 +01:00
Jonas Kvinge
d96d4224a2
Collection: Use normal pointer for watcher
...
Fixes #1316
2023-11-29 22:26:40 +01:00
Jonas Kvinge
f65927e308
metatypes: Register QAbstractSocket::SocketState
2023-11-29 22:25:03 +01:00
Jonas Kvinge
54c42b276f
GstEnginePipeline: Increase thread priority
2023-11-26 13:12:03 +01:00
Jonas Kvinge
ac9fd9070f
GstEnginePipeline: Only set max size buffer if > 0
...
Fixes #1302
2023-11-12 22:04:31 +01:00
Jonas Kvinge
6348649bc6
GstEnginePipeline: Run QTimer::singleShot in main thread
...
Partial fix for #1302
2023-11-12 21:57:59 +01:00
Strawbs Bot
c95886d8db
Update translations
2023-11-05 22:10:17 +01:00
Michał Walenciak
117b965a7b
Translate number of tracks with nice plural forms
2023-11-05 19:37:56 +01:00
Michał Walenciak
1b6b5f9afa
Use plurals
2023-11-05 19:37:56 +01:00
Michał Walenciak
33f0421d3f
Use 'n' for proper plurar form
2023-11-05 19:37:56 +01:00
Sergei B
661615e546
Allow drag and drop of songs to favorite playlists
...
- allows adding songs from active playlist
to any favorite by drag & drop
- after 500msec hovering with the songs over
desired playlist it becomes current
- drag & drop multiple songs is supported
2023-11-04 21:06:04 +01:00
Jonas Kvinge
48685325e6
Use KDSingleApplication as a submodule
2023-10-22 16:32:55 +02:00
Jonas Kvinge
2bb09cf575
Song: Handle MP2 in Song::FiletypeByDescription
2023-10-21 05:07:25 +02:00
Jonas Kvinge
7bf4ad3884
Song: Handle MP2 in Song::FiletypeByExtension
2023-10-21 04:59:50 +02:00
Jonas Kvinge
5154d7ac84
Song: Rename MP3 to MPEG
2023-10-21 04:59:33 +02:00
Jonas Kvinge
9211b6f0c0
GstStartup: Remove macOS libsoup workarounds
2023-10-21 03:05:04 +02:00
Strawbs Bot
ab6a0ed6dd
Update translations
2023-10-21 01:33:19 +02:00
Jonas Kvinge
bf52afa21d
GstStartup: Add back LIBSOUP3_LIBRARY_PATH
2023-10-15 07:46:49 +02:00
Jonas Kvinge
fda56dda25
main: Use Utilities::SetEnv
2023-10-14 23:18:16 +02:00
Jonas Kvinge
310b7b9065
CollectionQuery: Add F for float
2023-10-14 22:08:50 +02:00
Jonas Kvinge
cd534bbda7
CMake: Remove USE_BUNDLE_DIR
2023-10-14 03:30:09 +02:00
Jonas Kvinge
1a66eaf7bf
GstStartup: Refactor environment code
2023-10-14 03:29:54 +02:00
Jonas Kvinge
54cfb2bbc4
main: Don't override library paths
2023-10-14 03:28:28 +02:00
Jonas Kvinge
99a5aee8b3
GstEnginePipeline: Change debug logging for active/inactive
2023-10-13 23:38:19 +02:00
Jonas Kvinge
89d2a23dac
CollectionBackend: Use QString::arg()
2023-10-13 23:06:29 +02:00
Jonas Kvinge
ee1bf47f5c
DeviceInfo: Simplify hint
2023-10-13 22:58:53 +02:00
Jonas Kvinge
13ac20f8b3
Add/remove reference for parameters
2023-10-13 22:58:18 +02:00
Jonas Kvinge
adef05bbdf
Use QString::arg()
2023-10-13 22:55:20 +02:00
Jonas Kvinge
f03ff452b8
SavePlaylistsDialog: Add parent to ctor
2023-10-13 22:53:27 +02:00
Jonas Kvinge
c39489060b
Mpris2: Add static_cast
2023-10-13 22:52:36 +02:00
Jonas Kvinge
002fa8f4aa
Fix mismatched definition
2023-10-13 22:49:20 +02:00
Jonas Kvinge
d2c747258c
Song: Add MPC to FiletypeByMimetype and FiletypeByDescription
2023-10-12 01:16:40 +02:00
Jonas Kvinge
f542f1c854
GstEnginePipeline: Remove volume sync for Auto
...
Workaround crash in #1123
2023-10-10 23:17:03 +02:00
Jonas Kvinge
33041ffa75
GstEnginePipeline: Delay seek when when resetting next URI
...
When seeking after the next URI is set, we set the state to READY to switch the URI back. The seek in after going to ready sometimes does not work, delay the seek to workaround this.
Fixes #1258
2023-10-10 23:00:11 +02:00
Jonas Kvinge
1493164df9
CollectionQuery: Strip off whitespaces after colon and simplify code
...
Fixes #1290
2023-10-10 19:15:20 +02:00
Strawbs Bot
8ffef558ff
Update translations
2023-10-10 01:37:19 +02:00
Jonas Kvinge
2706529006
DeviceDatabaseBackend: Add missing ebur128 fields
2023-10-10 01:27:39 +02:00
Jonas Kvinge
7e331a2055
DeviceManager: Fix creating connected device
2023-10-10 01:26:47 +02:00
Jonas Kvinge
505329730c
Improve lyrics match
2023-10-08 23:55:05 +02:00
Jonas Kvinge
eee0c40132
Playlist: Use InternetServicePtr
2023-10-07 17:05:51 +02:00
Jonas Kvinge
567bad33e1
Playlist: Use PlaylistItemPtr
2023-10-07 17:05:36 +02:00
Jonas Kvinge
b5c0e93989
FancyTabWidget: Use QApplication::style(), not style()
2023-10-07 15:36:49 +02:00
Jonas Kvinge
ac17df2a86
PlaylistContainer: Remove unused signals
2023-10-07 15:34:37 +02:00
Jonas Kvinge
a9a5899252
FancyTabWidgetProxyStyle: Create proxy style from application style
2023-10-07 15:23:41 +02:00
Jonas Kvinge
395d85c1b4
Move PlaylistProxyStyle to it's own file
2023-10-07 15:16:39 +02:00
Jonas Kvinge
52ba1ce17f
PlaylistView: Fix build with Qt 5
2023-10-07 15:04:00 +02:00
Jonas Kvinge
604a246fe8
PlaylistProxyStyle: Use CE_HeaderLabel instead of CE_Header
2023-10-07 14:50:46 +02:00
Jonas Kvinge
e172c4871c
PlaylistView: Create proxy style based on application style
...
Fixes #1275
2023-10-07 14:48:40 +02:00
Jonas Kvinge
76fa4745d0
GstEnginePipeline: Only update last known position when possible
...
Fixes flaky seeking where gst_element_query_position() returns -1 when seeking.
2023-10-07 02:47:12 +02:00
Strawbs Bot
6f4d26e9d3
Update translations
2023-10-04 00:33:42 +02:00
Jonas Kvinge
f40f43861d
EngineBase: Use enum class for TrackChangeType
2023-10-03 20:18:52 +02:00
Jonas Kvinge
79c69e1b1e
CollectionWatcher: Match extension case-insensitive
2023-10-02 17:39:10 +02:00
Jonas Kvinge
8fc95e08dc
CollectionWatcher: Ignore compressed files
...
Fixes #1274
2023-10-02 17:23:47 +02:00
Strawbs Bot
c10a64f08a
Update translations
2023-09-25 02:37:58 +02:00
Jonas Kvinge
e3666e5bf3
Remove OTHER_SOURCES
2023-09-24 19:53:49 +02:00
Jonas Kvinge
6a018f3e25
MainWindow: Add sponsorship mesage
2023-09-24 15:09:20 +02:00
Jonas Kvinge
ab26d422e9
MainWindow: Update rosetta message
2023-09-24 15:08:57 +02:00
Jonas Kvinge
f4e18fb87c
MessageDialog: Set minimum width
2023-09-24 15:08:35 +02:00
Jonas Kvinge
0ef50e1b6d
Remove unused variables
2023-09-23 23:55:49 +02:00
Jonas Kvinge
8393cdb2de
Add lyrics from elyrics.net and lyricsmode.com
2023-09-20 19:02:28 +02:00
Jonas Kvinge
da19272eb6
HtmlLyricsProvider: Rename GetUrl to Url
2023-09-20 17:39:44 +02:00
Jonas Kvinge
60fb83d770
HtmlLyricsProvider: Remove <script> tags and content between
2023-09-20 17:38:45 +02:00
Jonas Kvinge
1c90b03476
Add HTML lyrics provider
2023-09-20 01:09:08 +02:00
Jonas Kvinge
50502ce720
Add azlyrics.com lyrics provider
2023-09-19 22:47:07 +02:00
Jonas Kvinge
39f9d02454
Add songlyrics.com lyrics provider
2023-09-19 16:56:10 +02:00
Jonas Kvinge
cdb4980337
CollectionBackend: Don't expire unavailable songs part of playlists
2023-09-17 21:54:27 +02:00
Jonas Kvinge
e201f71a74
CMake: Simplify Qt detection
2023-09-16 14:55:42 +02:00
buckmelanoma
7e684885cf
Capitalize column names
...
Capitalize column names for consistency with OS
2023-09-15 15:33:07 +02:00
Jonas Kvinge
7cd6f372e6
MacOsDeviceLister: Move kind variable inside #ifdef HAVE_AUDIOCD
2023-09-05 23:42:32 +02:00
Jonas Kvinge
dc01a18b87
Remove lyrics.com lyrics provider
...
Does not provider full lyrics in API. The URL we used only points to a page with "Get the lyrics for <song> at Lyrics.com" now.
2023-08-31 23:22:22 +02:00
Strawbs Bot
7be0e284c2
Update translations
2023-08-31 22:52:37 +02:00
Jonas Kvinge
6dd79d5b8f
MainWindow: Bound volume between 0 and 100
...
Fixes #1262
2023-08-30 21:43:52 +02:00
Jonas Kvinge
45ad84a9bc
Fix build with macOS < 12.0
2023-08-27 13:54:23 +02:00
Jonas Kvinge
59f716563f
QSearchField: Use static_cast
2023-08-27 01:15:01 +02:00
Jonas Kvinge
6815f8c9b7
MacOsDeviceFinder: Rename kAudioObjectPropertyElementMaster to kAudioObjectPropertyElementMain
2023-08-27 01:14:42 +02:00
Jonas Kvinge
8e5360ac38
MacOsDeviceLister: Rename kIOMasterPortDefault to kIOMainPortDefault
2023-08-27 01:14:24 +02:00
Jonas Kvinge
aa6809ad5f
DeviceManager: Use pointer directly
2023-08-27 01:14:00 +02:00
Jonas Kvinge
d8a7d427c3
BehaviourSettingsPage: Simplify Load
2023-08-27 01:12:38 +02:00
Jonas Kvinge
bc1b45d912
MainWindow: Fix build on macOS
2023-08-27 00:09:49 +02:00
Jonas Kvinge
50c5283599
BehaviourSettingsPage: Use QSystemTrayIcon::isSystemTrayAvailable directly
2023-08-26 21:21:31 +02:00
Jonas Kvinge
02ef65bcfd
MainWindow: Only keep running when system tray icon is enabled
2023-08-26 21:20:50 +02:00
Jonas Kvinge
904245bb21
keymapper_x11: Qt::Key_mu renamed Qt::Key_micro from Qt 6.7
2023-08-26 21:15:26 +02:00
Jonas Kvinge
bfb95d503a
ErrorDialog: Clear messages on close instead of hide
...
Fixes an issue where the error dialog is cleared because the hide event gets triggered.
2023-08-07 19:38:48 +02:00
Jonas Kvinge
d1b4736ef9
ErrorDialog: Give name to layouts
2023-08-07 19:36:20 +02:00
Jonas Kvinge
e56e58b634
GstEnginePipeline: Always set use-buffering
2023-08-06 13:44:57 +02:00
Jonas Kvinge
fed5b6b695
GstEnginePipeline: Rename ebur128 volume variable
2023-08-06 13:36:25 +02:00
Jonas Kvinge
acda7c13b2
GlobalShortcutsBackendMacOSPrivate: Replace boost::noncopyable with Q_DISABLE_COPY
2023-08-04 03:36:01 +02:00
Jonas Kvinge
7d5c7f8493
MacOsDeviceLister: Replace BOOST_SCOPE_EXIT with QScopeGuard
2023-08-04 03:36:01 +02:00
Jonas Kvinge
f81bd26649
MergedProxyModelPrivate: Formatting
2023-08-03 20:03:48 +02:00
Jonas Kvinge
2a407bfe47
ScopedTransaction: Replace boost::noncopyable with Q_DISABLE_COPY
2023-08-03 19:58:16 +02:00
Jonas Kvinge
f70f126f76
AlsaDeviceFinder: Replace BOOST_SCOPE_EXIT with QScopeGuard
2023-08-03 17:29:42 +02:00
Jonas Kvinge
f06591fde8
Database: Replace BOOST_SCOPE_EXIT with QScopeGuard
2023-08-03 17:29:11 +02:00
Strawbs Bot
e0c9a9dc17
Update translations
2023-08-03 01:03:54 +02:00
Dakes
7aa7cdf6f3
Add filtering of numerical cols to collection
...
CollectionFilterWidget: Updated the tooltip, to reflect the changes.
CollectionQuery: Add parsing for SQL operators and insert right SQL
"where" searches.
Song: Add list of numerical columns
playlistfilterparser.cpp/FilterParser: move time and rating parsing
functions to new file:
searchparserutils.cpp: Contains common code used to parse search terms
in playlist and collection filters.
2023-08-02 16:52:27 +02:00
Dakes
82a8a890de
PlaylistContainer: Add tooltip to search field
2023-08-02 16:52:27 +02:00
Dakes
f8df901963
PlaylistFilter: Add playcount and skipcount
2023-08-02 16:52:27 +02:00
Jonas Kvinge
8b08d1d599
Mpris2: Always use QGuiApplication::desktopFileName
2023-08-02 15:27:24 +02:00
Jonas Kvinge
f3ddba3edc
main: Set desktop filename
...
Fixes #1254
2023-08-02 14:37:24 +02:00
Jonas Kvinge
acbec6db7e
main: Set application display name
2023-08-02 14:25:40 +02:00
Jonas Kvinge
e273d64be3
Player: Always stop after 100 errors
...
Fixes #1199
2023-08-01 16:59:43 +02:00
Jonas Kvinge
2a90256d32
GstEnginePipeline: Disable volume sync on Windows
...
Fixes #1220
2023-08-01 16:39:57 +02:00
Jonas Kvinge
560712db21
ebur128analysis: Check for valid channel-mask
2023-07-30 03:18:48 +02:00
Jonas Kvinge
483b42d2b8
GstStartup: Use directsoundsink as primary sink
2023-07-29 22:54:49 +02:00
Dakes
f5a55abf58
Mpris2: Add new property to read/write the rating
2023-07-27 11:24:19 +02:00
Jonas Kvinge
0bc94b90d7
SmartPlaylistSearchTerm: Handle unrated (-1) as zero
...
Fixes #1244
2023-07-26 01:45:28 +02:00
Strawbs Bot
9ed4bd9366
Update translations
2023-07-24 09:46:20 +02:00
Jonas Kvinge
d3352e476f
Remove `< 0` check on unsigned
2023-07-21 07:17:58 +02:00
Jonas Kvinge
4b4c5fc0ab
Use const reference for `AlbumCoverLoaderOptions::Types`
2023-07-21 07:17:26 +02:00
Jonas Kvinge
38b9c7c38a
MusixmatchCoverProvider: Add const
2023-07-21 07:16:32 +02:00
Jonas Kvinge
c71ce41c83
LastFMImport: Move variable declaration
2023-07-21 07:16:23 +02:00
Jonas Kvinge
4cd030215d
Transcoder: Remove useless empty check
2023-07-21 07:16:08 +02:00
Jonas Kvinge
2ce5d6f727
Database: Add missing const
2023-07-21 07:15:55 +02:00
Jonas Kvinge
b55a0df8e1
CollectionView: Remove useless variable
2023-07-21 07:15:42 +02:00
Jonas Kvinge
ee5fa23a7a
LocalRedirectServer: Remove unused https variable
2023-07-21 07:15:08 +02:00
Jonas Kvinge
75ab6f25f4
Check return of QSqlQuery::prepare
2023-07-21 07:12:20 +02:00
Jonas Kvinge
eaed82c9b2
CollectionItemDelegate: Remove check for nullptr, already done
2023-07-21 07:11:21 +02:00
Jonas Kvinge
2a4be6fcd7
BoomAnalyzer: Move variable declaration
2023-07-21 07:10:31 +02:00
Jonas Kvinge
e6198500f7
BlockAnalyzer: Remove useless continue
2023-07-21 07:10:17 +02:00
Jonas Kvinge
7db36c83c1
MainWindow: Don't use our network manager for Qt Sparkle
2023-07-21 06:20:46 +02:00
Jonas Kvinge
0e1921698c
TidalUrlHandler: service is already a pointer
2023-07-21 06:11:16 +02:00
Jonas Kvinge
95eed1ecec
Fix QtConcurrent::run build with Qt 5
2023-07-21 06:10:44 +02:00
Jonas Kvinge
2e61235403
Application: Use shared pointers
...
Fixes #1239
2023-07-21 05:55:24 +02:00
Jonas Kvinge
d6b53f78ab
Cleanup includes
2023-07-21 05:25:57 +02:00
Jonas Kvinge
a2c7ff63df
Formatting
2023-07-21 05:11:27 +02:00
Roman Lebedev
9fb15545bd
GstEnginePipeline: Perform EBU R 128 Loudness Normalization in floating-point
2023-07-19 03:07:22 +02:00
Jonas Kvinge
56180ca419
LocalRedirectServer: Remove https option and gnutls dependency
2023-07-18 19:44:45 +02:00
Jonas Kvinge
dc65753a0b
ebur128analysis: Remove extra semicolon
2023-07-16 23:26:17 +02:00
Jonas Kvinge
d8857d8e72
Add missing QMetaType include
2023-07-12 18:13:02 +02:00
Jonas Kvinge
fdc3e0a5f5
LyricsSearchResult: Add missing QList include
2023-07-12 18:12:48 +02:00
Jonas Kvinge
8f7180eb6c
Song: Pass double by value
2023-07-12 18:12:08 +02:00
Jonas Kvinge
8945602eae
Song: Add missing newlines between functions
2023-07-12 18:11:43 +02:00
Jonas Kvinge
7826f77425
Formatting
2023-07-12 16:27:59 +02:00
Jonas Kvinge
00372e85c5
FilterParser: Silence double / float warning
2023-07-12 16:27:28 +02:00
Jonas Kvinge
a1ffc5c33b
ebur128analysis: Rename dsc variable
2023-07-12 16:26:39 +02:00
Jonas Kvinge
8a44a41abb
ebur128analysis: Initialize variables to silence warnings
2023-07-12 16:26:17 +02:00
Jonas Kvinge
23f0c56eba
Song: Move ebur128 functions
2023-07-12 16:23:27 +02:00
Jonas Kvinge
3d25863ccb
CollectionWatcher: Make PerformEBUR128Analysis const
2023-07-12 16:22:17 +02:00
Roman Lebedev
4bd993b1e3
GstEngine/GstEnginePipeline: support gap-less playback w/ loudness-normalizing gain
...
Ok, it does appear that it is that simple.
In principle this (even the non-update case) results in volume jumps,
so maybe we'll want gradual gain change...
Notably, i thought we'd always seek if the pipeline
was already operating on the same URL as the new one,
but apparently only for adjacent songs?
2023-07-12 14:34:04 +02:00
Roman Lebedev
f81816b0cd
EBUR128Analysis: handle channel map
...
Loudness measurement is channel-dependent.
This perhaps matters most for mono audio.
2023-07-12 14:34:04 +02:00
Roman Lebedev
94ab788032
GstEnginePipeline: actually perform (EBU R 128) loudness normalization
...
The magic: if EBU R 128 loudness normalization is enabled,
just insert `volume` GST element into the pipeline
(where ReplayGain would be inserted) and configure it.
We currently don't support changing said gain after the pipeline
was created. We might need to, though, for a number of reasons.
2023-07-12 14:34:04 +02:00
Roman Lebedev
e3a333564a
`GstEngine::Load()`: different loudness-normalizing gain means new pipeline
...
This is a bit of a gotcha, there should be a point (where we seek?)
where we'd be able to change said gain, but for now this is a simple[r]
stop-gap fix.
2023-07-12 14:34:04 +02:00
Roman Lebedev
13d6cf201f
Engine: pipe-in the EBU R 128 loudness normalization gain stuff
...
The idea is that Integrated Loudness is an integral part
of the song, much like knowing it's beginning / ending
in the file, and we must handle it the exact same way,
and pipe it through all the way.
At the same time, `EngineBase` knows Target Level (from settings),
and these two combined tell us the Gain needed to normalize the
Loudness of the particular Song (`EngineBase::Load()` does that).
So the actual backend only needs to handle the Volume.
We don't currently support changing Target Level on the fly.
We don't currently support changing Loudness-normalizing Gain on the fly.
This does not handle the case when the song is loaded from URL
and thus the EBU R 128 measures, that exist, are not nessesairly correct.
2023-07-12 14:34:04 +02:00
Roman Lebedev
40ef3191fc
`EBUR128Analysis`: place a `queue` before `appsink`
...
This improves the performance of the analysis (by 2x!),
by offloading non-`libebur128`-computations (i.e. decode-convert)
to a separate thread, thus reducing walltime.
2023-07-12 14:34:04 +02:00
Roman Lebedev
bda2b91c92
Collectionwatcher: sink `PerformEBUR128Analysis()` into `ScanNewFile` & friends
2023-07-12 14:34:04 +02:00
Roman Lebedev
1462bfa297
CollectionWatcher: support EBU R 128 analysis
...
Again, somewhat pretty similar to the existing fingerprint analysis,
we must support performing it both for the new files,
and re-performing it on (some of) already-existing songs,
because it might have been disabled before.
Admittedly, i quite don't like some of this code,
maybe this can be done in a more concise way.
NOTE: this only supports scanning each separate songs.
Should we ever want to support per-album loudness normalization,
this will need massive changes...
2023-07-12 14:34:04 +02:00
Roman Lebedev
bafcb97fa1
Implement `EBUR128Analysis`
...
The most juicy bit!
This is based on Song Fingerprint Analysis,
but here we must know the actual song, and not just the file.
The library supports only interleaved S16/S32/F32/F64,
so we must be sure we insert `audioconvert` into pipeline.
One point of contention here for me, is whether we should
feed the frames to the library the moment we get them
in `NewBufferCallback`, or collect them in a buffer
and pass them all at once. I've gone with the former,
because it seems like that is not the worst choice:
https://github.com/strawberrymusicplayer/strawberry/pull/1216#issuecomment-1610075876
In principle, the analysis *could* fail,
so we want to handle that gracefully.
2023-07-12 14:34:04 +02:00
Roman Lebedev
f905676b1c
CollectionBackend/CollectionWatcher: add `HasSongsWithMissingLoudnessCharacteristics` logic
...
Exactly identical to the "missing fingerprint" logic,
just for the two new fields being added.
2023-07-12 14:34:04 +02:00
Roman Lebedev
0ea81b13b9
BackendSettingsPage: add "EBU R 128 loudness normalization"-related settings
...
Change `Use Replay Gain metadata if it is available` checkbox
into a radio button and add button to disable any loudness normalization.
Add second group(+radio button), for EBU R 128 loudness normalization.
There is only one tunable: Target Level,
defaulting to EBU R 128-recommended `-23 LUFS`.
Care should be taken when changing Target Level!
You probably don't want to go outside of `-30..-16` range!
At least as implemented, there is only support for per-song normalization,
i.e. no per-album normalization.
We do not do anything with loudness range,
although i have some further thoughts about compression.
We do not do anything about clipping / peak level.
NOTE: we do not need `libebur128` to *perform* the audio normalization,
only for the initial analysis.
Co-authored-by: Jonas Kvinge <jonas@jkvinge.net>
2023-07-12 14:34:04 +02:00
Roman Lebedev
9a7949297e
CollectionSettingsPage: add option to toggle `libebur128`-based song analysis
...
Much like song fingerprinting, performing EBU R 128 analysis is optional.
If you will want to enable EBU R 128 loudness normalization
(which does not depend on the presence of `libebur128`!)
you will probably want to enable it, but it is not enabled by default.
There will be support for rescanning songs for which it is missing.
2023-07-12 14:34:04 +02:00
Roman Lebedev
29342fa9ac
CMake: when optional component `EBUR128` is detected, link to `libebur128`
2023-07-12 14:34:04 +02:00
Roman Lebedev
b2c66c9cda
Playlist: add newly-added columns
...
Still mostly boilter-plate-y. It is somewhat interesting to see that info
in playlist view, so add the two fileds as columns.
At least for Integrated loudness, since it's normally negative,
we need to add a specialized Delegate.
2023-07-12 14:34:04 +02:00
Roman Lebedev
44e5c32bcb
ContextView: show newly-added fields
...
And still very boilerplate-y, same as in previous change,
just show the two new Song fields in `Context` view.
2023-07-12 14:34:04 +02:00
Roman Lebedev
e7fc4e7f89
EditTagDialog: show newly-added fields (read-only)
...
Still very boilerplate-y. Add two placeholders to the UI
(in the middle of the existing table, so the diff is a mess),
and populate them with data.
2023-07-12 14:34:04 +02:00
Roman Lebedev
e589486907
Song: add pretty-printers for EBU R 128 Integrated Loudness and Loudness Range fields
...
They end up being used in a quite a number of places later on,
it makes sense to have them in a common place.
Integrated Loudness (LUFS) is *usually* negative, so we really want to
always print a sign. But Loudness Range is non-negative.
I think it makes sense to print one or at most two decimal places for these.
2023-07-12 14:34:04 +02:00
Roman Lebedev
459c4c5d86
Song: add EBU R 128 Integrated Loudness and Loudness Range fields, DB [de]serialization
...
Again, pretty boring boilerplate, rather identical to the handling of
other fields. We do need to be careful when [de]serializing it, though,
we don't want to accidentally loose the `NULL` (i.e. unknown) state!
2023-07-12 14:34:04 +02:00
Roman Lebedev
73c56f038e
SqlQuery: add `BindDoubleOrNullValue()` method
...
To facilitate serializing of the two DB fields added by the previous change.
2023-07-12 14:34:04 +02:00
Roman Lebedev
0a4888f861
Database scheme: add EBU R 128 Integrated Loudness and Loudness Range columns
...
Nothing really ground-breaking, just add those two fields
to each table that already has `bitrate`/`samplerate`/`bitdepth` fields.
Those new fields do need to be able to represent an invalid state
which is their default state, thus they are non-`NOT NULL`.
In principle, the actual field type could be `INTEGER`
(i.e. fixed point w/ 2 fractional digits), but unless we really want to
save a few bytes, it doesn't seem worthwhile.
FIXME: i'm not sure if `device-schema` should be changed too.
2023-07-12 14:34:04 +02:00
Strawbs Bot
0a26c295a0
Update translations
2023-07-02 14:10:05 +02:00
Jonas Kvinge
e66651a4cb
Song: Remove unused application include
2023-07-02 00:29:30 +02:00
Jonas Kvinge
1d9a052870
AlbumCoverChoiceController: Move result declaration
2023-07-02 00:29:19 +02:00
Jonas Kvinge
fa04eb67db
Convert old embedded and unset art in the new schema
2023-06-29 20:21:50 +02:00
Jonas Kvinge
5f4d6dffef
AlbumCoverLoader: Fix loading existing album covers from disk
2023-06-29 00:44:00 +02:00
Jonas Kvinge
b9c7510946
AlbumCoverLoader: Fix Handling default image in finish task
2023-06-28 23:52:39 +02:00
Jonas Kvinge
e690be1bdd
DeviceDatabaseBackend: Fix device schema version mismatch
...
schema_version in device-schema.sql is 4.
2023-06-26 20:06:11 +02:00
Jonas Kvinge
6ed5190276
Remove AudD lyrics
2023-06-25 01:14:12 +02:00
Jonas Kvinge
354b55cbbc
Use QFileInfo::path instead of QUrl::RemoveFilename
2023-06-15 21:06:18 +02:00
Jonas Kvinge
b87a950357
CoverUtils: Only create path if it doesn't exist
2023-06-15 21:04:11 +02:00
Jonas Kvinge
950c236720
AlbumCoverManager: Fix clear and unset actions
2023-06-15 20:35:41 +02:00
Jonas Kvinge
32982be4f2
EditTagDialog: Allow clearing unset cover
2023-06-15 20:34:03 +02:00
Jonas Kvinge
f467331934
Add ifdefs around #pragma GCC diagnostic
2023-06-15 20:10:25 +02:00
Dakes
1deacaecf9
FilterParser: Add ability to filter by rating
...
Playlists can now be filtered by the rating from 0-5 like:
rating:0 rating:<3 rating:!=0
or by a float value, like:
rating:f0.1 rating:>=f0.5
2023-06-09 21:31:15 +02:00
Jonas Kvinge
b0849d21f3
TidalStreamURLRequest: Ignore different track ID
2023-06-08 17:36:24 +02:00
Jonas Kvinge
5b60ea8e77
MainWindow: Remove F2 from edit tag shortcut
...
Fixes #1210
2023-06-07 19:38:59 +02:00
Jonas Kvinge
6d55eb5974
CollectionModel: Fix icon disk cache
2023-06-07 00:51:53 +02:00