Hi Gilles, Thanks for that. I managed to find it before you posted which is good because you confirmed that I’ve got the right program.
So, I should now have all I need to make normalisation work with an mp3 stream. I guess I just need to wait for the next bug fix release to see the replay gain resolver at work in the logs an then I will know if it’s really working or not. Cheers guys Damian > On 2 Feb 2019, at 1:31 am, Gilou <contact+...@gilouweb.com> wrote: > > Le 01/02/2019 à 00:35, Damian a écrit : >> Hi, >> >> So I assumed that replay_gain was somehow built in to liquidsoap. I run >> my stream on a Debian9 VPS. Up until recently. I was using mp3gain on my >> Mac locally to normalise the mp3s before uploading them to the server. >> >> As far as I can see mp3gain has been removed from the repositories for >> Debian and Ubuntu because there are no active maintainers. Is this a >> dead end for me in terms of using replay_gain for normalisation on Debian? > > Hi, > > You can have replaygain from apt through python-rgain > (https://packages.debian.org/stretch/python-rgain) or via pypi. > > Regards, > > Gilles > >> >> On 1 Feb 2019, at 06:53, Romain Beauxis <romain.beau...@gmail.com >> <mailto:romain.beau...@gmail.com>> wrote: >> >>> Hey, >>> >>> So, I did a little investigation. At the moment, there isn't much log >>> from the replaygain resolver. I've added that to the latest master branch. >>> >>> One thing you might want to make sure is that you have one of the >>> actual program for extracting that data available. These are: mp3gain, >>> aacgain (latest master), replaygain, metaflac. If you don't have a >>> program available for your file format then replaygain will fail to >>> add its metadata. >>> >>> Romain >>> >>> Le jeu. 31 janv. 2019 à 05:43, Damian <d...@riseup.net >>> <mailto:d...@riseup.net>> a écrit : >>> >>> Thanks gentlemen for the quick reply. >>> >>> Romain, I’ve shifted enable_replaygain_metadata ()to the top of >>> the script and set logging to level 4 as you and Gilles >>> recommended and I see the following. Not sure if the metadata >>> resolver you speak of is visible however. Should there be more? >>> >>> >>> 2019/01/31 21:17:07 [clock:4] Main phase starts. >>> 2019/01/31 21:17:07 [clock.wallclock_main:3] Streaming loop >>> starts, synchronized with wallclock. >>> 2019/01/31 21:17:07 [samples:4] Remaining: 0.0s, queued: 0.0s, >>> adding: 30.0s (RID 7) >>> 2019/01/31 21:17:07 [mksafe:3] Switch to amplify_6432. >>> 2019/01/31 21:17:07 [amplify_6432:4] Activations changed: >>> >>> static=[mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1], >>> >>> dynamic=[mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1]. >>> 2019/01/31 21:17:07 [fallback_6430:3] Switch to delay_6428. >>> 2019/01/31 21:17:07 [delay_6428:4] Activations changed: >>> >>> static=[fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1], >>> >>> dynamic=[fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1]. >>> 2019/01/31 21:17:07 [on_metadata_6453:4] Got metadata at position >>> 0: calling handler... >>> 2019/01/31 21:17:07 [decoder:4] Trying method "META" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder:4] Trying method "WAV" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder.wav/aiff:4] Invalid MIME type for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3": application/octet-stream! >>> 2019/01/31 21:17:07 [decoder.wav/aiff:4] Invalid file extension >>> for "/ssr/ssr1/interludes/Kate Interlude.mp3"! >>> 2019/01/31 21:17:07 [decoder:4] Trying method "AIFF" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [audioscrobbler:4] Submiting -- Kate >>> Interlude with mode: submit to post.audioscrobbler.com:80 >>> <http://post.audioscrobbler.com:80> >>> 2019/01/31 21:17:07 [decoder.wav/aiff:4] Invalid MIME type for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3": application/octet-stream! >>> 2019/01/31 21:17:07 [decoder.wav/aiff:4] Invalid file extension >>> for "/ssr/ssr1/interludes/Kate Interlude.mp3"! >>> 2019/01/31 21:17:07 [decoder:4] Trying method "MIDI" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder:4] Trying method "IMAGE" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder:4] Trying method "OGG" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder.ogg:4] Invalid MIME type for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3": application/octet-stream! >>> 2019/01/31 21:17:07 [decoder.ogg:4] Invalid file extension for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"! >>> 2019/01/31 21:17:07 [decoder:4] Trying method "MAD" for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"... >>> 2019/01/31 21:17:07 [decoder.mad:4] Libmad recognizes >>> "/ssr/ssr1/interludes/Kate Interlude.mp3" as mpeg audio (layer >>> III, 128kbps, 44100Hz, 2 channels). >>> 2019/01/31 21:17:07 [decoder:3] Method "MAD" accepted >>> "/ssr/ssr1/interludes/Kate Interlude.mp3". >>> 2019/01/31 21:17:07 [decoder.ogg:4] Invalid MIME type for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3": application/octet-stream! >>> 2019/01/31 21:17:07 [decoder.ogg:4] Invalid file extension for >>> "/ssr/ssr1/interludes/Kate Interlude.mp3"! >>> 2019/01/31 21:17:07 [interludes:4] Remaining: 1.1s, queued: 0.0s, >>> adding: 30.0s (RID 8) >>> 2019/01/31 21:17:09 [decoder:4] Decoding >>> "/ssr/ssr1/interludes/Kate Interlude.mp3" ended: Mad.End_of_stream. >>> 2019/01/31 21:17:09 [interludes:3] Finished with >>> "/ssr/ssr1/interludes/Kate Interlude.mp3". >>> 2019/01/31 21:17:09 [samples:4] Remaining: 0.0s, queued: 30.0s, >>> taking: 30.0s >>> 2019/01/31 21:17:09 [samples:3] Prepared "/ssr/ssr1/samples/The >>> Conet Project - (S13) Count in Russian.mp3" (RID 7). >>> 2019/01/31 21:17:09 [fresh:4] Remaining: 0.0s, queued: 30.0s, >>> taking: 30.0s >>> 2019/01/31 21:17:09 [fresh:3] Prepared "/ssr/ssr1/fresh/Body Boys >>> - Yunnan.mp3" (RID 3). >>> 2019/01/31 21:17:09 [general:4] Remaining: 0.0s, queued: 30.0s, >>> taking: 30.0s >>> 2019/01/31 21:17:09 [general:3] Prepared "/ssr/ssr1/general/Cousin >>> Silas - Coming From Crossland Moor.mp3" (RID 5). >>> 2019/01/31 21:17:09 [fallback_6430:3] Switch to rotate_6426 with >>> forgetful transition. >>> 2019/01/31 21:17:09 [delay_6428:4] Activations changed: static=[], >>> >>> dynamic=[fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1]. >>> 2019/01/31 21:17:09 [rotate_6426:4] Activations changed: >>> >>> static=[fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1], >>> >>> dynamic=[fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1]. >>> 2019/01/31 21:17:09 [rotate_6426:3] Switch to fresh. >>> 2019/01/31 21:17:09 [fresh:4] Activations changed: >>> >>> static=[rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1], >>> >>> dynamic=[rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1, >>> >>> rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1, >>> >>> rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1, >>> >>> rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1, >>> >>> rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1, >>> >>> rotate_6426:fallback_6430:amplify_6432:mksafe:on_metadata_6453:Systrum_Sistum_-_SSR1:Systrum_Sistum_-_SSR1]. >>> 2019/01/31 21:17:09 [on_metadata_6453:4] Got metadata at position >>> 1440: calling handler... >>> 2019/01/31 21:17:09 [audioscrobbler:4] Submiting Body Boys -- >>> Yunnan with mode: submit to post.audioscrobbler.com:80 >>> <http://post.audioscrobbler.com:80> >>> 2019/01/31 21:17:17 [source:4] Garbage collected empty_6510. >>> >>> >>> >>>> On 31 Jan 2019, at 3:29 am, Romain Beauxis >>>> <romain.beau...@gmail.com <mailto:romain.beau...@gmail.com>> wrote: >>>> >>>> Hi all, >>>> >>>> Reading the code, it looks like the call to >>>> enable_replaygain_metadata can be done where ever you want >>>> though it's usually a good practice to put it on top. >>>> >>>> If you increase the log level to 4 you should see the replay gain >>>> metadata resolver in action if it's properly enabled/installed: >>>> set("log.level",4) >>>> >>>> Romain >>>> >>>> Le mer. 30 janv. 2019 à 11:10, Gilles Pietri >>>> <contact+...@gilouweb.com <mailto:contact%2b...@gilouweb.com>> a >>>> écrit : >>>> >>>> Le 30/01/2019 à 12:53, Damian a écrit : >>>>> Hi, >>>>> >>>>> I am running liquidsoap 1.3.6 and I have followed the >>>> instructions for >>>>> applying replay_gain in the docs here >>>>> https://www.liquidsoap.info/doc-1.3.3/replay_gain.html >>>>> I believe that I have added the code for replay_gain >>>> correctly in my >>>>> short script below, but volume is uneven across tracks in >>>> my stream. >>>> >>>> Maybe try calling enable_replaygain_metadata () earlier? >>>> amplify() does log something when it overrides the default as >>>> level 3, e.g.: >>>> >>>> 2019/01/24 07:39:06 [amplify_9135:3] Overriding >>>> amplification: 0.391742. >>>> >>>> >>>>> >>>>> I am also noticing (from the log snippet below) that >>>> ‘amplify’ seems to >>>>> be working, but nothing about ‘overriding’ or ‘replay_gain’. >>>>> Could anyone confirm 1) whether 'overriding amplify' should >>>> be visible >>>>> in the logs and 2) whether replay_gain code is correctly >>>> applied in my >>>>> script (under the ’normalisation’ heading). >>>>> Any help would be greatly appreciated. >>>>> >>>> >>>> Seems to be good. A note though, I got tired of liq / extract >>>> replaygain >>>> to re read the file so many times, so what I do is analyze >>>> all files and >>>> generate a playlist that has the replay_gain annotated, >>>> avoiding the >>>> resolver. >>>> >>>> Cheers >>>> >>>> Gilles >>>> >>>> >>>> >>>> _______________________________________________ >>>> Savonet-users mailing list >>>> Savonet-users@lists.sourceforge.net >>>> <mailto:Savonet-users@lists.sourceforge.net> >>>> https://lists.sourceforge.net/lists/listinfo/savonet-users >>>> >>>> _______________________________________________ >>>> Savonet-users mailing list >>>> Savonet-users@lists.sourceforge.net >>>> <mailto:Savonet-users@lists.sourceforge.net> >>>> https://lists.sourceforge.net/lists/listinfo/savonet-users >>> >>> _______________________________________________ >>> Savonet-users mailing list >>> Savonet-users@lists.sourceforge.net >>> <mailto:Savonet-users@lists.sourceforge.net> >>> https://lists.sourceforge.net/lists/listinfo/savonet-users >>> >>> _______________________________________________ >>> Savonet-users mailing list >>> Savonet-users@lists.sourceforge.net >>> <mailto:Savonet-users@lists.sourceforge.net> >>> https://lists.sourceforge.net/lists/listinfo/savonet-users >> >> >> _______________________________________________ >> Savonet-users mailing list >> Savonet-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/savonet-users >> > > > > _______________________________________________ > Savonet-users mailing list > Savonet-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/savonet-users _______________________________________________ Savonet-users mailing list Savonet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/savonet-users