CDリッピング環境について考える

## はじめに
この記事の内容はWindows環境を想定しています。
MacとかLinuxは対象外です。ごめんね。
筆者の環境：Win10 Pro 22H2、[BH14NS58](https://hitachi-lg.com/jp/products/data.view/?v=26&ckattempt=1)

## CDのリッピングとは
CDリッピングとは、音楽CDに入っているデジタルデータを、PCに音楽ファイルとして保存（取り込み）すること。
リッピングソフトはCDの楽曲情報をインターネット上から取得し、皆さんご存知のMP3やFLAC等の圧縮フォーマットに変換する作業を同時にやってくれる。

## 大サブスク時代にCDリッピングは必要か？
世間的にはサブスク（Apple MusicやSpotify等）で音楽を聴くスタイルがメジャーになっていますが、私はサブスクを完全に信用してはいません。
配信していない曲がそれなりに存在する、大人の事情で突然配信停止されることもある、スマホが圏外だと使えない、サブスクを解約したら何も聴けなくなる[^1]、etc...
[^1]: 解約しなければいいのはそうなんだが、一度CDから取り込んだデータは金が無くても聴けるので。

## CDDB (Compact Disc DataBase）について
CDDBとは、音楽CDのアルバム名・曲名・アーティスト名などの情報をオンラインで参照することのできるデータベースのこと。
音楽CDには演奏時間と曲順以外の情報が記録されていないため、このCDDBを利用する。
（[CD-TEXT](https://ja.wikipedia.org/wiki/CD-TEXT)という規格もあったが最近はほぼ使われていない）
※なお「CDDB」はGracenote社の登録商標である。
<details><summary>少し詳しい解説</summary>
音楽CDを光学ドライブに挿入すると、TOC（Table Of Contents、CDのトラックやセッション等の情報が収録されている）を読み取り、そのTOCに合致した盤情報がCDDBサーバからダウンロードされる。
</details>

### 主なCDDB （カッコ内は登録楽曲数）
* #### [Gracenote](https://www.nielsen.com/ja/solutions/content-metadata/)
 （CD：800万、楽曲：1億）
  情報の精度が高い。多数の有名なメディアプレイヤーで採用されている。
  ~~Gracenote社という企業による運営。~~　ニールセン・ホールディングスによる運営
　
* #### [freedb](https://freedbtest.dyndns.org/)
 （CD：285万、楽曲：3879万）
    上記のGracenote（旧CDDB）が2000年に商用化されたため、無償で使い続けられるCDDBサービスとして誕生した。
本家“freeDB.org”は2020/3/31にシャットダウンしてしまったが、日本語版の“freedbtest.dyndns.org”が現在も利用できる。（楽曲：277万）
 [音楽CDのメタ情報を提供するCDDBサーバー“freeDB.org”が、3月31日で終了](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1238939.html)  
　
* #### [MusicBrainz](https://musicbrainz.org/)
 （CD：160万、楽曲：2000万）
    オープンな音楽データベースを作ることを目的としたプロジェクト。
“Wikipedia”の音楽版を目指している。
freedbプロジェクトに似ており、CDDBへの制限に対応して発足した。日本からも利用可能。 
　
* 他にも __Discogs__ とか __GD3__ とかいろいろあるけど割愛

## セキュアリッピングについて
セキュアリッピングとは、CDを正確にコピーするために読み込みエラーが発生したセクタを検出し、エラー訂正を行う技術です。﻿

CDからオーディオデータをリッピングすると、CD上の傷や汚れ、ドライブの振動、電子的なノイズの混入などが原因でデータを正確に読み込めないエラーが発生する。CDドライブにはエラーを補完する仕組みが備わっているが、元のデータと比較できないため、100％正確にエラーを修正できるわけではない。小さなエラーはソフトウェア的に補完されるが、音質劣化の原因になりかねない。もちろん大きなエラーであれば再生が不可能になってしまう。

### AccurateRip
　定番メディアプレイヤー「MusicBee」にも搭載されている「AccurateRip」は、CDからリッピングした曲データのCRCチェックサムを、ネット上のデータベースにある他のユーザーがリッピングした曲のCRCチェックサムと比較してエラーをチェックできる。「AccurateRip」の公式サイトによると、データが100％正確かどうかを確認できるという。

読んでいるCDがデータベースに登録されている必要があるが、他人の結果と比較するので信頼性が高い。ソフトによっては、プレスの違い等によりオフセットのみがずれているものも正しく照合できる。AccurateRip2も機能自体は同じだが、ハッシュ関数の変更によりチェックサムの衝突の可能性が低くなった (オリジナルのAccurateRipのハッシュ関数の実装にはかなり酷い欠点がある)。

参考1：https://tmkk.undo.jp/xld/secure_ripping.html
参考2：http://flac.aki.gs/bony/?p=3719
参考3：https://forest.watch.impress.co.jp/docs/news/1337000.html

## 主な音声ファイルフォーマット

| 形式 | 拡張子 | 圧縮可逆性 | メタデータ<br>埋込 | ファイル<br>サイズ | 備考 |
| :- | :-: | :-: | :-: | :-: | :-: |
| WAV | .wav | 非圧縮 | △ | 特大 | 非圧縮で扱いづらい |
| MP3 | .mp3 | 非可逆 | ○ | 小 | 圧縮率は<br>ビットレートで可変 |
| AAC | .m4a | 非可逆 | ○ | 小 | 圧縮率は<br>ビットレートで可変 |
| ALAC | .m4a | 可逆 | ○ | 大 | 圧縮レベルは固定 |
| FLAC | .flac | 可逆 | ○ | 大 | 圧縮レベルを<br>9段階で調整可能 |

[参考1](https://www.hires-info.info/2017/04/03/flac%E3%81%A8alac%E3%81%A9%E3%81%A1%E3%82%89%E3%82%92%E4%BD%BF%E3%81%88%E3%81%B0%E8%89%AF%E3%81%84%E3%81%8B%EF%BC%9F/)　[参考2](https://blog.ipodlab.net/entry-984/)

## 理想的なリッピング環境の条件
筆者の環境で効率的にCDリッピングを行うために、以下の条件を満たしたソフトを選んでいく、というのがこの記事の趣旨です。
* 音楽は普段iPhoneで聴くことが多いため、「__iTunes対応のフォーマット__」にする必要がある。
* 可能な限り「__可逆圧縮フォーマット__」を使用したい。(オタク心理的に音の劣化はなんかヤダ)
* CDDBは情報の精度・信頼性からfreedbではなく「__Gracenoteのデータ__」を使用したい。
* CD挿入時またはリッピング開始時に「__ジャケット画像を自動取得__」したい。

まとめると、
__『Gracenote対応でジャケ写が自動取得できてALACで保存できるソフト』__
ということになる。
　
それでは主要なリッピングソフト達を見ていこう。

## 主なCDリッピング対応ソフト一覧

* #### [iTunes](https://www.apple.com/jp/itunes/)
  言わずと知れたApple製のメディアプレーヤー。
  iPhoneユーザーなら必須。Gracenoteが利用できるがFLAC非対応。
　
* #### [Music Center for PC](https://knowledge.support.sony.jp/electronics/support/articles/MC4PC020001)
  Sony製。前身のMedia Goに比べて機能が削られたためすこぶる評判が悪い。
  CDのリッピングに関しては一番使い勝手が良いが、ALACのエンコードには非対応。
　
* #### [Windows Media Player（WMP）](https://support.microsoft.com/ja-jp/windows/windows-media-player-%E3%81%AE%E5%85%A5%E6%89%8B-81718e0d-cfce-25b1-aee3-94596b658287)
  Microsoft製でWindowsに標準搭載。
  以前はAllMusicというCDDBだったが、いつのまにかGracenoteに変更されていたらしい。
　
* #### [Quintessential Media Player（QMP）](https://wikiwiki.jp/qmp/)
  現在開発停止。Win10以降の環境では動作が不安定。
  Gracenoteが利用でき、MP3のLAMEエンコーダが使用できる。CLIエンコードも可能。
  このソフトは元々Gracenote社がMusicID機能（音声解析を元に既存ファイルの楽曲情報を取得する機能）を開発した際に、そのサンプルプログラムとしてソフトメーカーに発注して作成させたもの。
　
* #### [Exact Audio Copy（EAC）](https://www.exactaudiocopy.de/)
  「音楽CDを正確にコピーすること」を最重視。日本語化と初期設定が面倒。
  freedbとMusicBrainzに対応し、Playerという謎のソフトを経由するとGracenoteの情報も取得可能。
　
* #### [fre:ac](https://www.freac.org/)
  音声ファイルを相互変換するソフトだが、リッピング機能もある。AccurateRip対応。
Gracenoteは利用できない。freedbに対応。
　
* #### [MusicBee](https://www.getmusicbee.com/)
  日本語対応で動作が軽快、かつ拡張性も高い。
  EACのようにエラー訂正を行うセキュア取り込み機能もある人気のソフト。AccurateRip対応。
  以前はGracenoteも利用できたのだが、現在はMusicBrainzとfreedbのみ対応なのがとても惜しい。

:::note info
「Music Center for PC」はCDDBから情報取得時に読み仮名(カタカナ)まで自動設定されるため、プレイヤー側でのアルバム・アーティスト名のソート精度が上がる。
:::

### 機能対応表

|  | iTunes | MC for PC | WMP | QMP | EAC | fre:ac | MusicBee |
| :- | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| MP3 Rip | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| AAC Rip | ○ | ○ | × | △ | △ | ○ | △ |
| FLAC Rip | × | ○ | ○ | △ | △ | ○ | ○ |
| ALAC Rip | ○ | × | ○ | △ | △ | ○ | △ |
| Gracenote対応 | ○ | ○ | ○ | ○ | △ | × | × |
| ジャケ写自動取得 | △*1 | ○ | × | × | △*2 | × | △*3 |

*1: iTunesはジャケ写がまず出てこない
*2: EACはアートワーク検索機能はあるけどまず出てこない
*3: MusicBeeは設定画面から以下の画像のように設定すると意外と持ってくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/af3fc714-429d-51d7-f096-185d4fe0ae86.png)


:::note warn
おわかりいただけただろうか...
 
上に挙げた __"理想の条件"をすべて満たすソフトがない__ のである。
:::

## 問題点
* iTunesにはジャケット画像を自動取得するオプションが存在するが、筆者の環境では取得できない。
  （よほどメジャーなCDでない限り画像を見つけられない？）
参考：[アルバムアートワークを入手する](https://www.teach-me.biz/itunes/artwork.html)
　
* Music Center for PCはジャケット画像を高確率で取得してくる（←すごい）
しかし、なぜかALACのエンコードにだけ対応していない（←どうして）

## 暫定対応策 ①

１. Music Center for PCでFLACにリッピング
  （この時点でGracenoteの楽曲情報とジャケ写の登録が完了）
  
２. [foobar2000](https://www.foobar2000.org/)でFLACからALACに変換
  （可逆圧縮フォーマット同士なので音質劣化しないはず）
↓変換したい曲を選択して右クリ → Convert → 「...」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/b618ca54-6fa4-7ab6-45cd-6ef2aac3dd2b.png)
Output format をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/56991d0e-16db-ca5f-801b-7ba54e557901.png)

Apple Lossless を選択して [Back]
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/86162102-f674-b13c-6d99-f5b909001da2.png)
[Convert]ボタンで変換スタート。
  
３. iTunesライブラリに追加
  
４. iPhoneに同期

## 暫定対応策 ②（2023/11/30更新）
オタク心理的にEACで正確にリッピングしたいため、手順変更。
　
１. Music Center for PCでFLACにリッピング
  （Gracenoteの楽曲情報とジャケ写の登録まで完了）
  
２. EACでALACにリッピング
  （この時、Playerで楽曲情報を取得しておくと後述のタグコピー時にミスを防げる）
参考： https://a2d.webcraft.work/player2eac/

[qaac](https://github.com/nu774/qaac/releases/)をダウンロードして解凍、適当な場所に保存(x64を使用)
EACのエンコードオプションを以下のように設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/e51690c0-402e-4380-128f-a8c42c587184.png)

```batch:追加のコマンドラインオプション
  --alac -o %dest% --title "%title%" --artist "%artist%" --album "%albumtitle%" --comment "%comment%" --genre "%genre%" --date "%year%" --track "%tracknr%" --composer "%composer%" --artwork "%coverfile%" "%source%"
```
CMPボタンで指定エンコード方法(今回はALAC)でリッピング開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/519bd63d-8141-9e02-9c32-8cb24d999c9a.png)

３. [Mp3tag](https://www.mp3tag.de/en/)を使用して、FLACファイルのタグ情報をALACファイルに貼り付け  
  （Gracenoteの楽曲情報とジャケ写がEACでリッピングしたALACに反映される）

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/4b16d4cc-f32e-0a95-f6f7-961928cfa16e.png)

４. ALACの方をiTunesライブラリに追加
  
５. iPhoneに同期

## 暫定対応策 ③（2024/04/11追加）
MusicBeeでもセキュアリッピングが可能なため、手順を追加。
ただし現時点ではEACを使う方法を推奨

１. Music Center for PCでFLACにリッピング　←ここは一緒
（タグ情報だけ欲しいのでMP3でもOK）

:::note
Gracenoteの楽曲情報とジャケ写の登録まで完了
:::

２. MusicBeeの設定
左上の「≡」を押すとメニューが出てくるので設定を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/27db4cd2-ba57-d17f-a98e-15c8ad253040.png)

設定＞タグ(2)＞freedbのサーバーを以下のように書き換え
```batch:
gnudb.gnudb.org
↓
freedbtest.dyndns.org
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/374355d0-423c-2053-bd5a-9a5f74639bdd.png)

設定＞ファイルコンバータ＞ALAC有効にチェック
　エンコーダーの場所は暫定対応策 ②の手順２でqaacを保存した場所の[refalac64.exe]
 
　最大圧縮・標準圧縮に以下の値を設定（初期値はffmpeg用なので変更が必要）
```shell:
-i -s - -o [outputfile]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/183d25df-ccee-56d9-0440-16821c58907b.png)
値を書き換えたら「保存」

３. CD取り込み
MusicBeeボタンの右側の「▽」を押す＞ツール＞CDを取り込む（ここ地味に見つけづらい）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/ad4bddb5-dec1-a0bd-56b7-514cce06fcfd.png)

「開始」ボタンでリッピング開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/5777fa09-effa-6ff4-86f1-9501f3bde84a.png)

正確に取り込まれた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/50ed3d0e-bdf0-55eb-20e3-df388ef1a81b.png)


リッピング後に状態が「部分的に正確な取り込み終了」になるケースがある。
⇒ 発売後すぐのCDは部分一致になりがち？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/b1ed927a-409e-10a0-46e2-a4b0bbfc7a08.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/89fd8f03-4722-3c70-7671-29156975a0da.png)

同じCDでもEACでは正確にコピーされたとの表示に。
⇒ AccurateRip v2だから？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/6d827194-d88a-ecdf-6636-cc2f46414581.png)

４. 暫定対応策 ②の手順３と同じくMp3tagでタグコピー

５. ALACの方をiTunesライブラリに追加
  
６. iPhoneに同期

## まとめ
こんなめんどくさい方法でリッピングしてる人いないです。

あと、Music Center for PCのリッピング性能は良くないので注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513605/99f455e0-9c04-5e61-0212-af55bed24d81.png)


## さいごに
もっと良い解決方法や運用の仕方があれば提案して頂けるとありがたいです。
個人的にはMusic Center for PCの高い情報取得精度と、MusicBeeの高機能さに惹かれるところがあるので上手く活用できれば...って感じです。
状況が変わり次第、更新していきたいとは思っています。