# -*- coding: utf-8 -*- """网易云音乐下载器(适配 ffmpeg 写入元数据) 提供功能: - 同步 / 异步下载(本地落盘 / 内存返回) - 批量并发下载 - 进度查询 - 基于 ffmpeg 的元数据 + 封面写入(MP3/FLAC/M4A/MP4/OGG/Opus) 设计要点: 1. ffmpeg 路径懒加载:每次写入前重新检测,支持服务启动后中途安装 2. 显式 -f 指定输出格式 + 临时文件保留原扩展名在最后,双保险 3. MP4(杜比全景声 EAC3)单独分支,启用 +faststart 4. 扩展名优先使用 API 返回的 type 字段,URL/Content-Type 兜底 """ # 兼容门面:实现已按职责拆分到同包各子模块,此处原样再导出。 # 用 `__all__` 声明再导出(ruff F401 与 pyright 均据此认定「有意再导出」), # 使既有调用点(music_downloader.xxx / from music_downloader import Y)零改动。 from ._concurrency import ( _FILE_LOCKS, _FILE_LOCKS_GUARD, CountingSemaphore, RefCountedFileLock, _FileLockHandle, get_file_lock, ) from ._http import ( _AUDIO_MAGIC, _SESSION_LOCAL, DEFAULT_UA, DL_CHUNK_SIZE, _sniff_audio_header, get_http_session, ) from ._log import ( logger, ) from .cover import ( _COVER_CACHE, _COVER_CACHE_LOCK, _COVER_CACHE_MAX, _COVER_CACHE_ORDER, fetch_cover_bytes, ) from .downloader import ( MusicDownloader, ) from .models import ( API_TYPE_TO_EXT, EXT_TO_FFMPEG_FORMAT, METADATA_FORMATS, DownloadCanceled, DownloadException, DownloadResult, MusicInfo, QualityLevel, _RetryFromScratch, ) __all__ = [ 'API_TYPE_TO_EXT', 'DEFAULT_UA', 'DL_CHUNK_SIZE', 'EXT_TO_FFMPEG_FORMAT', 'METADATA_FORMATS', '_AUDIO_MAGIC', '_COVER_CACHE', '_COVER_CACHE_LOCK', '_COVER_CACHE_MAX', '_COVER_CACHE_ORDER', '_FILE_LOCKS', '_FILE_LOCKS_GUARD', '_SESSION_LOCAL', 'CountingSemaphore', 'DownloadCanceled', 'DownloadException', 'DownloadResult', 'MusicDownloader', 'MusicInfo', 'QualityLevel', 'RefCountedFileLock', '_FileLockHandle', '_RetryFromScratch', '_sniff_audio_header', 'fetch_cover_bytes', 'get_file_lock', 'get_http_session', 'logger', ]