Roon Extension: CD Ripper v0.6.1 (2022-12-24)

On DietPi the default device, set during extension installation (i.e. /dev/cdrom), should typically work. If there is no drive detected than the device path has to be verified. For this you can follow the instructions that are provided for the CD Entrypoint.

Thanks will give that a go.

Hi @Jan_Koudijs. Before I moan a bit I want to thank you for your extension manager and CD Ripper extension. They are wonderful and fill a hole that Roon was wrong to create.

I am trying to rip a recent release: Taylor Swift Red (Taylor’s Version) from November 2021. The first disk went as expected, it’s the second disk that is giving me trouble. It’s stuck on track three in a verification loop that doesn’t end. Is there a way to solve this issue? I have tried restarting the app on my Mac mini and restarting the service on my server (ubuntu 20.04).

Hi @gefonas,

What I normally do in these cases is cleaning the CD, maybe it has a fingerprint or something.

Ok, I will try that. By the way, it’s a new CD that I lifted from the case to rip - if that makes any difference. Are your methods for cleaning varied? What is suggested?

If the CD did not have any plays then dirt is an unlikely cause. My rips are nowadays all from second hand CDs so then cleaning can be critical. The issue might be something specific for the underlying software that is used by the CD Ripper. Do you have an alternative ripping program for problematic CDs? What I use as a fallback is EAC running in Wine (on ubuntu).

If you can share the extension log files then I can see if I can find a cause for this.

I finally got back to this. I copied a truncated portion of the logs below.

2022-07-14T21:40:31.304826000Z stdout: “Verifying track 3 of 14 (try 4) (3 of 8) 
 98 %”
2022-07-14T21:40:31.304920000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 98 %)”,“is_error”:false}
2022-07-14T21:40:31.304990000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 98 %)”,“is_error”:false}
2022-07-14T21:40:31.356999000Z stdout: “Verifying track 3 of 14 (try 4) (3 of 8) 
 99 %”
2022-07-14T21:40:31.357094000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 99 %)”,“is_error”:false}
2022-07-14T21:40:31.357157000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 99 %)”,“is_error”:false}
2022-07-14T21:40:31.398514000Z stdout: “Verifying track 3 of 14 (try 4) (3 of 8) 
 100 %”
2022-07-14T21:40:31.398601000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 100 %)”,“is_error”:false}
2022-07-14T21:40:31.398675000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 100 %)”,“is_error”:false}
2022-07-14T21:40:31.398736000Z stdout: “Verifying track 3 of 14 (try 4) (3 of 8) 
 0 %
I am doing something. (4 of 8) 
 0 %”
2022-07-14T21:40:31.398897000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 0 %)”,“is_error”:false}
2022-07-14T21:40:31.398967000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac (Verifying: 0 %)”,“is_error”:false}
2022-07-14T21:40:31.562263000Z stdout: “I am doing something. (4 of 8) 
 0 %
Encoding track to FLAC (5 of 8) 
 0 %”
2022-07-14T21:40:32.510197000Z stdout: “Encoding track to FLAC (5 of 8) 
 0 %
I am doing something. (6 of 8) 
 0 %”
2022-07-14T21:40:32.672943000Z stdout: “I am doing something. (6 of 8) 
 0 %
Calculating peak level (7 of 8) 
 0 %”
2022-07-14T21:40:32.879449000Z stdout: “Calculating peak level (7 of 8) 
 0 %
Writing tags to FLAC (8 of 8) 
 0 %”
2022-07-14T21:40:32.880672000Z stderr: “INFO:whipper.program.cdparanoia:checksums do not match, 4392cba8 9ba34b30”
2022-07-14T21:40:32.891145000Z stdout: “Writing tags to FLAC (8 of 8) 
 0 %”
2022-07-14T21:40:32.891465000Z stderr: “INFO:whipper.command.cd:ripping track 3 of 14 (try 5): 03 - Girl at Home (Taylor’s version).flac”
2022-07-14T21:40:32.892030000Z stdout: “Doing various tasks separately 0 %
Doing various tasks separately 0 %
Reading track 3 of 14 (try 5) (1 of 8) 
 0 %”
2022-07-14T21:42:00.081530000Z stdout: “Reading track 3 of 14 (try 5) (1 of 8) 
 1 %”
2022-07-14T21:42:00.082132000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac ( 1 %)”,“is_error”:false}
2022-07-14T21:42:00.082208000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac ( 1 %)”,“is_error”:false}
2022-07-14T21:42:00.133597000Z stdout: “Reading track 3 of 14 (try 5) (1 of 8) 
 2 %”
2022-07-14T21:42:00.133691000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac ( 2 %)”,“is_error”:false}
2022-07-14T21:42:00.133790000Z → CONTINUE 1 Changed {“message”:“Album: Taylor Swift - Red (Taylor’s version) (explicit) (Disc 2 of 2)\n03 - Girl at Home (Taylor’s version).flac ( 2 %)”,“is_error”:false}
2022-07-14T21:42:00.185842000Z stdout: “Reading track 3 of 14 (try 5) (1 of 8) 
 3 %”

It fails in getting an accurate rip of track 3 and then gives up after 5 attempts. This might be fixable if I make the “Rip (forced)” option a bit more forceful but using another application to rip this disc is probably quicker.

I don’t rip CD’s, but if I did, I would not do it in Roon. I would use a 3rd party ripper and create and store all my digital music files outside of Roon. In Roon, I would use a copy of those files.

1 Like

Hi @Jan_Koudijs, hi all.
I’m a newbie in Roon and Linux, but with the help of all literature available I have been able to install Docker (no idea what is it), Extension Manager and finally CD-Ripper v0.5.0. Wow!
After this unforeseen victory, CD Ripper says “Please configure drive” and afterwards ask to insert a CD. So far, so good.
The problem is that, after more than 15 minutes “Analyzing drive caching behavior”, reading TOC for all tracks with a varied number of “Q sub-channels with CRC errors” and ripping track one of the disc with a myriad of “offset numbers”, it ends with “Cannot set up drive, please try with another disk”.
I have tried with more than 5 disks in optimal condition and carefully cleaned and no change.

Any clue? Thanks for your help. Best, Manuel.

Hi @Manuel_Pineda, sorry to hear that your efforts haven’t paid out yet.

What drive are you using? Is it by any chance on this list?

It might be useful if you can supply the extension log files, instructions can be found here.

Hi,

I have installed the extension, but i don’t have at the moment an audio CD. does the first device setup work with any kind of medium or does it need to contain tracks?

Hi @Jan_Koudijs, thanks for your immediate reply.

I’ve got the name of the disk, is a “Streacom ST-OD1” and unfortunatelly it is not in the Accurate Rip list.

I have got also the log files and ther the extension recognizes it as a “HL-ST-DT DVD±RW GA31N”, but is also not in the Accurate Rip List.

I don’t know how to provide you the log files. I copy here the lines of the cd-ripper log file that are the results of the last disk check:

6:48.527876000Z → CONTINUE 1 Changed {“message”:“Ripping track 1 with read offset 1127 0 %”,“is_error”:false}
2022-11-28T19:26:50.650129000Z stdout: “Ripping track 1 with read offset 1127 100 %”
2022-11-28T19:26:50.651109000Z → CONTINUE 1 Changed {“message”:“Ripping track 1 with read offset 1127 100 %”,“is_error”:false}
2022-11-28T19:26:50.651291000Z stderr: “WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 39271388”
2022-11-28T19:26:50.651495000Z stderr: “WARNING:whipper.program.cdparanoia:non-integral amount of frames difference”
2022-11-28T19:26:50.652512000Z stdout: “Ripping track 1 with read offset 1127 100 %”
2022-11-28T19:26:50.652754000Z → CONTINUE 1 Changed {“message”:“Ripping track 1 with read offset 1127 100 %”,“is_error”:false}
2022-11-28T19:26:50.653220000Z stderr: “Traceback (most recent call last):
2022-11-28T19:26:50.653444000Z File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/extern/task/task.py”, line 519, in c
2022-11-28T19:26:50.653619000Z callable_task(*args, **kwargs)
2022-11-28T19:26:50.653764000Z File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 312, in _read
2022-11-28T19:26:50.653927000Z stdout: “”
2022-11-28T19:26:50.654088000Z self._done()
2022-11-28T19:26:50.654275000Z File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 388, in _done”
2022-11-28T19:26:50.654441000Z stderr: “self.quality = self._parser.getTrackQuality()
2022-11-28T19:26:50.654598000Z File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 199, in getTrackQuality”
2022-11-28T19:26:50.654635000Z stderr: "raise RuntimeError(“cdparanoia couldn’t read any frames "
2022-11-28T19:26:50.654672000Z RuntimeError: cdparanoia couldn’t read any frames for the current track”
2022-11-28T19:26:50.654744000Z → CONTINUE 1 Changed {“message”:“Drive offset can’t be determined, try another disc”,“is_error”:true}
2022-11-28T19:26:50.654808000Z stderr: “WARNING:whipper.command.offset:unknown task exception for offset 1127: (RuntimeError(“cdparanoia couldn’t read any frames for the current track”,), ‘exception RuntimeError at /usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py:199: getTrackQuality(): cdparanoia couldn't read any frames for the current track\nTraceback (most recent call last):\n File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/extern/task/task.py”, line 519, in c\n callable_task(*args, **kwargs)\n File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 312, in _read\n self._done()\n File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 388, in _done\n self.quality = self._parser.getTrackQuality()\n File “/usr/local/lib/python2.7/dist-packages/whipper-0.8.1.dev1+g5506e4e-py2.7-linux-x86_64.egg/whipper/program/cdparanoia.py”, line 199, in getTrackQuality\n raise RuntimeError("cdparanoia couldn't read any frames "\nRuntimeError: cdparanoia couldn't read any frames for the current track\n’)”
2022-11-28T19:26:50.654861000Z stderr: “WARNING:whipper.command.offset:cannot rip with offset 1127
”
2022-11-28T19:26:50.654898000Z stderr: “ERROR:whipper.command.offset:no matching offset found. Consider trying again with a different disc”
2022-11-28T19:26:50.672903000Z whipper exited with code: 0

Hope you can find something in it. I really apreciate the effort, thanks for it. Best, Manuel.

Looks like no data can be read from the CD. Do you have the possibility to test the drive on a laptop or PC?

Hi @Jan_Koudijs, thanks for your answer.

The DVD Drive is embedded in a Streacom PC case and has been working perfectly in Windows with other Windows rippers (CUE ripper).

I haven’t tested it in Linux till the moment, I will do and let you know.

Thanks a lot. Best, Manuel.

I have been trying the extension on an Ubuntu 22 box and I am finding about 50% of time I try and use it that it runs the cdrdao process twice:

root 1794 1396 3 15:30 ? 00:00:14 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 1795 1396 3 15:30 ? 00:00:14 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 1831 1795 0 15:32 ? 00:00:00 cdrdao read-toc --device /dev/cdrom /tmp/tmp2shvN5.cdrdao.read-toc.whipper.task
root 1838 1794 0 15:32 ? 00:00:00 cdrdao read-toc --device /dev/cdrom /tmp/tmpLHeRZJ.cdrdao.read-toc.whipper.task

This means that the CD goes wild constantly trying to seek back and forth as the two processes fight over who is accessing the drive. Is there any way I can stop this happening? When it works, it seems to work well, but half the time it does this duplicate process thing.

Thanks in advance!

Do you use the Docker image to run the extension?

Hi Jan,

thanks for replying. I installed the Appgineer Roon Extension Manager and then told that to install CD ripper and yes, it appears to be running within Docker.

Regards,

Gavin

Hi everybody,

Only one question: does CD Ripper works with an Apple Superdrive unit?

Thanks

If it helps, I did a ps -ef |grep whip while putting a CD in the drive and this is what I saw on a successful rip where only one cdrdao process was started (but you can see the whipper process does run twice very briefly)

root@kokleda:~# ps -ef |grep whip
root 60652 6807 54 09:46 ? 00:00:00 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60654 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip
root@kokleda:~# ps -ef |grep whip
root 60652 6807 38 09:46 ? 00:00:01 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60659 60652 30 09:46 ? 00:00:00 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60661 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip
root@kokleda:~# ps -ef |grep whip
root 60652 6807 29 09:46 ? 00:00:01 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60659 60652 19 09:46 ? 00:00:00 cdrdao read-toc --fast-toc --device /dev/cdrom /tmp/tmpf3KiZG.cdrdao.read-toc.whipper.task
root 60663 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip
root@kokleda:~# ps -ef |grep whip
root 60652 6807 29 09:46 ? 00:00:01 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60659 60652 19 09:46 ? 00:00:00 cdrdao read-toc --fast-toc --device /dev/cdrom /tmp/tmpf3KiZG.cdrdao.read-toc.whipper.task
root 60665 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip
root@kokleda:~# ps -ef |grep whip
root 60652 6807 24 09:46 ? 00:00:01 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60659 60652 13 09:46 ? 00:00:00 cdrdao read-toc --fast-toc --device /dev/cdrom /tmp/tmpf3KiZG.cdrdao.read-toc.whipper.task
root 60667 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip
root@kokleda:~# ps -ef |grep whip
root 60652 6807 18 09:46 ? 00:00:01 /usr/bin/python2 /usr/local/bin/whipper --eject never cd rip --cdr
root 60659 60652 7 09:46 ? 00:00:00 cdrdao read-toc --fast-toc --device /dev/cdrom /tmp/tmpf3KiZG.cdrdao.read-toc.whipper.task
root 60669 60046 0 09:46 pts/1 00:00:00 grep --color=auto whip