docs: polish README formatting, badge row alignment, and section readability
This commit is contained in:
61
README.md
61
README.md
@@ -1,16 +1,11 @@
|
||||
# MacBook Pro 15,1 — Warm, Natural Audio DSP for t2linux
|
||||
|
||||
[](https://github.com/mynameisdeleted/mbp15-1-audio-dsp)
|
||||
[](https://git.fairfaxmedia.net/t2linux/mbp15-1-audio-dsp.git)
|
||||
[](https://wiki.t2linux.org/)
|
||||
[](https://github.com/AsahiLinux/asahi-audio)
|
||||
[](https://pipewire.org/)
|
||||
[]()
|
||||
[](https://github.com/mynameisdeleted/mbp15-1-audio-dsp) [](https://git.fairfaxmedia.net/t2linux/mbp15-1-audio-dsp.git) [](https://wiki.t2linux.org/) [](https://github.com/AsahiLinux/asahi-audio) [](https://pipewire.org/) []()
|
||||
|
||||
A custom PipeWire `filter-chain` DSP graph engineered to deliver warm, natural audio to **t2linux** on the **MacBook Pro 15,1** (2018/2019 Intel T2)—aimed at matching or beating macOS (OS X) audio quality both subjectively and objectively.
|
||||
|
||||
> [!NOTE]
|
||||
> **Not a kernel driver.** This graph connects to WirePlumber's hidden `alsa_output.platform-sound.RawSpeakers` sink, delivering Apple-grade warm voicing, multiband dynamic control, driver crossover, FIR correction, and hard driver safety backstops.
|
||||
> **Architecture:** This is **not a kernel driver**. The Linux T2 kernel/ALSA stack exposes raw speaker PCM. WirePlumber hides the raw device and splices this graph in front of it (`alsa_output.platform-sound.RawSpeakers`), executing warm voicing EQ, psychoacoustic sub-bass, 8-band dynamic control, driver crossover, FIR correction, and hard driver protection limiters.
|
||||
|
||||
---
|
||||
|
||||
@@ -18,19 +13,19 @@ A custom PipeWire `filter-chain` DSP graph engineered to deliver warm, natural a
|
||||
|
||||
Upstream graphs (`asahi-audio` / `t2-apple-audio-dsp`) target a measurement-flat response that can sound thin, treble-heavy, and distort at high volumes due to missing driver limiters.
|
||||
|
||||
| Issue in Upstream | Solution in This Graph | Result |
|
||||
| Upstream Limitation | Solution in This Graph | Real-World Result |
|
||||
|---|---|---|
|
||||
| **Thin / Cold Sound** | +3 dB/octave equal-energy warm voicing curve | Rich, warm, balanced audio at all volumes |
|
||||
| **Distortion at High Volume** | Post-FIR driver limiters (`wlim` & `tlim`) | Clean output at 100% volume without amp clipping |
|
||||
| **Woofer Over-Excursion** | 60 Hz high-pass + 8-band multiband compressor | Cone doesn't bottom out on heavy bass beats |
|
||||
| **No Deep Sub-Bass** | Psychoacoustic sub-bass (`virtualbass` via Bankstown) | Extended perceived low-end without physical strain |
|
||||
| **Fixed EQ** | Isolated 8-band `user_eq` preference node | Custom tone presets that survive git updates |
|
||||
| ❄️ **Thin / Cold Sound** | Equal-energy warm voicing curve (+3 dB/octave tilt) | Rich, full, balanced audio across all genres |
|
||||
| 💥 **Distortion at High Volume** | Post-FIR driver limiters (`wlim` @ -2dB, `tlim` @ -1dB) | Crystal clean output at 100% volume with zero amp clipping |
|
||||
| 🔊 **Woofer Over-Excursion** | 60 Hz high-pass + 8-band multiband compressor | Woofers don't bottom out or rattle on heavy bass beats |
|
||||
| 🔇 **No Deep Sub-Bass** | Psychoacoustic sub-bass (`virtualbass` via Bankstown) | Extended perceived low-end without physical cone strain |
|
||||
| 🎚️ **Fixed / Rigid EQ** | Isolated 8-band `user_eq` preference node | Custom tone presets that survive git updates |
|
||||
|
||||
---
|
||||
|
||||
## 🎛️ Signal Processing Chain
|
||||
|
||||
The signal flows through tone controls, dynamic management, ISO-226 loudness tracking, FIR driver correction, and physical driver protection limiters:
|
||||
Audio flows through tone controls, dynamic management, ISO-226 equal loudness tracking, FIR driver correction, and physical driver protection limiters:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
@@ -82,40 +77,40 @@ flowchart TD
|
||||
## 🚀 Quick Start
|
||||
|
||||
### 1. Install Dependencies
|
||||
Installs required LSP & SWH plugins via your distro package manager (`dnf`, `pacman`, `apt`, `zypper`) and builds Bankstown from source:
|
||||
Installs required LSP & SWH plugins via your package manager (`dnf`, `pacman`, `apt`, `zypper`) and builds Bankstown from source:
|
||||
```bash
|
||||
./install-deps.sh
|
||||
```
|
||||
|
||||
### 2. Apply Graph
|
||||
Preflights FIR paths and plugin URIs, builds the effective graph, copies it to WirePlumber, and reloads:
|
||||
Preflights FIR paths and plugin URIs, merges user EQ overrides, copies the configuration to WirePlumber, and reloads:
|
||||
```bash
|
||||
./apply.sh
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> Ensure the **"MacBook Pro 15,1 DSP Speakers"** sink is selected in your desktop sound settings.
|
||||
> Ensure **"MacBook Pro 15,1 DSP Speakers"** is selected as the default output in your desktop sound settings.
|
||||
|
||||
---
|
||||
|
||||
## 🎚️ Sound Profiles & User EQ
|
||||
|
||||
Customize tone settings without modifying calibrated internal DSP stages. `user_eq` sits at the front of the chain, meaning even aggressive boosts are safely governed by the multiband compressor and limiters.
|
||||
Customize tone settings without touching calibrated internal DSP nodes. `user_eq` sits at the front of the chain, so even aggressive boosts are safely governed by downstream multiband limiters.
|
||||
|
||||
### Quick Preset Application
|
||||
### Quick Preset Setup
|
||||
|
||||
1. Copy the example override file:
|
||||
1. **Create your override file:**
|
||||
```bash
|
||||
cp user_eq.example.json user_eq.json
|
||||
```
|
||||
2. Edit `user_eq.json` with desired linear gain values (`g_0` through `g_7`) and apply:
|
||||
2. **Edit `user_eq.json`** with your preferred gain multipliers (`g_0` to `g_7`) and apply:
|
||||
```bash
|
||||
./apply.sh
|
||||
```
|
||||
|
||||
### Recommended Presets
|
||||
### Recommended Tone Presets
|
||||
|
||||
| Preset | 70 Hz (`g_0`) | 110 Hz (`g_1`) | 220 Hz (`g_2`) | 450 Hz (`g_3`) | 1 kHz (`g_4`) | 2.5 kHz (`g_5`) | 6 kHz (`g_6`) | 10 kHz (`g_7`) |
|
||||
| Profile | 70 Hz (`g_0`) | 110 Hz (`g_1`) | 220 Hz (`g_2`) | 450 Hz (`g_3`) | 1 kHz (`g_4`) | 2.5 kHz (`g_5`) | 6 kHz (`g_6`) | 10 kHz (`g_7`) |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| **Reference (Flat)** | `1.00` | `1.00` | `1.00` | `1.00` | `1.00` | `1.00` | `1.00` | `1.00` |
|
||||
| **Rock / Pop** | `1.00` | `1.26` | `1.00` | `0.94` | `1.00` | `1.12` | `1.19` | `1.12` |
|
||||
@@ -125,17 +120,17 @@ Customize tone settings without modifying calibrated internal DSP stages. `user_
|
||||
| **Movie (Action / Bass)** | `1.41` | `1.12` | `1.00` | `1.00` | `1.00` | `1.06` | `1.12` | `1.12` |
|
||||
| **Late-Night (Low Level)** | `0.63` | `0.79` | `1.00` | `1.00` | `1.06` | `1.12` | `1.00` | `0.94` |
|
||||
|
||||
*(Linear values: `1.0` = 0 dB, `1.41` ≈ +3 dB, `0.71` ≈ -3 dB)*
|
||||
*(Note: Gain values are linear multipliers: `1.0` = 0 dB, `1.41` ≈ +3 dB boost, `0.71` ≈ -3 dB cut)*
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Quick Tuning Reference
|
||||
## 🛠️ Fine-Tuning Guide
|
||||
|
||||
If your physical hardware unit needs custom dynamic tuning:
|
||||
If your specific physical unit requires custom acoustic tuning:
|
||||
|
||||
* **Woofer Ceiling:** Edit `wlim.control.limit` in `graph.json` (Default: `-2` dB. Lower to `-3` / `-4` dB for stricter mechanical limiting).
|
||||
* **Overall Bass Punch:** Adjust `equalizer.control` (`g_1` through `g_5`).
|
||||
* **Sub-Bass Harmonics:** Adjust `virtualbass.control.amt` (Default: `1.0`).
|
||||
* **Woofer Ceiling:** Edit `wlim.control.limit` in `graph.json` (Default: `-2` dB. Lower to `-3` / `-4` dB for stricter mechanical protection).
|
||||
* **Bass Drive:** Adjust `equalizer.control` (`g_1` through `g_5`).
|
||||
* **Sub-Bass Synthesis:** Adjust `virtualbass.control.amt` (Default: `1.0`).
|
||||
|
||||
---
|
||||
|
||||
@@ -145,10 +140,10 @@ If your physical hardware unit needs custom dynamic tuning:
|
||||
* 🐙 **GitHub Repository:** [github.com/mynameisdeleted/mbp15-1-audio-dsp](https://github.com/mynameisdeleted/mbp15-1-audio-dsp)
|
||||
* 🏢 **Fairfax Media Git Server:** [git.fairfaxmedia.net/t2linux/mbp15-1-audio-dsp](https://git.fairfaxmedia.net/t2linux/mbp15-1-audio-dsp.git)
|
||||
|
||||
### 📖 Guides & References
|
||||
* 📖 **[INSTALL.md](INSTALL.md)** — Comprehensive installation guide, system prerequisites, package manager details, and troubleshooting.
|
||||
* 🎓 **[README.advanced.md](README.advanced.md)** — Complete electroacoustic design rationale, magnitude-vs-power analysis, gain staging equations, issue tracebacks, and exhaustive parameter tables.
|
||||
* 📊 **[mb-compressor-params.md](mb-compressor-params.md)** — Port-by-port reference for the 8-band LSP multiband compressor.
|
||||
### 📖 Guides & Deep Dives
|
||||
* 📖 **[INSTALL.md](INSTALL.md)** — Full prerequisites, manual plugin build steps, package manager lookup, and troubleshooting.
|
||||
* 🎓 **[README.advanced.md](README.advanced.md)** — Comprehensive electroacoustic design rationale, magnitude-vs-power physics, gain staging equations, issue tracebacks, and complete parameter reference.
|
||||
* 📊 **[mb-compressor-params.md](mb-compressor-params.md)** — Detailed parameter guide for the 8-band LSP multiband compressor.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user