ebb-earl-co / tidal-wave

Waving at the TIDAL music service
Apache License 2.0
38 stars 2 forks source link

Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 340798732 #88

Closed nilleiz closed 7 months ago

nilleiz commented 7 months ago

Hi,

i got my token using the Windows Desktop App and Fiddler Everywhere. Since the token is accepted, and some metadata files are downloaded I suspect this being a bug. I use the docker-container and created the windows-token file and enter the token I got from fiddler. Trying to download any music, i get this error:

2024-03-01:12:29:43,702 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731
2024-03-01:12:29:44,007 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/items
2024-03-01:12:29:44,214 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/review
2024-03-01:12:29:44,352 WARNING  [requesting.py:98] 404 Client Error: not found for TIDAL API endpoint albums/340798731/review
2024-03-01:12:29:44,352 INFO     [requesting.py:91] Requesting from TIDAL API: albums/340798731/credits
2024-03-01:12:29:44,392 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/340798732/credits
2024-03-01:12:29:44,542 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/340798732/playbackinfopostpaywall
Traceback (most recent call last):

  File "<frozen runpy>", line 198, in _run_module_as_main

  File "<frozen runpy>", line 88, in _run_code

  File "/home/debian/tidal_wave/__main__.py", line 3, in <module>
    app()

  File "/home/debian/tidal_wave/main.py", line 108, in main
    album.get(

  File "/home/debian/tidal_wave/album.py", line 195, in get
    self.get_tracks(session, audio_format, out_dir, no_extra_files)

  File "/home/debian/tidal_wave/album.py", line 129, in get_tracks
    track_files_value: Optional[str] = track.get(
                                       ^^^^^^^^^^

  File "/home/debian/tidal_wave/track.py", line 592, in get
    self.set_manifest()

  File "/home/debian/tidal_wave/track.py", line 113, in set_manifest
    self.manifest: Manifest = manifester(self.stream)
                              ^^^^^^^^^^^^^^^^^^^^^^^

  File "/home/debian/tidal_wave/dash.py", line 176, in manifester
    raise TidalManifestException(

tidal_wave.dash.TidalManifestException: Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 340798732
ebb-earl-co commented 7 months ago

Hi, @nilleiz, thank you for having opened an issue. This problem is almost certainly due to the access token you got from Windows returning encrypted audio data, and tidal-wave not having the keys to decrypt.

I have not looked at this problem in a while, so can you re-run the same command that you had run, but give it the extra flag --loglevel debug for me? And then, copy and paste the output as a reply, in code-formatted fashion?

like this here; between triple ` characters

Also, include which --audio-format you are trying to retrieve (even if it's the default)

AVAEO commented 7 months ago

Hi, @nilleiz, thank you for having opened an issue. This problem is almost certainly due to the access token you got from Windows returning encrypted audio data, and tidal-wave not having the keys to decrypt.

I have not looked at this problem in a while, so can you re-run the same command that you had run, but give it the extra flag --loglevel debug for me? And then, copy and paste the output as a reply, in code-formatted fashion?

like this here; between triple ` characters

Also, include which --audio-format you are trying to retrieve (even if it's the default)

Thought I could jump in and share some logs too as it is the same error.

Audio Format = HiRes Track = https://tidal.com/browse/track/252584684 OS = Windows 10


2024-03-02:09:20:17,922 INFO     [models.py:662] TIDAL track ID parsed from input: 252584684
For which of Android [a] or Windows [w] would you like to provide an API token?: w
2024-03-02:09:20:20,935 DEBUG    [connectionpool.py:1055] Starting new HTTPS connection (1): api.tidal.com:443
2024-03-02:09:20:21,412 DEBUG    [connectionpool.py:549] https://api.tidal.com:443 "GET /v1/sessions HTTP/1.1" 200 263
2024-03-02:09:20:21,413 DEBUG    [login.py:88] Adding data from API reponse to session object:
2024-03-02:09:20:21,413 DEBUG    [login.py:89] {
  "sessionId": "6e81aeed-9be8-4e95-96c4-1c8f669c2a25",
  "userId": 197554300,
  "countryCode": "GB",
  "channelId": 323,
  "partnerId": 1,
  "client": {
    "id": 541929256,
    "name": "197554300_9b85157d-0c2a-4473-af8f-6724399c9161",
    "authorizedForOffline": false
  }
}
2024-03-02:09:20:21,415 DEBUG    [login.py:206] Writing this access token to 'C:\Users\AVAEO\AppData\Local\tidal-wave\windows-tidal.token'
2024-03-02:09:20:21,416 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/252584684
2024-03-02:09:20:21,417 DEBUG    [connectionpool.py:1055] Starting new HTTPS connection (1): api.tidal.com:443
2024-03-02:09:20:21,796 DEBUG    [connectionpool.py:549] https://api.tidal.com:443 "GET /v1/tracks/252584684?countryCode=GB&deviceType=DESKTOP HTTP/1.1" 200 1202
2024-03-02:09:20:21,797 INFO     [requesting.py:91] Requesting from TIDAL API: albums/252584675
2024-03-02:09:20:21,812 DEBUG    [connectionpool.py:549] https://api.tidal.com:443 "GET /v1/albums/252584675?countryCode=GB&deviceType=DESKTOP HTTP/1.1" 200 1009
2024-03-02:09:20:21,813 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/252584684/credits
2024-03-02:09:20:21,832 DEBUG    [connectionpool.py:549] https://api.tidal.com:443 "GET /v1/tracks/252584684/credits?countryCode=GB&deviceType=DESKTOP&includeContributors=True HTTP/1.1" 200 376
2024-03-02:09:20:21,833 DEBUG    [models.py:329] There are no credits of type Engineer for this track
2024-03-02:09:20:21,833 DEBUG    [models.py:329] There are no credits of type Mastering Engineer for this track
2024-03-02:09:20:21,833 DEBUG    [models.py:329] There are no credits of type Immersive Mastering Engineer for this track
2024-03-02:09:20:21,833 DEBUG    [models.py:329] There are no credits of type Lyricist for this track
2024-03-02:09:20:21,833 DEBUG    [models.py:329] There are no credits of type Mixer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Mix Engineer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Mixing Engineer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Atmos Mixing Engineer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Producer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Remixer for this track
2024-03-02:09:20:21,834 DEBUG    [models.py:329] There are no credits of type Piano for this track
2024-03-02:09:20:21,834 INFO     [requesting.py:91] Requesting from TIDAL API: tracks/252584684/playbackinfopostpaywall
2024-03-02:09:20:21,964 DEBUG    [connectionpool.py:549] https://api.tidal.com:443 "GET /v1/tracks/252584684/playbackinfopostpaywall?countryCode=GB&deviceType=DESKTOP&audioquality=HI_RES&playbackmode=STREAM&assetpresentation=FULL HTTP/1.1" 200 860
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ C:\Users\AVAEO                                                                                  │
│ \AppData\Local\Programs\Python\Python312\Lib\site-packages\tidal_wave\main.py:96 in main  │
│                                                                                                  │
│    93 │   with closing(s) as session:                                                            │
│    94 │   │   if isinstance(tidal_resource, TidalTrack):                                         │
│    95 │   │   │   track = Track(track_id=tidal_resource.tidal_id)                                │
│ ❱  96 │   │   │   track.get(                                                                     │
│    97 │   │   │   │   session=session,                                                           │
│    98 │   │   │   │   audio_format=audio_format,                                                 │
│    99 │   │   │   │   out_dir=output_directory,                                                  │
│                                                                                                  │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮             │
│ │        audio_format = <AudioFormat.hi_res: 'HiRes'>                              │             │
│ │ include_eps_singles = False                                                      │             │
│ │              logger = <Logger tidal_wave.main (DEBUG)>                           │             │
│ │            loglevel = <LogLevel.debug: 'DEBUG'>                                  │             │
│ │      no_extra_files = False                                                      │             │
│ │          no_flatten = False                                                      │             │
│ │    output_directory = WindowsPath('E:/Music')                                    │             │
│ │                   s = <requests.sessions.Session object at 0x000002338085B290>   │             │
│ │             session = <requests.sessions.Session object at 0x000002338085B290>   │             │
│ │      tidal_resource = TidalTrack(url='https://tidal.com/browse/track/252584684') │             │
│ │           tidal_url = 'https://tidal.com/browse/track/252584684'                 │             │
│ │               track = Track(track_id=252584684)                                  │             │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯             │
│                                                                                                  │
│ C:\Users\AVAEO                                                                                  │
│ \AppData\Local\Programs\Python\Python312\Lib\site-packages\tidal_wave\track.py:592 in get │
│                                                                                                  │
│   589 │   │   if self.stream is None:                                                            │
│   590 │   │   │   return                                                                         │
│   591 │   │                                                                                      │
│ ❱ 592 │   │   self.set_manifest()                                                                │
│   593 │   │   self.set_filename(audio_format)                                                    │
│   594 │   │   outfile: Optional[Path] = self.set_outfile()                                       │
│   595 │   │   if outfile is None:                                                                │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │          album = None                                                     │                    │
│ │   audio_format = <AudioFormat.hi_res: 'HiRes'>                            │                    │
│ │       metadata = None                                                     │                    │
│ │ no_extra_files = False                                                    │                    │
│ │        out_dir = WindowsPath('E:/Music')                                  │                    │
│ │           self = Track(track_id=252584684)                                │                    │
│ │        session = <requests.sessions.Session object at 0x000002338085B290> │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ C:\Users\AVAEO                                                                                  │
│ \AppData\Local\Programs\Python\Python312\Lib\site-packages\tidal_wave\track.py:113 in     │
│ set_manifest                                                                                     │
│                                                                                                  │
│   110 │                                                                                          │
│   111 │   def set_manifest(self):                                                                │
│   112 │   │   """This method sets self.manifest and self.codec"""                                │
│ ❱ 113 │   │   self.manifest: Manifest = manifester(self.stream)                                  │
│   114 │   │   # https://dashif.org/codecs/audio/                                                 │
│   115 │   │   if self.manifest.codecs == "flac":                                                 │
│   116 │   │   │   self.codec = "flac"                                                            │
│                                                                                                  │
│ ╭───────────── locals ─────────────╮                                                             │
│ │ self = Track(track_id=252584684) │                                                             │
│ ╰──────────────────────────────────╯                                                             │
│                                                                                                  │
│ C:\Users\AVAEO                                                                                  │
│ \AppData\Local\Programs\Python\Python312\Lib\site-packages\tidal_wave\dash.py:176 in      │
│ manifester                                                                                       │
│                                                                                                  │
│   173 │   │   │   │   else:                                                                      │
│   174 │   │   │   │   │   return manifest                                                        │
│   175 │   │   else:                                                                              │
│ ❱ 176 │   │   │   raise TidalManifestException(                                                  │
│   177 │   │   │   │   "Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio "     │
│   178 │   │   │   │   f"for track {tesrj.track_id}"                                              │
│   179 │   │   │   )                                                                              │
│                                                                                                  │
│ ╭─────────────────── locals ───────────────────╮                                                 │
│ │ tesrj = TracksEndpointStreamResponseJSON(    │                                                 │
│ │         │   track_id=252584684,              │                                                 │
│ │         │   audio_mode='STEREO',             │                                                 │
│ │         │   audio_quality='HI_RES_LOSSLESS', │                                                 │
│ │         │   bit_depth=24,                    │                                                 │
│ │         │   sample_rate=44100                │                                                 │
│ │         )                                    │                                                 │
│ ╰──────────────────────────────────────────────╯                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TidalManifestException: Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 252584684
ebb-earl-co commented 7 months ago

@AVAEO @nilleiz I'm working on checking out this code path as we speak. My intuition is that the Windows token only provides encrypted versions of the audio data, unlike Android. If you have an Android device, I recommend that you follow the steps in the Wiki to get the access token from that, and use it with tidal-wave while I try to get the Windows token and debug on my side.

Rajeshsahoo12 commented 7 months ago

@AVAEO @nilleiz I'm working on checking out this code path as we speak. My intuition is that the Windows token only provides encrypted versions of the audio data, unlike Android. If you have an Android device, I recommend that you follow the steps in the Wiki to get the access token from that, and use it with tidal-wave while I try to get the Windows token and debug on my side.

@AVAEO @nilleiz I had faced same issue in starting phase of using tidal-wave & trying to download hi-res tracks. Or say for the formats for which we need to provide access token. But window device app access token creates this issue. So, as suggested above & earlier to me by @ebb-earl-co been using android device to get access token.

In initial phase it was very annoying as tidal access token does not get refreshed automatically due to device type. But now it is very easy. Whenever access token expires just delete required folder & play a track in tidal app.

Now u can get new access token. I think it gets expires in 2 days or less.

For more info can go through here closed case regarding same issue occurred while I tried to use access token from windows device. @ebb-earl-co helped me regarding to obtain it from android device.

https://github.com/ebb-earl-co/tidal-wave/issues/23

Thanks. Hope this helps.

ebb-earl-co commented 7 months ago

@AVAEO @nilleiz @Rajeshsahoo12 I can confirm that the issue experienced here is due to TIDAL sending encrypted audio data back to Windows clients. See this base64-decoded manifest of a track stream, especially the encryptionType key:

{'mimeType': 'audio/flac',
 'codecs': 'flac',
 'encryptionType': 'OLD_AES',
 'keyId': 'REDACTED',
 'urls': ['REDACTED']}

Here is a link to an AWS product that talks a bit about the encryption used with DASH. Because the keyId is specified alongside the manifest, the Tidal-Media-Downloader project already solved this, so I can implement it in tidal-wave as well.

ebb-earl-co commented 7 months ago

@nilleiz I've just pushed changes to the main branch, trunk, so please try them out by getting the newest Docker image: docker pull ghcr.io/ebb-earl-co/tidal-wave:trunk. I will try on Windows with these additions, and if they work, I will release a new version.

nilleiz commented 7 months ago

Hi!

Thanks for the fast implementation! Can I use the token that I extracted or do I need to get a new one? I will try and test tomorrow if I find time. I will report back when I did.

Colin Coe @.***> schrieb am Mi., 6. März 2024, 21:18:

@nilleiz https://github.com/nilleiz I've just pushed changes to the main branch, trunk, so please try them out by getting the newest Docker image: docker pull ghcr.io/ebb-earl-co/tidal-wave:trunk. I will try on Windows with these additions, and if they work, I will release a new version.

— Reply to this email directly, view it on GitHub https://github.com/ebb-earl-co/tidal-wave/issues/88#issuecomment-1981710112, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFDAWAAPNZ5RMTPPRIRXBJTYW52XRAVCNFSM6AAAAABEBXH442VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSOBRG4YTAMJRGI . You are receiving this because you were mentioned.Message ID: @.***>

ebb-earl-co commented 7 months ago

@nilleiz you’ll probably need a new token, as they tend to only be valid for 24 hours. But give the one you already have a go!

nilleiz commented 7 months ago

@ebb-earl-co Unfortunately the old token did not work as you said. Is there an easier method getting the token other than fiddler anywhere? This is way to user unfriendly to me, for a 24h token anyway... I will test happily though.

ebb-earl-co commented 7 months ago

@nilleiz unfortunately, no, there is no other way to get an access token. In fact, the reason that every website you've ever used implements HTTPs is for this exact reason: so that it's difficult to hijack the secure connection between server and client... The user unfriendliness is the security from TIDAL's perspective!

ebb-earl-co commented 7 months ago

@nilleiz @Rajeshsahoo12 @AVAEO I have fixed this issue raised here. Just tested it with a Windows system I own, and HiRes is retrieved, decrypted, remuxed, and downloaded! However, I've found a different bug in the playlist retrieving, so I can't release a new version until I solve that. Nevertheless, give the newest trunk branch a download and please report back!

Rajeshsahoo12 commented 7 months ago

@nilleiz @Rajeshsahoo12 @AVAEO I have fixed this issue raised here. Just tested it with a Windows system I own, and HiRes is retrieved, decrypted, remuxed, and downloaded! However, I've found a different bug in the playlist retrieving, so I can't release a new version until I solve that. Nevertheless, give the newest trunk branch a download and please report back!

I have installed latest release of tidal-wave. But I wanted to test the program by using latest development in trunk branch.

Issue is I have do not know how to try testing. As I have tried running below command in sequence but the programs error.

pip install tidal-wave --upgrade

tidal-wave https://tidal.com/browse/track/77610845 --audio-format hires

2024-03-10:12:33:48,584 INFO [models.py:662] TIDAL track ID parsed from input: 77610845 For which of Android [a] or Windows [w] would you like to provide an API token?: w 2024-03-10:12:33:50,320 INFO [requesting.py:91] Requesting from TIDAL API: tracks/77610845 2024-03-10:12:33:50,790 INFO [requesting.py:91] Requesting from TIDAL API: albums/77610844 2024-03-10:12:33:51,138 INFO [requesting.py:91] Requesting from TIDAL API: tracks/77610845/credits 2024-03-10:12:33:51,461 INFO [requesting.py:91] Requesting from TIDAL API: tracks/77610845/playbackinfopostpaywall ┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐ │ C:\Users\Rajesh │ │ Sahoo\AppData\Local\Programs\Python\Python310\lib\site-packages\tidal_wave\main.py:96 in main │ │ │ │ 93 │ with closing(s) as session: │ │ 94 │ │ if isinstance(tidal_resource, TidalTrack): │ │ 95 │ │ │ track = Track(track_id=tidal_resource.tidal_id) │ │ > 96 │ │ │ track.get( │ │ 97 │ │ │ │ session=session, │ │ 98 │ │ │ │ audio_format=audio_format, │ │ 99 │ │ │ │ out_dir=output_directory, │ │ │ │ ┌──────────────────────────────────── locals ─────────────────────────────────────┐ │ │ │ audio_format = <AudioFormat.hi_res: 'HiRes'> │ │ │ │ include_eps_singles = False │ │ │ │ logger = <Logger tidal_wave.main (INFO)> │ │ │ │ loglevel = <LogLevel.info: 'INFO'> │ │ │ │ no_extra_files = False │ │ │ │ no_flatten = False │ │ │ │ output_directory = WindowsPath('C:/Users/Rajesh Sahoo/Music') │ │ │ │ s = <requests.sessions.Session object at 0x000002DE8A06B190> │ │ │ │ session = <requests.sessions.Session object at 0x000002DE8A06B190> │ │ │ │ tidal_resource = TidalTrack(url='https://tidal.com/browse/track/77610845') │ │ │ │ tidal_url = 'https://tidal.com/browse/track/77610845' │ │ │ │ track = Track(track_id=77610845) │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ C:\Users\Rajesh │ │ Sahoo\AppData\Local\Programs\Python\Python310\lib\site-packages\tidal_wave\track.py:592 in get │ │ │ │ 589 │ │ if self.stream is None: │ │ 590 │ │ │ return │ │ 591 │ │ │ │ > 592 │ │ self.set_manifest() │ │ 593 │ │ self.set_filename(audio_format) │ │ 594 │ │ outfile: Optional[Path] = self.set_outfile() │ │ 595 │ │ if outfile is None: │ │ │ │ ┌───────────────────────────────── locals ──────────────────────────────────┐ │ │ │ album = None │ │ │ │ audio_format = <AudioFormat.hi_res: 'HiRes'> │ │ │ │ metadata = None │ │ │ │ no_extra_files = False │ │ │ │ out_dir = WindowsPath('C:/Users/Rajesh Sahoo/Music') │ │ │ │ self = Track(track_id=77610845) │ │ │ │ session = <requests.sessions.Session object at 0x000002DE8A06B190> │ │ │ └───────────────────────────────────────────────────────────────────────────┘ │ │ │ │ C:\Users\Rajesh │ │ Sahoo\AppData\Local\Programs\Python\Python310\lib\site-packages\tidal_wave\track.py:113 in │ │ set_manifest │ │ │ │ 110 │ │ │ 111 │ def set_manifest(self): │ │ 112 │ │ """This method sets self.manifest and self.codec""" │ │ > 113 │ │ self.manifest: Manifest = manifester(self.stream) │ │ 114 │ │ # https://dashif.org/codecs/audio/ │ │ 115 │ │ if self.manifest.codecs == "flac": │ │ 116 │ │ │ self.codec = "flac" │ │ │ │ ┌──────────── locals ─────────────┐ │ │ │ self = Track(track_id=77610845) │ │ │ └─────────────────────────────────┘ │ │ │ │ C:\Users\Rajesh │ │ Sahoo\AppData\Local\Programs\Python\Python310\lib\site-packages\tidal_wave\dash.py:176 in │ │ manifester │ │ │ │ 173 │ │ │ │ else: │ │ 174 │ │ │ │ │ return manifest │ │ 175 │ │ else: │ │ > 176 │ │ │ raise TidalManifestException( │ │ 177 │ │ │ │ "Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio " │ │ 178 │ │ │ │ f"for track {tesrj.track_id}" │ │ 179 │ │ │ ) │ │ │ │ ┌─────────────────── locals ───────────────────┐ │ │ │ tesrj = TracksEndpointStreamResponseJSON( │ │ │ │ │ track_id=77610845, │ │ │ │ │ audio_mode='STEREO', │ │ │ │ │ audio_quality='HI_RES_LOSSLESS', │ │ │ │ │ bit_depth=24, │ │ │ │ │ sample_rate=96000 │ │ │ │ ) │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────────────────────────────┘ TidalManifestException: Expected a manifest for Dolby Atmos, MQA, or Sony 360 Reality Audio for track 77610845

ebb-earl-co commented 7 months ago

@Rajeshsahoo12 I just pushed version 2024.3.1. Please download that and give it a try:

python.exe -m pip install tidal-wave==2024.3.1
Rajeshsahoo12 commented 7 months ago

@Rajeshsahoo12 I just pushed version 2024.3.1. Please download that and give it a try:

python.exe -m pip install tidal-wave==2024.3.1

I have updated tidal-wave to latest release. And ran below command in sequence.

tidal-wave https://tidal.com/browse/track/77610845 --audio-format hires

Here below is the output in terminal :-

image

Here I have attached spek image & mediainfo of the file downloaded :-

01 - Serve The Servants  HiRes flac

https://mediaarea.net/MediaBin/tuq5VTPe

Yeah now there is no error in downloading track. Now I am testing to download album. And will post the results once it is finished.

Suggestion From My End :-

Can the download speeds can be increased, coz I have very high speed of internet but it never crosses 1 MB/s of speeds. Where my internet speeds can go upto 80 MB/s. If it is possible to do. But what a fantastic program you have developed. Many thanks for it.

Rajeshsahoo12 commented 7 months ago

@Rajeshsahoo12 I just pushed version 2024.3.1. Please download that and give it a try:

python.exe -m pip install tidal-wave==2024.3.1

I have updated tidal-wave to latest release. And ran below command in sequence.

tidal-wave https://tidal.com/browse/track/77610845 --audio-format hires

Here below is the output in terminal :-

image

Here I have attached spek image & mediainfo of the file downloaded :-

01 - Serve The Servants HiRes flac

https://mediaarea.net/MediaBin/tuq5VTPe

Yeah now there is no error in downloading track. Now I am testing to download album. And will post the results once it is finished.

Suggestion From My End :-

Can the download speeds can be increased, coz I have very high speed of internet but it never crosses 1 MB/s of speeds. Where my internet speeds can go upto 80 MB/s. If it is possible to do. But what a fantastic program you have developed. Many thanks for it.

I have used this album link https://tidal.com/browse/album/77610844 to download in hi-res format. As this album is available in 24 bit / 96 kHz hi-res lossless quality. Program has downloaded entire albums which consists of 12 songs

image

ebb-earl-co commented 7 months ago

@Rajeshsahoo12 can you open a new issue with a similar comment about the speed? I’ve been trying a different downloading package, and want to continue the discussion in a dedicated place

Rajeshsahoo12 commented 7 months ago

@Rajeshsahoo12 can you open a new issue with a similar comment about the speed? I’ve been trying a different downloading package, and want to continue the discussion in a dedicated place

Okay sure dev. I can do that.