I ripped a hybrid SACD and would like to import the tracks. There are 10 tracks on the disc, but of course that means 10 red book tracks, 10 stereo SACD tracks, and 10 multichannel SACD tracks. I can’t play multichannel from my computer and don’t want to import the redbook tracks, what’s the best way of importing an “incomplete” album like this?
The album in question: https://musicbrainz.org/release/df8fe008-36fa-332d-bca2-8b1c745c09ad
I guess I also have the reverse question since sometimes I do want the redbook tracks and the Music Brainz style guide says, “When a hybrid SACD has the same tracklist on both layers it is acceptable (for the sake of convenience) to enter it as just a single medium (set to “Hybrid SACD”)” Or does beets have logic to handle the “Hybrid SACD” medium?
At the risk of redundancy:
there is an undocumented feature called distance_weights. Lower will reduce the penalty on missing tracks. see config_default.yaml in the main codebase.
match:
#.1 = 90% similarity required. automatically matches above the threshold.
#even at the chosen threshold, can be unintuitive and not automatically select the choice that meets the threshold.
#There is a GitHub issue for this that I can't find.
strong_rec_thresh: .1
#see https://beets.readthedocs.io/en/v1.4.3/reference/config.html#preferred
preferred:
media: ['CD', 'Digital Media|File', 'Digital Media']
countries: ['US', 'GB|UK']
distance_weights:
#should help "quiet" matching. If beets is too eager to match incorrectly and ignore missing tracks,
#then this creates more work for the user later when they manually correct the matches to a release
#without the tracks, or find the missing tracks.
missing_tracks: 10
unmatched_tracks: 10
#try to force away from vinyl
#media: 20.0
#mediums: 20.0
musicbrainz:
There is already a special case to handle/ignore data tracks (like on PlayStation 1 games).
https://github.com/search?q=repo%3Abeetbox%2Fbeets%20"data%20track"&type=code
does beets have logic to handle the “Hybrid SACD” medium?
As far as I know, beets takes whatever Musicbrainz gives it. I don’t even think there’s any mapping/normalization to what is provided.
https://musicbrainz.org/doc/Release/Format
You can see how I handled formats in my config, but it’s untested. This doesn’t change anything about the beets db, just the filenames/folders:
#https://www.cnet.com/news/blu-spec-cd-format-what-is-it-and-should-you-even-care/
#Enhanced CD is the same audio-wise as a CD. It just contains data too.
#CDDA = Redbook = normal CD
#SHM-CD = conforms to CD spec, data will be the same #https://www.amazon.com/SHM-CD-Super-High-Material-CD/forum/Fx1IPUKC4NE0UXH/Tx112UYCFCW3FPU/1/ref=cm_cd_et_md_pl?_encoding=UTF8&asin=B000G73U5Y&cdMsgID=Mx2Q7J55H8UK0XR&cdMsgNo=6&cdSort=oldest#Mx2Q7J55H8UK0XR
media_types_to_omit = ['Digital Media', 'CD', 'Blu-spec CD', 'Enhanced CD', 'CDDA', 'SHM-CD', '']
def item_cust_media():
#see https://musicbrainz.org/doc/Release/Format
if media in media_types_to_omit:
return ''
#combine hybrid SACD with SACD, see https://en.wikipedia.org/wiki/Super_Audio_CD#Technology
elif 'SACD' in media:
return 'SACD'
#combine all vinyl types into just "Vinyl"
elif 'Vinyl' in media:
#https://en.wikipedia.org/wiki/VinylDisc
if media == 'VinylDisc':
return 'VinylDisc'
else:
return 'Vinyl'
elif 'DVD' in media:
what’s the best way of importing an “incomplete” album like this?
The devs can chime in here. But I wonder if you’re better off just always picking hybrid SACD or SACD non-surround. It’s your library, you can treat it how you want. But I would avoid as-is imports as much as possible, they’re hard to work with and have no backend DB to query.
Thank you very much for this, it’s really helpful.
I think I understand, but just to be clear, if I enter an ID and it complains about missing tracks and I hit apply anyway, that’s not “as-is”, right?
Correct, “as-is” means no Musicbrainz/discogs/spotify back end. If you accept with missing tracks that should still create the MB_ALBUMID etc in your beets library/db and the music tags.
Thanks for responding, In the past year I’ve decided that it’s probably just easiest to import all layers.
I was running into issues doing that in beets so I’ve submitted a PR to fix my issue, but it’s hard to tell how to get folks to review it:
beetbox:master
← InvisibleFunction:fix-sacd-import
opened 02:42AM - 17 Mar 24 UTC
## Description
Fixes #5148.
When importing, the code that matches tracks… does not consider the medium number. This causes problems on Hybrid SACDs where the artists, track numbers, titles, and lengths are the same on both layers.
I added a distance penalty for mismatching medium numbers.
Before:
```
$ beet imp .
/Volumes/Music/ti/Red Garland/1958 - All Mornin' Long - 1 (6 items)
Match (95.4%):
The Red Garland Quintet - All Mornin' Long
≠ media, year
MusicBrainz, 2xHybrid SACD (CD layer), 2013, US, Analogue Productions, CPRJ 7130 SA, mono
https://musicbrainz.org/release/6a584522-58ea-470b-81fb-e60e5cd7b21e
* Artist: The Red Garland Quintet
* Album: All Mornin' Long
* Hybrid SACD (CD layer) 1
≠ (#2-1) All Mornin' Long (20:21) -> (#1-1) All Mornin' Long (20:21)
≠ (#2-2) They Can't Take That Away From Me (10:24) -> (#1-2) They Can't Take That Away From Me (10:27)
≠ (#2-3) Our Delight (6:23) -> (#1-3) Our Delight (6:23)
* Hybrid SACD (CD layer) 2
≠ (#1-1) All mornin' long (20:21) -> (#2-1) All Mornin' Long (20:21)
≠ (#1-2) They can't take that away from me (10:27) -> (#2-2) They Can't Take That Away From Me (10:25)
≠ (#1-3) Our delight (6:23) -> (#2-3) Our Delight (6:23)
➜ [A]pply, More candidates, Skip, Use as-is, as Tracks, Group albums,
Enter search, enter Id, aBort, eDit, edit Candidates?
```
Note that all tracks tagged with disc 1 get moved to disc 2 and vice versa.
After:
```
$ beet-test imp .
/Volumes/Music/ti/Red Garland/1958 - All Mornin' Long - 1 (6 items)
Match (95.4%):
The Red Garland Quintet - All Mornin' Long
≠ media, year
MusicBrainz, 2xMedia, 2013, US, Analogue Productions, CPRJ 7130 SA, mono
https://musicbrainz.org/release/6a584522-58ea-470b-81fb-e60e5cd7b21e
* Artist: The Red Garland Quintet
* Album: All Mornin' Long
* Hybrid SACD (CD layer) 1
≠ (#1-1) All mornin' long (20:21) -> (#1-1) All Mornin' Long (20:21)
≠ (#1-2) They can't take that away from me (10:27) -> (#1-2) They Can't Take That Away From Me (10:27)
≠ (#1-3) Our delight (6:23) -> (#1-3) Our Delight (6:23)
* Hybrid SACD (SACD layer) 2
* (#2-1) All Mornin' Long (20:21)
* (#2-2) They Can't Take That Away From Me (10:24)
* (#2-3) Our Delight (6:23)
➜ [A]pply, More candidates, Skip, Use as-is, as Tracks, Group albums,
Enter search, enter Id, aBort, eDit, edit Candidates?
```
Yay!
## To Do
<!--
- If you believe one of below checkpoints is not required for the change you
are submitting, cross it out and check the box nonetheless to let us know.
For example: - [x] ~Changelog~
- Regarding the changelog, often it makes sense to add your entry only once
reviewing is finished. That way you might prevent conflicts from other PR's in
that file, as well as keep the chance high your description fits with the
latest revision of your feature/fix.
- Regarding documentation, bugfixes often don't require additions to the docs.
- Please remove the descriptive sentences in braces from the enumeration below,
which helps to unclutter your PR description.
-->
- [] ~Documentation. (If you've added a new command-line flag, for example, find the appropriate page under `docs/` to describe it.)~
- [X] Changelog. (Add an entry to `docs/changelog.rst` to the bottom of one of the lists near the top of the document.)
- [ ] Tests. (Very much encouraged but not strictly required.) (I don't really know how to do this effectively and would appreciate pointers.)
Having the following in the match section of the config:
ignored_media: ['Hybrid SACD (CD layer)', 'Hybrid SACD (SACD layer, multichannel)']
help me a lot in fact