
Python を使用して TIDAL 音楽サービスに手を振ります。 (少なくとも) Windows、macOS、GNU/Linux 上で動作します。
TIDAL は、アーティスト第一のファン中心の音楽ストリーミング プラットフォームで、1 億曲以上を HiFi 音質で世界中の音楽コミュニティに配信します。 © 2024 タイダルミュージックAS
このプロジェクトはqobuz-dlからインスピレーションを受けており、特にTidal-Media-Downloaderの継続です。このプロジェクトは私的使用のみを目的としており、著作権で保護されたコンテンツの配布を目的としたものではありません。
このソフトウェアは、LGPLv2.1 の FFmpeg プロジェクトのライブラリを使用します。 FFmpeg は、FFmpeg プロジェクトの創始者である Fabrice Bellard の商標です。
requestsパッケージを使用するため、システム プロキシ (HTTP、HTTPs、Socks) が尊重されます。または、一般的な環境変数で指定することもできますrequestsを使用するため、非常に単純なCache-ControlリクエストのキャッシュがCacheControl経由で行われます。tidal-wave実行するには、現在の有効な TIDAL サブスクリプションが必要です。以前は、TIDAL は利用可能なオーディオ品質を HiFi プランと HiFi Plus プランに分割していましたが、現在は、
現在のすべての TIDAL プランは、フルロスレス、HiRes FLAC、Dolby Atmos (最大 24 ビット、192 kHz) などの Max 音質フォーマットを備えています。
音質の詳細については、TIDAL のサイトをご覧ください。
ffmpeg搭載されています。chocolateyもオプションですbackoffcachecontroldataclass-wizardffmpeg-pythonmutagenm3u8platformdirspycryptodomerequests[socks]typerpip PyPi からインストールこのプロジェクトをpipでインストールします。仮想環境 (推奨) またはその他の希望する方法でインストールします。
# GNU/Linux or macOS or Android (e.g. Termux)
$ python3 -m pip install tidal-wave # Windows
PS > python.exe - m pip install tidal - wavepipリポジトリからインストールあるいは、このリポジトリのクローンを作成することもできます。 cdでそれに入力します。そこからインストールします。
$ git clone --depth=1 https://github.com/ebb-earl-co/tidal-wave.git
$ cd tidal-wave
$ python3 -m venv .venv
$ source .venv/bin/activate
$ (.venv) pip install .このプロジェクトのリリース アーティファクトは PyInstaller で作成されます。これは、Python 3.12.6、FFmpeg 7.0、およびtidal-waveプログラムを 1 つのバイナリにバンドルしており、FFmpeg の条件 (GNU Lesser General Public License (LGPL) バージョン 2.1) に基づいてライセンス供与されています。インストールは、プラットフォームに適したバイナリをダウンロードし、実行権限を付与して実行するだけで簡単です。ダウンロードしたファイルの SHA256 チェックサムが、リリース ページにある対応する.sha256ファイルと一致していることを確認してください。
$ wget https://github.com/ebb-earl-co/tidal-wave/releases/latest/download/tidal-wave_ubuntu_24.04_amd64
$ wget https://github.com/ebb-earl-co/tidal-wave/releases/latest/download/tidal-wave_ubuntu_24.04_amd64.sha256
$ sha256sum --check tidal-wave_ubuntu_24.04_amd64.sha256
# ONLY CONTINUE IF THE OUTPUT IS THE FOLLOWING: 'tidal-wave_ubuntu_24.04_amd64.sha256: OK'
# Otherwise, delete the downloaded binary and try to download it again
$ chmod +x ./tidal-wave_ubuntu_24.04_amd64
$ ./tidal-wave_ubuntu_24.04_amd64 --help # For just the lifetime of this PowerShell process, don't block the download from GitHub
PS > Set-ExecutionPolicy - ExecutionPolicy Bypass - Scope Process
PS > Invoke-WebRequest " https://github.com/ebb-earl-co/tidal-wave/releases/latest/download/tidal-wave_windows.exe " - OutFile " tidal-wave_windows.exe "
PS > Invoke-WebRequest " https://github.com/ebb-earl-co/tidal-wave/releases/latest/download/tidal-wave_windows.exe.sha256 " - OutFile " tidal-wave_windows.exe.sha256 "
# Get the checksum value from the tidal-wave_windows.exe.sha256 file and compare it to the just-downloaded EXE
# (Get-FileHash .tidal-wave_windows.exe -Algorithm SHA256).Hash -eq (Get-Content .tidal-wave_windows.exe.sha256)
PS > ( Get-FileHash . tidal-wave_windows.exe - Algorithm SHA256).Hash -eq " e02f69eb850a98e6e1df2bc033fd12566cf27305421a36ec5372fd432ccc8e70 " # This checksum is from version 2024.4.3
# ONLY CONTINUE IF THE OUTPUT OF THE PREVIOUS COMMAND IS 'True'
PS > & . tidal-wave_windows.exe -- helpGitHub コンテナ リポジトリからイメージをプルします。
$ docker pull ghcr.io/ebb-earl-co/tidal-wave:latest
# Or, the main branch of this repository, which will be ahead of `latest`:
$ docker pull ghcr.io/ebb-earl-co/tidal-wave:trunkPython インストールの場所がパス上で利用可能な場合は、 tidal-wave --helpを実行して利用可能なオプションを確認します。それ以外の場合 (上記のリポジトリのクローン作成手順に従った場合を含む)、リポジトリのルート ディレクトリtidal-waveからpython3 -m tidal_wave --helpを実行します。どちらの場合も、次のような内容が表示されるはずです。
Usage: python -m tidal_wave [OPTIONS] TIDAL_URL [OUTPUT_DIRECTORY]
╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ * tidal_url TEXT The Tidal album or artist or mix or playlist or track or video to download [default: None] [required] │
│ output_directory [OUTPUT_DIRECTORY] The parent directory under which directory(ies) of files will be written [default: ~ /Music] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --audio-format [Atmos | HiRes | Lossless | High | Low] [default: Lossless] │
│ --loglevel [DEBUG | INFO | WARNING | ERROR | CRITICAL] [default: INFO] │
│ --include-eps-singles No-op unless passing TIDAL artist. Whether to include artist ' s EPs and singles with albums │
│ --no-extra-files Whether to not even attempt to retrieve artist bio, artist image, album credits, album review, or playlist m3u8 │
│ --no-flatten Whether to treat playlists or mixes as a list of tracks/videos and, as such, retrieve them independently │
| --transparent Whether to dump JSON responses from TIDAL API; maximum verbosity |
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ このツールを呼び出すと、ユーザーの「ホーム」ディレクトリ内の特定のディレクトリに資格情報が保存されます。Unix 系システムの場合、これは/home/${USER}/.config/tidal-waveになります。Windows の場合、これは異なります。どちらの OS の状況であっても、正確なディレクトリはplatformdirsパッケージのuser_config_path()関数によって決定されます。
同様に、デフォルトでは、取得されたすべてのメディアはユーザーのデフォルトの音楽ディレクトリのサブディレクトリに配置されます。Unix 系システムの場合、これはおそらく/home/${USER}/Musicです。 Windows の場合は、おそらくC:Users<USER>Musicです。このディレクトリはplatformdirs.user_music_path()によって決定されます。
output_directoryに渡されると、すべてのメディアがそのディレクトリのサブディレクトリに書き込まれます。出典: タイダル
| 低い | 高い | ロスレス | ハイレゾFLAC | ドルビーアトモス | ビデオ (H.264 + AAC) | |
|---|---|---|---|---|---|---|
| アンドロイド | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| ファイアTV? | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
| macOS | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
| 窓 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
?これは、偽装された Amazon Fire TV であるtidal-waveのデフォルトのクライアントです。 --audio-format hiresコマンド ライン フラグとして渡されない限り、これはあらゆる状況で呼び出されます。
$ tidal-wave https://listen.tidal.com/album/000000
$ # no --audio-format flag passed will instruct tidal-wave to use the Fire TV client, as it implies --audio-format lossless
$ tidal-wave https://listen.tidal.com/album/000000 --audio-format high
$ # specifying low, high, lossless, or atmos will instruct tidal-wave to use the Fire TV client
$ tidal-wave https://listen.tidal.com/album/000000 --audio-format hires
$ # the above forces tidal-wave to ask for an access token gleaned from an Android, macOS, or Windows device, as laid out in the above tableこれは、デバッグの場合や、場合によってはソフトウェアの複数のバージョンを使用する場合に、呼び出されたバイナリ/パッケージがどのバージョンであるかを知るのに確かに役立ちます。 tidal-waveのバージョン 2024.7.1 以降、これは任意のコマンドに--versionフラグを追加することで可能になります。これは、 typer用語で言うところの「eager」コマンドであり、 tidal-waveに渡される他のフラグや引数は無視され、単にバージョンが返されることを意味します。例えば
$ tidal-wave --version
tidal-wave 2024.7.1tidal-waveに渡すだけで、アルバム/アーティスト/ミックス/プレイリスト/トラックをロスレス品質でユーザーの音楽ディレクトリのサブディレクトリに取得し、その場合の INFO レベルのログを取得します。オーディオの。ビデオ URL の場合は、INFO レベルのロギングを使用して、ビデオを 1080p、H.264+AAC 品質でユーザーの音楽ディレクトリのサブディレクトリに取得します。 (.venv) $ tidal-wave https://tidal.com/browse/track/226092704--no-extra-filesフラグを渡します。 (.venv) $ tidal-wave https://tidal.com/browse/track/226092704 --no-extra-files(.venv) $ tidal-wave https://tidal.com/browse/track/... --audio-format atmos --loglevel debugHiRes FLAC トラックにアクセスするには、Android (推奨)、Windows、または macOS デバイスからのアクセス トークンを抽出してこのツールに渡す必要があることに注意してください。
$ tidal-wave https://tidal.com/browse/album/... --audio-format hires --loglevel warning--audio-formatに何かを渡しても何も行われません。 PS > C:UsersUser > & tidal-wave_windows.exe https: // tidal.com / browse / playlist / ...--audio-formatに何かを渡しても何も行われません。 $ ./tidal-wave_ubuntu_24.04_amd64 https://tidal.com/browse/mix/...(.venv) $ python3 -m tidal_wave https://listen.tidal.com/artist/... --audio-format high --loglevel debug(.venv) $ tidal-wave https://listen.tidal.com/artist/... --audio-format hires --include-eps-singles--transparentフラグがあります。 tidal-waveが呼び出されるディレクトリで、 --transparent TIDAL API からの応答を .json ファイルに書き込みます。 (.venv) $ tidal-wave https://listen.tidal.com/track/... --audio-format low --loglevel debug --transparentデフォルトでは、プレイリストまたはミックス URL が渡されると、 tidal-waveその URL で指定されたすべてのトラックおよび/またはビデオを取得し、それらをPlaylistsまたはMixesのサブディレクトリに書き込みます。このサブディレクトリ自体は、指定されたoutput_directoryのサブディレクトリです。 。例: ~/Music/Mixes/My Daily Discovery [016dccd302e9ac6132d8334cfbc022] 。このディレクトリでは、すべてのトラックやビデオが取得されると、プレイリストに表示される順序に基づいて名前が変更されます。例えば
(.venv) $ tidal-wave https://listen.tidal.com/playlist/1b418bb8-90a7-4f87-901d-707993838346
$ ls ~ /Music/Playlists/New Arrivals [1b418bb8-90a7-4f87-901d-707993838346]/
' 001 - Dance Alone [CD].flac '
' 002 - Kissing Strangers [CD].flac '
' 003 - Sunday Service [CD].flac 'これが望ましい動作ではない場合は、 --no-flattenフラグを渡します。このフラグは、トラックやビデオがtidal-waveに個別に渡された場合に書き込まれるディレクトリにトラックやビデオを残すようにtidal-waveに指示します。例えば
(.venv) $ tidal-wave https://listen.tidal.com/playlist/1b418bb8-90a7-4f87-901d-707993838346 --no-flatten
$ ls ~ /Music/
' Sia/Dance Alone [343225498] [2024]/01 - Dance Alone [CD].flac '
' USHER/COMING HOME [339249017] [2024]/05 - Kissing Strangers [CD].flac '
' Latto/Sunday Service [344275657] [2024]/01 - Sunday Service [CD].flac ' コマンド ライン オプションは Python 呼び出しの場合と同じですが、構成とオーディオ データを保存するには、ボリュームを渡す必要があります。ディレクトリへのバインド マウントである場合は、アクセス許可の問題を避けるために、 docker runを実行する前に作成する必要があります。例えば、
$ mkdir -p ./Music/ ./config/tidal-wave/
$ docker run
--rm -it
--name tidal-wave
--volume ./Music:/home/debian/Music
--volume ./config/tidal-wave:/home/debian/.config/tidal-wave
ghcr.io/ebb-earl-co/tidal-wave:latest
https://tidal.com/browse/track/...特定のアーティストのすべてのビデオ、アルバム、EP、シングルを可能な限り最高の品質で取得したい場合、Docker の使用は魅力的なアイデアになる可能性があります。次の Docker 呼び出しにより、これが行われます。
$ mkdir -p ./Music/ ./config/tidal-wave/
$ docker run
--name tidal-wave
--rm -it
--volume ./Music:/home/debian/Music
--volume ./config/tidal-wave:/home/debian/.config/tidal-wave
ghcr.io/ebb-earl-co/tidal-wave:latest
https://listen.tidal.com/artist/...
--audio-format hires
--include-eps-singlesおそらく、単発実行タイプの Docker 呼び出しではなく、いつでもメディアを要求するためにdocker execできる、存続期間の長いコンテナーが必要な場合があります。これは、GitHub ディスカッション、特に Unraid ユーザー向けにリクエストされた機能の 1 つです。これを行うには、次のわずかに変更された Docker コマンドを使用します。
$ mkdir -p ./Music/ ./config/tidal-wave/
$ docker run
--name tidal-wave
-dit # is short for: --detach --interactive --tty
--volume ./Music:/home/debian/Music
--volume ./config/tidal-wave:/home/debian/.config/tidal-wave
--entrypoint " /bin/bash "
ghcr.io/ebb-earl-co/tidal-wave:latest
$ docker exec -it tidal-wave tidal-wave https://tidal.com/browse/album/...
$ docker exec -it tidal-wave tidal-wave https://tidal.com/browse/mix/...
$ docker exec -it tidal-wave tidal-wave https://tidal.com/browse/playlist/...
$ docker exec -it tidal-wave tidal-wave https://tidal.com/browse/track/...注: 最初のtidal-waveコンテナに付けた--nameなので、好きな名前にすることができますが、2 番目のtidal-waveコンテナ内のPython プログラムを呼び出しており、正確にtidal-waveにする必要があります。
開発に取り組み始める最も簡単な方法は、このプロジェクトを GitHub でフォークするか、リポジトリのクローンをローカル マシンに作成し、後で GitHub でプル リクエストを行うことです。いずれの場合も、最初に GitHub から何らかの情報を取得する必要があるため、大まかなプロセスは次のとおりです。
$ git clone --depth=1 https://github.com/ebb-earl-co/tidal-wave/git * Obviously replace the URL with your forked version if you've followed that strategy
(some-virtual-env) $ python3 -m pip install -r requirements.txt * optional packages to follow the coding style and build process; `pyinstaller`, `black`: `(some-virtual-env) $ python3 -m pip install black pyinstaller`
* optionally, Docker to build the OCI container artifacts
from tidal_wave import album , artist , dash , hls , login , main , media , mix , models , oauth , playlist , requesting , track , utils , video
from tidal_wave . main import logging , user_music_path , Path