title
Products            Buy            Support Forum            Professional            About            Codec Central
 

Using DBPoweramp as an External Encoder in JRiver Media Center 29

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • AudibleImagery

    • Aug 2020
    • 47

    Using DBPoweramp as an External Encoder in JRiver Media Center 29

    Hello all,

    My operating system is MacOS Monterey 12.4 and I'm running dBpoweramp Music Converter Release 17.7 (2).

    I'm trying to consolidate my workflow between DBPoweramp and JRiver Media Center 29 (JRMC) and the next step in that process is to configure JRMC to use my default lossless batch converter from DBPoweramp as an external encoder but I have a lot of questions regarding this process.

    Although there's a little bit more under the hood than this photo suggests, my default lossless batch converter currently looks like this:

    Click image for larger version

Name:	Screen Shot 2022-06-20 at 01.55.39.jpg
Views:	1
Size:	67.0 KB
ID:	297739

    and so far my JRMC external encoder's settings currently look something like this:

    Click image for larger version

Name:	Screen Shot 2022-06-20 at 02.27.54.jpg
Views:	1
Size:	85.4 KB
ID:	297742

    I've done some research on the topic of using DBPoweramp as an external encoder in JRMC which unfortunately has only brought up questions for me. In this article about command line encoding for PC with DBPoweramp, an .exe called CoreConverter.exe is mentioned as an ".exe path" but I haven't been able to find CoreConverter.app on my Mac and so instead I set the external encoder path as "dBpoweramp Music Converter.app". Is this the correct path that I need?

    I've also started writing the "Parameters" which I pieced together from old posts about this topic as well as my saved .dspeffect files (I can't run regedit.exe as per the command line article) and so my Parameters currently look like this:

    -infile=%IN -outfile%OUT -convert_to="FLAC" -dspeffect1="Trim Silence=-dbsilence={qt}-80{qt} -threshold={qt}1{qt}" -dspeffect2="ID Tag Processing=-add0={qt}Comment=DBPoweramp{qt} -exportart={qt}(none){qt} -importart={qt}(none){qt} -maxart={qt}(any){qt} -maxartkb={qt}(any){qt} -removemonthdayfromyear -charreplacement={qt}(Disc 1){_RET_}(Disc One){_RET_}(Disc 2){_RET_}(Disc Two){_RET_}(Disc 3){_RET_}(Disc Three){_RET_}(Disc 4){_RET_}(Disc Four){_RET_}(Disc 5){_RET_}(Disc Five){_RET_}(Disc 6){_RET_}(Disc Six){_RET_}(Disc 7){_RET_}(Disc Seven){_RET_}(Disc 8){_RET_}(Disc Eight){_RET_}(Disc 9){_RET_}(Disc Nine){_RET_}(Disc 10){_RET_}(Disc Ten){_RET_}(Disc 11){_RET_}(Disc Eleven){_RET_}(Disc 12){_RET_}(Disc Twelve){_RET_}(Disc 13){_RET_}(Disc Thirteen){_RET_}(Disc 14){_RET_}(Disc Fourteen){_RET_}(Disc 15){_RET_}(Disc Fifteen){qt} -rulemap={qt}IF genre=Hip-Hop/Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Hip Hop/Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Hard Rock{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Electro{_RET_}Set genre=Electronic{_RET_}{_RET_}IF Genre={_RET_}Set Genre=Unknown{_RET_}{_RET_}IF Album Artist={_RET_}Set Album Artist=[artist]{_RET_}{_RET_}IF genre=House{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Techno{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Ambient{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Rap/Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Rap/Hip-Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Hip-Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Alternative & Indie{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Alternative{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Smooth Jazz{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Jazz/Bop{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Bop{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Soundtrack{_RET_}Set genre=Unknown{qt}"
    My question regarding this is how do I specify within these parameters that I want to encode lossless files as FLAC files with encoding level 6 and to verify the written audio after encoding (like in my first screenshot)? On a side note, how can I determine the encoding level of a FLAC file? Does it matter if the lossless conversion occurs before or after my DSP effects? Am I missing anything in JRMC's external encoder settings such as under "Extension:" or "Bitrate:"? JRMC seems to require a value under "Extension:" and so is "-convert_to="FLAC"" under "Parameters" even necessary? Please help me! So far all of my combinations and attempts in JRMC have resulted in failed conversions.

    I'm sorry in advance for my obvious computer illiteracy and incompetence but I'm really trying here. I hope that this thread serves as a useful resource for some other poor lost soul in the future.

    Regards,
    John
    Attached Files
  • AudibleImagery

    • Aug 2020
    • 47

    #2
    Re: Using DBPoweramp as an External Encoder in JRiver Media Center 29

    Originally posted by simbun
    It's not obvious from your post whether the conversions you're applying are going to be on a copy of your music, so thought I'd mention it just in case. Trimming silence from your tracks will mean you no longer have a bit perfect copy of your music, and means that most of the taggers will no longer recognise the tracks (as they rely on the track lengths), only the taggers using acoustic fingerprinting will/should work. It also means that your files will no longer verify against accurateRip/CTDB.

    If you're mainly looking to remove silence from "hidden" tracks (a track comprising of a song from the track list separated by silence followed by another track that's not on the track list) then there are better ways, although they are manual.

    If you have a master copy for archival purposes, or you just don't care, then that's good too :-)
    The conversions I'm trying to accomplish will be applied to every lossless file I add to my library (mostly for the trim function) but I won't have copies of the originals. The trimming is intended to standardize the gaps between the songs in my 130,000+ song library so that I don't have varying lengths between every song (I manually set the gaps to .3 seconds during live playback). Other than the trim effect, the audio waveforms remain unchanged because I process other DSP effects during live playback such as volume leveling, peak level normalization, etc and I never run the trim function (much less any encoding) on lossy files. I could care less if the audio isn't identical to a specific CD version either for a number of reasons: the track lengths and masterings for tracks from an album can vary across pressings, I'm not sharing the music, JRiver can handle most heavy lifting with respect to tagging, and after my initial conversion I touch up the tagging by myself anyways, including the specific catalog numbers for most albums. My focus is more on finding the best masters over the course of time through process of elimination as well as making the audio sound as good as possible during shuffling which is my preferred way of listening to my audio library (as opposed to listening to CDs front-to-back).

    I don't think removing three seconds of inaudible silence from the beginning/end of tracks is going to make the audio files not bit perfect. My understanding of bit perfect audio is that it remains bit perfect as long as you don't change the sample rate, bit depth, or channels and I keep stereo/mono files up to 24/192 and so I have no need to change those values anyways. I do split hidden tracks from other tracks with Ableton Live 11 and then I use DBPoweramp's trim tool to remove the silence to excellent results. Ableton's waveforms aren't as reliable as what a powerful encoder like DBPoweramp is capable of and so I think DBPoweramp is more accurate than removing the silence in Ableton by hand, not to mention that it's a huge pain in the ass to do so. I'm a purist as far as bit perfect files go but I could care less about true bit perfect playback because I'm a strong believer in certain live DSP functions such as volume leveling and room correction. If anything, the trim function results in a slightly more accurate audio analysis and playback of the actual music (considering that long silences don't color the audio analysis values that I use).
    Last edited by AudibleImagery; June 21, 2022, 02:18 AM.

    Comment

    • PeterP
      Super Moderator
      • Jul 2011
      • 1464

      #3
      Re: Using DBPoweramp as an External Encoder in JRiver Media Center 29

      Long explanation coming up.

      CoreConverter.exe doesn't exist on Mac - Mac version of dBpoweramp is a single monolithic program including all the codecs and tools.

      It does create additional processes of itself for each conversion job, similar to how Windows dBpoweramp launches CoreConverter.exe program.

      By design, conversion parameters can be passed via commandline, or via dbcmd file, with just -dbcmd=/path/to/dbcmd in commandline arguments (valid for both Mac and Windows).
      The dbcmd file is expected to hold wchar_t text, so don't actually try it because it's not worth the trouble, and the payload format is different between Windows and Mac for reasons I won't go into.

      Now, there is a slight glitch in dBpoweramp Mac, it always tries to read dbcmd file even if not handed one, which is not a problem if invoked from dBpoweramp app but prevents exactly what you're trying to do from working.

      I have just fixed this in R17.8 beta 3-
      Current version: R17.8 beta 8 Download: https://www.dbpoweramp.com/beta/DMC-R178b8.dmg Changes since R17.7: Apple Lossless decoding overflow fix. Fixed pregap detection feature of CD Ripper not working on recent Mac OS versions. Changes in beta 2: CD Ripper: Fixed spurious dropdown list entries in metadata table. CD


      To perform CoreConverter.exe style tasks, in terminal:
      Code:
      /Applications/dBpoweramp\ Music\ Converter.app/Contents/MacOS/dBpoweramp\ Music\ Converter -coreconverter -infile="/path/to/myfile" -outfile="/path/to/newfile" -conver_to="someformat" -put-more-args-here"
      Basically treat the program binary inside the .app bundle (not the .app itself!) as a commandline program, specify -coreconverter to invoke its CoreConverter subroutines.

      To figure out what arguments you want, in Finder, Go To (cmd+shift+G) ~/Library/dBpoweramp, open XRegistry in your text editor of choice. You'll find equivalent of dBpoweramp Windows registry settings there. Just don't alter it by yourself, as that could cause dBpoweramp to lose settings should it have problems reading this file.

      Another way to figure out the arguments is to open dBpoweramp configuration, Diagnostics tab, turn on "write debug logs", then run a sample conversion with the parameters you want and copy relevant bits from the debug log - just don't include stuff like evtpause, evtquit or batchid.
      Last edited by PeterP; June 22, 2022, 06:46 AM. Reason: typos fixed

      Comment

      • AudibleImagery

        • Aug 2020
        • 47

        #4
        Re: Using DBPoweramp as an External Encoder in JRiver Media Center 29

        Originally posted by simbun
        Ok so you do add some back, I did think the transition between songs would be quite jarring without any gaps at all, but how do you prevent adding gaps where there shouldn't be any e.g. Concerts, Classical works, Mixed CDs?
        Yeah I have an option that allows me to add gaps between tracks and so I set a standard gap of .3 seconds. For stuff you're referring to that should have gaps I use JRiver's "Link" function to group tracks together whenever necessary, such as mix CDs.

        You're right, you should have everything that's audible bit perfect, it just won't be a bit perfect copy of the CD, so you'll never be able to verify (post rip) that what you have is a particular CD/pressing/master.
        This isn't a huge issue for me because I already know the catalogue number for pretty much everything I add except for digital stuff.

        I did experiment with ffmpeg to identify the gaps, but unfortunately it wasn't as robust as Audacity's Silence Finder, so I use that to identify the timecodes and then use sox to perform the splitting, as I want to keep all of the audio (so it can be verified) but in separate files (I then exclude the silent "track" from my player).
        I'm not familiar with Audacity's silence finder so I'll have to look into that because it sounds promising. How do you use sox to perform the splitting? Also, random question, do you know if there's a way to split tracks using waveform values? JRiver generates a waveform tag that quantizes the waveform into a number value and if you understand how to read the waveform you can easily identify silences this way. I've read the waveform to find silences before but I was thinking that if you could split the waveforms using the numbers you could get a precise split and never have to worry about accidentally clipping content.

        Comment

        • AudibleImagery

          • Aug 2020
          • 47

          #5
          Re: Using DBPoweramp as an External Encoder in JRiver Media Center 29

          First of all, Peter, thank you so much for the exceptional effort you put toward this topic. I work with a few people on creating complete catalogues for specific artists and I'm always raving about DBPoweramp to them. It, and the support I've received, is far and away the best for audio conversion software.

          You lost me right about here:

          To perform CoreConverter.exe style tasks, in terminal:
          Code:
          /Applications/dBpoweramp\ Music\ Converter.app/Contents/MacOS/dBpoweramp\ Music\ Converter -coreconverter -infile="/path/to/myfile" -outfile="/path/to/newfile" -conver_to="someformat" -put-more-args-here"
          Could this be inputted into JRiver's external encoder then (which looks like this)?:

          Click image for larger version

Name:	Screen Shot 2022-10-18 at 18.47.01.jpg
Views:	1
Size:	83.5 KB
ID:	294615

          I think the answer is yes so I've started writing the code but I have some questions. What do I put as the external encoder path in JRiver? I figured it might be "/Applications/dBpoweramp\ Music\ Converter.app/Contents/MacOS/dBpoweramp\ Music\ Converter" but that isn't working. Do I need to target the Music Converter.app and if so how do I do that? If I want the infile and outfile to be the source file's original location (and folder) then how do I write that (or should I exclude the infile and outfile given the following JRiver options)? Do these mandatory options of JRiver's for the external encoder conflict with DBPoweramp's infile and outfile code (specifically the JRiver settings highlighted in red boxes)?:

          Click image for larger version

Name:	Screen Shot 2022-10-18 at 19.27.16.jpg
Views:	1
Size:	80.2 KB
ID:	294616

          Here is what the code currently looks like:
          Code:
          /Applications/dBpoweramp\ Music\ Converter.app/Contents/MacOS/dBpoweramp\ Music\ Converter -coreconverter -infile="/path/to/myfile" -outfile="/path/to/newfile" -convert_to="FLAC" -dspeffect1="Trim Silence=-dbsilence={qt}-80{qt} -threshold={qt}1{qt}" -dspeffect2="ID Tag Processing=-add0={qt}Comment=DBPoweramp{qt} -exportart={qt}(none){qt} -importart={qt}(none){qt} -maxart={qt}(any){qt} -maxartkb={qt}(any){qt} -removemonthdayfromyear -charreplacement={qt}(Disc 1){_RET_}(Disc One){_RET_}(Disc 2){_RET_}(Disc Two){_RET_}(Disc 3){_RET_}(Disc Three){_RET_}(Disc 4){_RET_}(Disc Four){_RET_}(Disc 5){_RET_}(Disc Five){_RET_}(Disc 6){_RET_}(Disc Six){_RET_}(Disc 7){_RET_}(Disc Seven){_RET_}(Disc 8){_RET_}(Disc Eight){_RET_}(Disc 9){_RET_}(Disc Nine){_RET_}(Disc 10){_RET_}(Disc Ten){_RET_}(Disc 11){_RET_}(Disc Eleven){_RET_}(Disc 12){_RET_}(Disc Twelve){_RET_}(Disc 13){_RET_}(Disc Thirteen){_RET_}(Disc 14){_RET_}(Disc Fourteen){_RET_}(Disc 15){_RET_}(Disc Fifteen){qt} -rulemap={qt}IF genre=Hip-Hop/Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Hip Hop/Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Hard Rock{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Electro{_RET_}Set genre=Electronic{_RET_}{_RET_}IF Genre={_RET_}Set Genre=Unknown{_RET_}{_RET_}IF Album Artist={_RET_}Set Album Artist=[artist]{_RET_}{_RET_}IF genre=House{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Techno{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Ambient{_RET_}Set genre=Electronic{_RET_}{_RET_}IF genre=Rap/Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Rap/Hip-Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Hip-Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hardcore Rap{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}If genre=Hip Hop{_RET_}Set genre=Hip-Hop{_RET_}{_RET_}IF genre=Alternative & Indie{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Alternative{_RET_}Set genre=Rock{_RET_}{_RET_}IF genre=Smooth Jazz{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Jazz/Bop{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Bop{_RET_}Set genre=Jazz{_RET_}{_RET_}If genre=Soundtrack{_RET_}Set genre=Unknown{_RET_}{_RET_}If user={_RET_}Set user=New Library{_RET_}{_RET_}If grouping={_RET_}Set grouping=Ungrouped{qt}" -dspeffect3="Delete Source File=-recycle -removeemptyfolders" -compression-level-6 -verify
          I'm going to begin testing and experimenting with some of the code to see if I can get it to work. I'll update this comment with more questions as they come up. Thanks again and I look forward to hearing from you.

          Regards,
          Audible
          Last edited by AudibleImagery; October 19, 2022, 02:14 AM.

          Comment

          Working...

          ]]>