Skip to content

Releases

BassMax 1.0.7

Choose a tag to compare

@louissgd louissgd released this 11 Nov 03:41

1.0.7 — 只更新 bassmax_decoder.ax(MPC-BE 专用)

本页只提供 1 个附件:bassmax_decoder.ax。其余组件本次一行未改,直接从 v1.0.6 Release 下载即可,不用重下、不用替换。

组件 本次状态 去哪下
bassmax_decoder.ax ✅ 已更新(本页唯一附件) 本页
bassmax_dshow.ax (1.0.6.0) ❌ 未改动 v1.0.6 直链
reg_helper.exe ❌ 未改动 v1.0.6 直链
bassmax_cli.exe ❌ 未改动 v1.0.6 直链
bassmax_chrome_v1.0.0.zip ❌ 未改动 v1.0.6 直链
BassMax-1.0.6-x64.zip ❌ 未改动(整包内容仍是 1.0.6) v1.0.6 直链

bassmax_dshow/version.h 保持 1.0.6 —— 那是 dshow 滤镜的版本唯一来源,本次没碰 dshow;改版本号只会让没变的二进制在托盘提示里谎报 1.0.7。

本次改了什么

  • 进程内托盘:滤镜自己在播放器进程里挂图标,播放时出现、滤镜释放后自动消失。不用额外开任何程序,不存在 setting.exe 单独打开、关掉又把播放器带走的问题。
  • 左键 / 右键单击都 = 开/关总开关,与 bassmax_dshow.ax 的右键行为对齐。单击直接调本 DLL 的 SetSettings(),s_gen 立刻递增,音频线程下一拍 Tick() 重建系数;关闭是 Core 逐样本 bypass,不重建 graph、不切音轨、不爆音。
  • 图标内嵌 bassmax.ico(开启,蓝色渐变柱)/ bassmax_off.ico(关闭,纯灰)的全部尺寸;.ax 同目录放同名 ico 可覆盖,换图标不用重编译。
  • 修掉资源脚本把开启图标注册成字符串名、导致 LoadImageW(201) 失败后静默回退到系统默认图标的问题。现在两枚都是真实 HICON。

托盘只是 Shell_NotifyIcon + 隐藏窗口 + 一个消息线程,不注册任何 CLSID、不实现 ISpecifyPropertyPages,与属性页 InprocServer32 抢注冲突零交集 —— 这是 1.0.6 里「做不了属性页」的正解法,不是绕路。

部署

把本页的 bassmax_decoder.ax 覆盖到 MyMPC\Codecs\,完全退出再打开 MPC-BE(播放器只在启动时读外部滤镜列表)。注册表 CLSID 指向的是安装目录那份,只换仓库里的没用。

  • HKCU\Software\BassMax\TrayIcon=0 会隐藏托盘图标,别不小心设过 0。
  • 图标首次出现可能被 Windows 收进托盘溢出区,去任务栏设置里放出来。

已知

  • 双击会翻转两次、回到原状(单击切换的固有行为,旧 .ax 右键也一样)。
  • 两张 .ax 同时启用会出现两个托盘图标。

源码与完整文档见仓库 README「六·补」;仓库不含二进制,成品只在本页提供。

BassMax 1.0.6

Choose a tag to compare

@louissgd louissgd released this 08 Nov 17:50

1.0.6 — MPC-BE 终于接入 DSP,DirectShow 滤镜回归单管线

本次同时发布两个独立的 x64 滤镜,按播放器分工:

文件 适用 说明
bassmax_dshow.ax (1.0.6.0) MPC-HC / PotPlayer 主滤镜,PCM→PCM 音频增强,回归单管线
bassmax_decoder.ax MPC-BE 1.9.x 新增:伪装成「音频解码器」角色,内部驱动 LAV Audio Decoder,对解出的 PCM 做 DSP

仓库不收录二进制,成品只在本页提供;源码与完整文档见仓库 README「三」「六·补」两章。

为什么 MPC-BE 要单独一个 .ax

查 Aleksoid1978/MPC-BE 源码确认:CFGManagerPlayer 会把内置 Audio Switcher 以 MERIT64_HIGHEST(1<<58) 无条件插入音频链,外部滤镜上限只有约 1<<48;连接协商在第三方 transform 的 ReceiveConnection 之前就已失败。因此 PCM→PCM 形态的外部 DSP 在 MPC-BE 里进不了链路 —— 补多少媒体类型、把 merit 调多高、用 CTransformFilter 还是 CTransInPlaceFilter 都一样。设置页里也没有禁用 Audio Switcher / 加载外部 DSP 的入口(SetAudioFilter1 只认 compand,裁剪版 libavfilter 只注册了 aresample / atempo / compand)。

但 MPC-BE 允许外部滤镜顶替解码器角色(LAV Audio Decoder 就是这么替换 MPC Audio Decoder 的),于是:

MPC-BE graph: [Source] --(压缩)--> [BMD.In]   [BMD.Out] --(PCM)--> [Audio Switcher] --> [Renderer]
                                      |              ^
                                      | 零拷贝转发     | Deliver
                                      v              |
私有 graph:  [Feeder.Out] -> [LAV Audio Decoder] -> [Sink.In]

本次改动

  • 新增 bassmax_decoder.ax(CLSID ...C9B4):输入代理压缩音频零拷贝转给私有图里的 LAV;输出引脚用 LAV 解出的真实 PCM 协商,PCM 推给下游前做 BassMax DSP。Run/Pause/Stop、Flush、EndOfStream、NewSegment、时间戳 / 同步点 / discontinuity / preroll / 动态媒体类型全部双向转发;seeking 与切轨时先 Stop 再重建私有图,LAV 输出格式变化时给下一个 sample 挂新格式通知。
  • 修复「无法渲染文件」:外部滤镜被配成 PREFERRED + Audio/NULL 通配 时,所有音频流都会先塞给本滤镜。现在 CheckMediaType 先用 QueryAccept 问内部 LAV 认不认该类型,明确拒绝就当场让位给内置解码器,不再等私有图建失败把整张图拖崩。
  • 可验证 DSP 是否真生效:日志打印 DSP 总开关 enabled=... 与 changed=(每块样本在 Process() 后逐字节比对前 64 字节)。总开关关闭或纯透传时 changed 恒为 0,杜绝「只有托盘图标 / 只有滤镜名」的假阳性。参数每 400ms 从 HKCU\Software\BassMax 回读,规避两个 DLL 各自独立的设置状态。
  • bassmax_dshow.ax 回归单管线(1.0.6.0):移除从未生效的 C9B3 CTransformFilter 版;DllRegisterServer / DllUnregisterServer 会自动清理旧机器上的 C9B3 注册表幽灵条目。保留位深缺失(wBitsPerSample=0)时用 nBlockAlign/nChannels 反推的修复,以及 CTIP 切音轨修复。DSP 与格式解析抽到 bassmax_dsp.*,两个 .ax 静态复用、无 DLL 级冲突。
  • 构建/测试:新增自写注册工具(系统自带注册工具常被安全策略当 LOLBin 拦截)、x64 真实推流宿主(普通 / seek / 切轨);.bat 统一 GBK+CRLF,安装脚本改为幂等。

安装

  1. 播放器完全退出(滤镜列表只在启动时读取)。
  2. 把 .ax 放到固定目录(例如 MyMPC\Codecs\),路径变动后必须重新注册。
  3. 管理员身份运行对应 install.bat:MPC-HC / PotPlayer 用 bassmax_dshow\install.bat;MPC-BE 用 bassmax_decoder\install.bat(会额外写入外部滤镜配置并设为 PREFERRED)。整包 BassMax-1.0.6-x64.zip 已把脚本、注册工具与 .ax 按目录放好,解压即用。
  4. 重新打开播放器。MPC-HC / PotPlayer 的 CLSID 与 .ax 路径都没变,不需要重新添加滤镜;如果以前加过带 (MPC-BE) 后缀的旧条目,请手动删掉。

依赖:MPC-BE 版要求系统已注册 LAV Audio Decoder({E8E73B6B-4CB3-44A4-BE99-4F7BCB96E491},MPC-BE 自带 LAVFilters64\LAVAudio.ax)。参数仍用原来的设置页 / 托盘修改,两个 .ax 共用同一份配置。

验证

场景 结果
x64 真实推流(5 轮,2ch/6ch 交替) RESULT: PASS
seeking 到 50% / 同格式切轨 Flush → NewSegment → 继续出样本,无 EC_ERRORABORT
MPC-BE + VOB(AC3 5.1,含切换音轨) LAV 输出 6ch/48k float32,changed 随样本增长
MPC-BE + m4a / 24bit FLAC / 5.1 MKV changed 随样本增长,DSP 确实改了数据
LAV 解不了的 APE QueryAccept=S_FALSE → 提前让位,不再拖崩整张图

判据:%TEMP%\bassmax_decoder.log 里 STAT ... changed=N ... enabled=1 且 changed 增长。光有滤镜名或托盘图标不算。

已知限制

部分 APE 是 LAV/ffmpeg 自身解不了(foobar2000 用 Monkey's Audio 官方解码器所以能放)。这类文件现在会提前让位给内置解码器,不会再报「无法渲染文件」,但自然也没有 BassMax 音效;若 DirectShow 侧压根没有能解它的解码器,播放器仍可能报无法渲染 —— 与本滤镜无关。

bassmax_cli.exe 与 bassmax_chrome_v1.0.0.zip 与 1.0.4 相同,本次未改动,一并提供方便一次性下载。

文件校验(SHA-256)

文件 大小 SHA-256
bassmax_dshow.ax 188928 bytes 06303fcacefa2539227a9b70d0b65220c16ed409722315caf411144ab4ae0bcc
bassmax_decoder.ax 111616 bytes a98079eed784eb757964dfd5a35ea2c31ffc2d1cac77a5118f65a248ccd707fc
BassMax-1.0.6-x64.zip 181685 bytes 91292a7df010b259db2f538ff7864e585ee666dd25a1a248069ed96c83e6d38f
reg_helper.exe 11776 bytes 4c4b4e0fb5d95591cbd5ddd649d01e457ebc89d8c1a32b4f6b570a9de5c6d0a3
bassmax_cli.exe 289280 bytes d6ee6ea54feb3a31971022096b7a9a7f0e12243727a9248cc0430d679aec4ab4
bassmax_chrome_v1.0.0.zip 34407 bytes d229c4cb5e73ff3b50089f653f122cefd98cbe035befec0c27ea0a3a16264f7b

BassMax 1.0.4

Choose a tag to compare

@louissgd louissgd released this 05 Nov 15:51

1.0.4 — 修复多音轨切换导致整条流停摆

症状:多音轨文件在播放中切换音轨,画面和声音一起停住;把音效总开关关掉也没用;把滤镜从播放器移除 → 切好音轨 → 再把滤镜加回来,这个文件仍然播不了,必须彻底移除滤镜才能恢复。MPC-HC / PotPlayer 表现一致,解码器 LAV 全套。

根因不是缓存,是基类选错。 1.0.3 及之前用 CTransformFilter(拷贝式变换),输入/输出各有一套媒体类型,输出类型只能由 GetMediaType 静态生成。当输出引脚已连接、输入引脚又被塞进一个新格式时,基类会拿新输入类型去比对已经过期的输出类型,并要求 isFloat / 位深 / 声道 / 采样率全等。LAV 切音轨后只要其中一项变化,QueryAccept 必然返回 S_FALSE → 动态切换失败;万一硬连上更糟:输入已换新格式、输出还停在旧格式,下游按旧块长收新数据,播放器判定音频流坏死并把整个图停掉(所以画面也一起停)。

Enabled=0 只是把 DSP 参数归零,滤镜仍然留在图里参与格式协商,这就是「关音效也没用」的原因。

改了什么

  • 基类换成 CTransInPlaceFilter(就地变换)。输入引脚的 CheckMediaType 直接转发下游 QueryAccept,CompleteConnect 发现上下游类型不一致会自动 ReconnectPin 把新类型推下去。删掉 GetMediaType / CheckTransform / DecideBufferSize 三个易错点,不再需要输出分配器与样本拷贝。
  • 宽进透传:任何 MEDIATYPE_Audio + FORMAT_WaveFormatEx 都接受;改不动的格式(AC3/DTS passthrough、>8 声道、怪位深)原样放过,Transform 恒返回 S_OK。音效滤镜不该成为图建不起来的原因。
  • 运行中格式变更两条入口都处理:SetMediaType(PINDIR_INPUT) 与采样自带的 AM_MEDIA_TYPE(IMediaSample::GetMediaType)。
  • nBlockAlign 按 nBlockAlign / ch 处理 24-in-32 这类容器填充。
  • 托盘线程:删掉析构里的 WaitForSingleObject(2000)(它跑在播放器拆图线程上,等 2 秒 = 画面卡 2 秒),托盘线程改为每进程一个、活到进程结束。
  • 新增 bassmax_dshow/test/test_host.cpp:WAV → BassMax → Null Renderer,2ch / 6ch 交替 5 轮。

bassmax_core.hpp 一行未改,DSP 输出与 1.0.3 逐位相同。

检查项 1.0.3 1.0.4
QueryAccept(6ch/48k/float) 运行中切换 S_FALSE S_OK
滤镜拆除耗时(图释放) 约 2000 ms 0 ms

三种形态,同一份 DSP 核心(bassmax_core.hpp)。

文件 用途 用法
bassmax_dshow.ax MPC-HC / PotPlayer 实时滤镜 管理员运行 regsvr32 "路径\bassmax_dshow.ax"
bassmax_cli.exe 离线批量转码 单文件免安装,不依赖 VC 运行库
bassmax_chrome_v1.0.0.zip Chrome / Edge 扩展 解压后在 chrome://extensions 开发者模式加载

快速开始

DirectShow 滤镜

  1. 把 bassmax_dshow.ax 放到固定目录(移动后需重新注册)
  2. 管理员身份执行 regsvr32 "完整路径\bassmax_dshow.ax"
  3. MPC-HC:选项 → 外部滤镜 → 添加滤镜 → BassMax Audio Enhancer,勾选"优先"
  4. PotPlayer:F5 → 滤镜 → 音频滤镜 → 添加系统滤镜

升级前请完全退出播放器(DllCanUnloadNow 恒 S_FALSE,DLL 被加载时覆盖不了)。卸载:regsvr32 /u "完整路径\bassmax_dshow.ax"

命令行

bassmax_cli.exe music.wav --drive 8.5 --bass 3 --preset 爵士乐

Chrome 扩展
解压 zip → chrome://extensions → 打开开发者模式 → 加载已解压的扩展程序

已知限制

  • 多声道(>2)建议先下混成 2.0,原因见 README
  • Chrome 扩展只处理正在发声的标签页
  • 仅在 Windows 验证,其他平台未测试

许可

MIT。bassmax_dshow/baseclasses/ 为 Microsoft DirectShow 基础类,不受 MIT 覆盖。

Full Changelog: v1.0.3...v1.0.4

BassMax 1.0.3

Choose a tag to compare

@louissgd louissgd released this 04 Nov 17:04

三种形态,同一份 DSP 核心(bassmax_core.hpp)。

文件 用途 用法
bassmax_dshow.ax MPC-HC / PotPlayer 实时滤镜 管理员运行 regsvr32 "路径\bassmax_dshow.ax"
bassmax_cli.exe 离线批量转码 单文件免安装,不依赖 VC 运行库
bassmax_chrome_v1.0.0.zip Chrome / Edge 扩展 解压后在 chrome://extensions 开发者模式加载

快速开始

DirectShow 滤镜

  1. 把 bassmax_dshow.ax 放到固定目录(移动后需重新注册)
  2. 管理员身份执行 regsvr32 "完整路径\bassmax_dshow.ax"
  3. MPC-HC:选项 → 外部滤镜 → 添加滤镜 → BassMax Audio Enhancer,勾选"优先"
  4. PotPlayer:F5 → 滤镜 → 音频滤镜 → 添加系统滤镜

卸载:regsvr32 /u "完整路径\bassmax_dshow.ax"

命令行
bassmax_cli.exe music.wav --drive 8.5 --bass 3 --preset 爵士乐

Chrome 扩展
解压 zip → chrome://extensions → 打开开发者模式 → 加载已解压的扩展程序

已知限制

  • 多声道(>2)建议先下混成 2.0,原因见 README
  • Chrome 扩展只处理正在发声的标签页
  • 仅在 Windows 验证,其他平台未测试

许可

MIT。bassmax_dshow/baseclasses/ 为 Microsoft DirectShow 基础类,不受 MIT 覆盖。

Full Changelog: https://github.com/louissgd/BassMax/commits/v1.0.3