Zsin Skri
c3af5b3763
replaygain: add ffmpeg backend
...
Add replaygain backend using ffmpeg's ebur128 filter.
The album gain is calculated as the mean of all BS.1770 gating block powers.
Besides differences in gating block offset, this should be equivalent to a
BS.1770 analysis of a proper concatenation of all tracks.
Just calculating the mean of all track gains (as implemented by the bs1770gain
backend) yields incorrect results as that would:
- completely ignore track lengths
- just using length in seconds won't work either (e.g. BS.1770 ignores
passages below a threshold)
- take the mean of track loudness, not power
When using the ffmpeg replaygain backend to create R128_*_GAIN tags, the
targetlevel will be set to -23 LUFS. GitHub PullRequest #3065 will make this
configurable.
It will also skip peak calculation, as there is no R128_*_PEAK tag.
It is checked if the libavfilter library supports replaygain calculation. Before
version 6.67.100 that did require the `--enable-libebur128` compile-time-option,
after that the ebur128 library is included in libavfilter itself. Thus we
require either a recent enough libavfilter version or the `--enable-libebur128`
option.
2019-07-19 21:54:47 +02:00
Zsin Skri
7a7314ee3f
Allow other ReplayGain backends to support R128.
...
Previously using EBU R128 forced the use of the bs1770gain backend.
This change adds a whitelist of backends supporting R128. When the configured
backend is in that list it will also be used for R128 calculations. Otherwise
bs1770gain is still used as a default.
This should not change the overall behaviour of the program at all, but allow
for further R128-supporting backends to be added.
2019-07-19 21:54:47 +02:00
Zsin Skri
30395911e2
util.command_output: return stderr, too
...
Return a namedtuple CommandOutput(stdout, stderr) instead of just stdout from
util.command_ouput, allowing separate access to stdout and stderr.
This change is required by the ffmpeg replaygain backend (GitHub
PullRequest #3056 ) as ffmpeg's ebur128 filter outputs only to stderr.
2019-07-14 18:32:59 +02:00
Zsin Skri
f645400c5e
replaygain: adapt to mediafile commit 95e569a
...
Since commit 95e569a, mediafile takes care of the float -> Q7.8 conversion in
R128 GAIN tags by itself.
From `store_album_r128_gain` this conversion was already missing, remove it from
`store_track_r128_gain`, too.
fixes #3311
2019-06-18 23:17:38 +02:00
Adrian Sampson
f865fc00cd
replaygain: Fix py3 crash in audiotools backend
...
Fixes #3305 .
2019-06-08 16:23:49 -04:00
Samuel Nilsson
b8b99d9396
Merge branch 'master' into replaygain
2019-06-08 16:15:27 +02:00
Jack Wilsdon
f09088df43
replaygain: Handle invalid XML output from bs1770gain
2019-05-02 01:24:19 +01:00
Samuel Nilsson
93007bfdd5
ReplayGain: fixed error caused by per_disc option
2019-02-06 13:17:34 +01:00
Samuel Nilsson
24f02cb5cd
ReplayGain refactoring
2019-02-06 10:12:06 +01:00
Samuel Nilsson
31326ebb20
Simplified album ReplayGain code
2019-02-06 10:06:48 +01:00
Samuel Nilsson
d910ed3ecf
Merge branch 'master' of github.com:beetbox/beets into replaygain
2019-02-06 09:27:45 +01:00
Samuel Nilsson
3d842db8d8
Added per disc album_gain support
2019-02-06 09:27:24 +01:00
Jack Wilsdon
768770d561
Fix incorrect indentation
2019-01-31 00:15:42 +00:00
Martin Haaß
a3770686b4
to fix the peak calculation also delete the division
2018-08-20 23:39:34 +02:00
Martin Haaß
f58f03dbfd
replaygain: albumpeak on large collections is calculated as average, not maximum (bug 3008)
2018-08-20 23:06:11 +02:00
Adrian Sampson
7d607b4c5d
Merge pull request #2813 from autrimpo/issue2757
...
Use NullPaddedInt for R128 tags
2018-05-31 10:13:20 -04:00
Cédric Schieli
b9bac391a9
Really fix album replaygain calculation with gstreamer backend.
...
Fixes #2845
2018-03-19 21:09:35 +01:00
Michal Koutenský
8350ed6baf
Unique debug messages for R128 functions
2018-02-18 20:09:58 +01:00
Adrian Sampson
b28e0b43ff
Merge pull request #2778 from ylep/replaygain-options
...
Add --force, --write and --nowrite options to replaygain plugin
2018-01-02 14:50:27 -05:00
Yann Leprince
499cd378b7
fix the default write behaviour to the importer configuration
2018-01-02 12:11:47 +01:00
Yann Leprince
3ef4b70439
Fix coding style
2017-12-31 14:51:14 +01:00
Yann Leprince
1f6335581e
Add --force, --write and --nowrite options to replaygain plugin
2017-12-31 12:00:02 +01:00
Yann Leprince
05775ccac6
Fix fragile parsing of bs1770gain output
...
bs1770gain is sorting the filenames internally, so in some corner cases it returns the results in a different order from the command-line arguments.
This patch uses the --xml option of bs1770gain (introduced in 0.4.6) in order to read the filenames reliably.
2017-12-31 11:27:42 +01:00
Heinz Wiesinger
bd6645d135
Fix album replaygain calculation with gstreamer backend.
...
Fixes #2636
2017-10-04 20:22:01 +02:00
Michal Koutenský
70a2ad354b
fixes issue #2615
2017-07-04 15:53:02 +02:00
Michal Koutenský
2685f13315
replaygain: support r128
2017-05-17 21:48:01 +02:00
Adrian Sampson
998e6ac1c7
Remove unused import
2017-01-10 14:54:17 -05:00
Adrian Sampson
bc93a11141
Fix #2382 : replaygain backend parsing on Python 3
2017-01-10 14:45:57 -05:00
Adrian Sampson
153b01e5a6
replaygain: Don't muck with logging level
...
This is now handled by the central logging infrastructure; no need to change
it here. I think this must be a leftover from the era when plugins had to
explicitly muck with their verbosity level, but even still it doesn't make
sense to do set the level to INFO unconditionally...
2017-01-10 14:24:18 -05:00
Johnny Robeson
3db656a685
use py3_path on gstreamer location prop setters
...
Location properties require strings, so we give them to them!
2016-09-24 01:16:56 -04:00
Johnny Robeson
7a2bdf502f
s/utf8/utf-8/ in all encoding/decoding contexts
...
This matches up with the python documentation.
2016-09-06 23:10:24 -04:00
Johnny Robeson
6bedbd84df
removebyte conversion/literals for command args
...
Paths are obviously untouched.
We definitely don't need these as they are entirely ascii.
2016-08-25 03:37:30 -04:00
Johnny Robeson
fb78830788
fix incorrect bytes() usages in replaygain
...
We encode the method and gain offset values to ascii.
2016-08-09 05:17:53 -04:00
Adrian Sampson
5e3bbf2aeb
Remove remaining links to Google Code ( fix #2145 )
2016-07-27 13:32:41 -04:00
Johnny Robeson
c9c37a8f79
adding missing b' to command name checks in replaygain
2016-07-07 03:44:19 -04:00
Adrian Sampson
5efd5b21c5
Use new as_str method
...
Instead of `get(six.text_type)`, which was a surprisingly large portion of our
uses of six.
2016-06-25 19:16:14 -07:00
Johnny Robeson
e8afcbe7ec
replace unicode with six.text_type
2016-06-24 05:53:49 -04:00
Johnny Robeson
31cca684f2
replace itertools.izip with zip from six.moves
2016-06-23 04:40:18 -04:00
Adrian Sampson
351b6f8c9d
Remove raw Unicode literals ( fix #2069 )
...
PEP 414 didn't add `ur"..."` literals to Python 3. So for hybrid 2/3
compatibility, these had to be replaced with ordinary Unicode string literals.
This was only painful for one string; the others were only raw strings by
convention. (All were regexes.)
2016-06-21 14:29:14 -07:00
Johnny Robeson
0f4b907ff5
wrap filter()s in a list() in replaygain plugin
2016-06-14 00:28:46 -04:00
pszxzsd
8dcd50b18f
make bs1770gain calculate sample peak instead of true peak
2016-06-01 20:00:08 +02:00
Johnny Robeson
e6ab231f72
Revert "Remove bytes casting for non-path command args/opts"
...
This reverts commit 2a6e74bc27 .
2016-05-30 22:00:42 -04:00
Johnny Robeson
2a6e74bc27
Remove bytes casting for non-path command args/opts
2016-05-30 21:42:44 -04:00
Adrian Sampson
eac7d64545
Merge branch 'master' into no_unicode_literals
2016-02-28 15:21:43 -08:00
Adrian Sampson
e54c7eec3d
Standardize __future__ imports without parentheses
...
Since the list is short enough now, we don't need parentheses for the line
wrap. This is a little less ugly.
2016-02-28 15:03:51 -08:00
Adrian Sampson
d53019f9db
Further whitespace fiddling
...
Most commonly, this sticks with:
log.debug(
'some long message here'
)
instead of placing the closing ) at the end of the string literal.
2016-02-28 14:48:10 -08:00
Peter Kessen
456565b6f2
Removed import of unicode_literals from plugins
...
* play
* plexpudate
* random
* replaygain
2016-02-20 14:22:45 +01:00
Adrian Sampson
314521b6ae
replaygain: Fix obvious typo ( fix #1873 , I hope)
2016-02-07 14:28:33 -08:00
Adrian Sampson
0aea7e398b
replaygain: Handle missing GStreamer data ( #1855 )
2016-02-02 08:08:58 -08:00
Diego Moreda
76d7c65c1b
replaygain: refine test by subclassing exception
...
* Subclass FatalReplayGainError into FatalGstreamerPluginReplayGainError
in order to handle gstreamer plugin errors more cleanly on
test_replaygain.
2016-01-26 22:20:42 +01:00
Jack Wilsdon
12cd5306b7
Update copyright dates to 2016
2015-12-30 15:42:06 +00:00
Adrian Sampson
b25b4db9e1
replaygain: Dodge possible encoding issues
...
In error reporting. May avoid the error in #1774 , but it's hard to find out
exactly what the Python types of these arguments are from the GStreamer
documentation.
2015-12-26 22:40:13 -08:00
Peter Kessen
3eb8008b11
added encoding as comment in files
...
added line like
# -*- coding: utf-8 -*-
to all files with correct license in header
2015-11-19 18:41:01 +01:00
Adrian Sampson
9f7aa866bd
Use ui.should_write everywhere
...
There sure are a lot of plugins that want to write metadata!
2015-11-07 13:20:09 -08:00
Adrian Sampson
16ad174d29
A debug message for ReplayGain
2015-10-29 17:43:31 -04:00
Adrian Sampson
225ba282cd
Fix #1592 again: wrap title_gain in handler
2015-09-08 12:07:03 -07:00
Adrian Sampson
2140bb27a3
Fix #1592 : unhandled exception in PyAudioTools
2015-09-07 14:15:46 -07:00
Adrian Sampson
493fbab1a5
replaygain: Fix #1518 , GStreamer missing plugins
2015-07-06 16:23:04 -07:00
jmwatte
c834599b42
fix regex
2015-04-13 10:46:47 +02:00
Adrian Sampson
7372ad4831
replaygain: Log bs1770gain invocations
...
For clearer debugging in #1398 .
2015-04-12 23:01:44 -07:00
Adrian Sampson
ab78eed02e
replaygain: Avoid suppressing debug output ( #1398 )
...
This was suppressing debug output even with `beet -vv import`. This also avoid
registering an import hook when auto is disabled.
2015-04-12 22:59:48 -07:00
Adrian Sampson
9c7b8d22ca
Catch empty output list in bs1770gain ( fix #1398 )
...
This should catch the original crash that brought this all up.
2015-04-10 09:01:13 -07:00
Adrian Sampson
6fcd88bc31
More precise comment for #1398
2015-04-10 08:53:54 -07:00
jmwatte
7128340385
fix no-PREFIX for long window-paths
2015-04-10 09:26:56 +02:00
Adrian Sampson
821c5bf3df
Documentation pass for #1398
2015-04-09 17:06:35 -07:00
Adrian Sampson
ecb65a5a4a
Idiomatic configuration defaults ( #1398 )
...
Paging @jmwatte: `config.add` is the standard way to specify defaults for
configuration options.
2015-04-09 16:55:18 -07:00
jmwatte
51cfde4e9d
fix bs1770gain for windows and exceptionally big albums
2015-04-09 18:48:37 +02:00
jmwatte
7ac6ba53ff
fix bs1770gain for windows and exceptionally big albums
2015-04-09 18:02:32 +02:00
jmwatte
f1f7094938
fix bs1770gain for windows and exceptionally big albums
2015-04-09 17:18:26 +02:00
Adrian Sampson
736eab412c
Bytes arguments to bs1770gain command
2015-03-14 14:43:00 -07:00
Bruno Cauet
58b39f1000
Merge branch 'master' into subcommand-auto-format-path
2015-03-05 17:53:31 +01:00
Bruno Cauet
650305c9a1
All suitable plugins use CommonOptionsParser features
2015-03-05 17:03:02 +01:00
Bruno Cauet
9750351a1b
beets.util.command_output() & related receives bytes
...
- May fail with unicode, esp. will non-ascii system path entry.
- Only send it bytes.
- Also applies to subprocess.Popen() & co.
2015-03-04 15:15:46 +01:00
Adrian Sampson
8113c7ba85
Roll back whitespace changes from #1343
2015-03-03 10:41:30 -08:00
jmwatte
5d7d402adb
correct typing error
2015-03-03 13:11:25 +01:00
jean-marie winters
a3e32fd410
added fatalreplaygainerror
2015-03-03 11:23:45 +01:00
jean-marie winters
80c49ab360
removed line 288
2015-03-03 11:04:03 +01:00
jean-marie winters
0d49c830d8
just an updateMerge remote-tracking branch 'upstream/master'
2015-03-03 10:49:35 +01:00
jean-marie winters
5bc8ef7009
fix some formating
2015-03-02 22:11:33 +01:00
Adrian Sampson
8bd0633496
replaygain: Fix super call in AudioTools
...
Fix #1342 .
2015-03-02 11:30:14 -08:00
jean-marie winters
1416846283
Merge branch 'bs1770gainsupport'
...
Conflicts:
beetsplug/replaygain.py
2015-03-02 16:34:46 +01:00
jean-marie winters
72c5db8876
add doc, clean-up code
2015-03-02 15:38:33 +01:00
jean-marie winters
1385ce11ca
Added support for bs1770gain, a loudness-scanner
2015-02-28 15:35:48 +01:00
Arturo R
60b1819db0
Stop applying mp3gain directly to files. Fixes #1316
...
Update docs to remove non-existent `apply` option.
2015-02-09 12:51:27 -08:00
Adrian Sampson
b8dab9cf9f
Merge pull request #1247 from brunal/future
...
Use all __future__ imports in beets core
Conflicts:
beetsplug/web/__init__.py
test/test_embedart.py
2015-01-26 17:02:07 -08:00
Bruno Cauet
8165dec985
Delete manual formattings of album & item
2015-01-25 21:32:22 +01:00
Bruno Cauet
a5026100a3
All plugins use unicode_literals
...
Given that part of them has no test I may have broke them
2015-01-20 16:22:27 +01:00
Bruno Cauet
02d8e88ef1
Replace all mentions of 'str' with 'bytes'
2015-01-20 12:48:15 +01:00
Bruno Cauet
90b388b775
Use __future__ imports but unicode_literals everywhere
...
Include import of __future__ features division, absolute_imports and
print_function everywhere. Don't add unicode_literals yet for it is
harder to convert.
Goal is smoothing the transition to python 3.
2015-01-19 12:25:16 +01:00
Bruno Cauet
0c3675ada0
Fix replaygain: add 'log' to __init__ parameters
2015-01-14 16:17:20 +01:00
Adrian Sampson
24317fd4c7
Rename BeetsPlugin._import_stages to import_stages
...
For #1208 . Restores backwards-compatibility and matches the development docs.
2015-01-11 14:27:59 -08:00
Bruno Cauet
b27c5304d1
Merge branch 'master' into logging
...
Conflicts:
beetsplug/fetchart.py
beetsplug/mpdstats.py
2015-01-09 15:15:27 +01:00
Frederik “Freso” S. Olesen
4b1f0cbf48
Happy 2015. ;)
...
See 7a410f636b
Command used:
git grep -l 'Copyright 201'|xargs sed -i -E 's/Copyright 201./Copyright 2015/'`
2015-01-08 21:37:09 +01:00
Bruno Cauet
422a7f6063
replaygain: fix backend instanciation
2015-01-06 22:13:17 +01:00
Bruno Cauet
7d58a38428
Convert replaygain: pass logger to other classes
...
This time the logger is passed to the other classes of the module, not
to functions.
2015-01-06 21:42:02 +01:00
Bruno Cauet
427f7e7035
Automatic logger level changes on import
...
Breaking changes: plugins should set set _import_stages instead of
import_stages. From outside the latter is replaced by import_stages().
This is because it is now wrapped with log level-getting & -setting
statements.
2015-01-06 21:27:15 +01:00
Bruno Cauet
b8211a3c4c
Every plugin uses its own logger
...
logging.getLogger(__name__) everywhere!
Several loggers prefixed every log message with [logername], which we
delete here.
2015-01-06 10:35:44 +01:00
Bruno Cauet
30f158a95e
Move "from beets import logging" statements
...
Move the import next to other beets-related imports
2015-01-05 10:05:21 +01:00
Bruno Cauet
7df8bef8b7
Update logging imports: logging → beets.logging
2015-01-04 17:02:27 +01:00
Bruno Cauet
8cac47af2a
Convert beets plugins to lazy logging
2015-01-04 17:02:27 +01:00