Skip to the content
4 layers76.2 × 50.8 mmSpeaker amp, the printed circuit board in 3D

Banana pi cm4io class D amp board based on MAX98397

Size
76.2 × 50.8 mm
Copper layers
4
Thickness
1.61 mm
Parts
119
Nets
68
Pads
389
Tracks, vias
813, 603
Pours
3
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
5 Oct 2026
Updated
7 Nov 2026

Overview

Speaker amp is an open-source printed circuit board by AMuszkat, from the AMuszkat/bpi_amp_platform repository on GitHub. It is a 4-layer board of 76.2 × 50.8 mm with 119 parts on 68 nets, routed with 813 tracks and 603 vias.

It is built around the MP9943GQ-Z, AC0402FR-0710KL and CL31B106KBHNNNE, with the EMZS350ARA471MHA0G, UMK105CG151JVHF and AC0402FR-134K7L among its other parts. Its parts include 65 capacitors, 34 resistors, 4 ICs, 2 diodes and 2 transistors. It belongs with the audio and music boards of this library.

Main components

12

README

README.md

BPI AMP Platform

The BPI AMP Platform: your devices, a phone and the controller on a laptop, in one frame; the Wi-Fi; and speaker 1 and speaker 2, each a board running JUCE DSP plugins and driving a loudspeaker

How the platform is developed: a person sets the goal; an orchestrator agent plans the work and splits it between specialist agents working in parallel; every change is tested on two virtual speakers and reviewed, and a failed test or review sends it back to be fixed; a board operations agent deploys it to the real speakers and reports back

The BPI AMP Platform is an autonomous, agentic platform for audio streaming, loudspeaker tuning and digital signal processing (DSP). It is an open hardware and software stack for building and tuning custom active loudspeakers, and its software is developed, tested and deployed by a team of AI agents working under the direction of a person.

Each loudspeaker contains a BananaPi BPI-CM4 compute module on two purpose-built boards. The speaker receives music over the network, applies its own tuning in real time, and drives a woofer and a tweeter through two MAX98397 class-D amplifiers. Two speakers form a stereo pair, tuned together from a single desktop application.

Autonomous development

The platform is built by specialised AI agents, each responsible for one part of the stack: the audio plugins, the speaker's audio engine, the controller application, the board software, and the pictures of the project. A person sets the goal and approves the result. An orchestrator agent plans the work, runs the specialists in parallel, merges their changes and has a reviewer agent read them; a failed test or a review comment goes back to the agent that made the change. Every change is tested on two virtual speakers running on one computer before it is published, and again by continuous integration. A board operations agent installs the result on the real speakers and checks them. Safeguards apply throughout: no private data enters the repository, nothing reaches the main branch without review, and a lab lock keeps the agents away from the boards while they are on the bench. The agents, their rules and their tools are described in CLAUDE.md and docs/autonomous-development.md.

Overview

Music is played as usual, from a computer or a phone; the speakers take care of the rest.

The system, from the listener's side: a computer or phone streams to two speakers, each with speakerd, ampd and two amplifiers; the controller on your computer talks to the hub

  • Network streaming. Snapcast streams the music to both speakers in sync. AirPlay is also supported, through shairport-sync.
  • Processing in each speaker. Each speaker processes its own channel. Its audio engine, speakerd, runs a chain of plugins: a correction filter, a crossover that divides the signal between the woofer and the tweeter, and a loudness contour. A speaker keeps playing from the settings stored on it, with no network or controller connected.
  • Tuning from a computer. The controller application works like a familiar plugin host: plugins are added, connected and adjusted in their own editors, and both speakers follow within milliseconds. The settings are kept on the speakers, not in the application. The ampd service on the left speaker acts as the hub that keeps the pair in step; the right speaker applies what the hub sends. Level meters are read directly from each speaker.
  • Filters from measurements. A set of Python tools measures each driver and designs the crossover and correction filters, which are then built into the plugins.

Inside a speaker

Each speaker runs a layered stack: the platform's applications and PipeWire in user space, the Linux audio drivers in the kernel, and the hardware beneath them.

Inside a speaker: user space with snapclient, PipeWire, speakerd and ampd; kernel space with the device tree and the ALSA drivers; hardware with the module, the amplifiers, the woofer and the tweeter

The diagrams on this page are generated from docs/diagrams/.

Software modules

ModulePurposeRuns onLocation
Measurement and tuning toolsMeasure a speaker's drivers, design its filters and export them for the pluginsthe development computer (Python)dsp/python_dsp_tools
Audio pluginscrossover, firConv (correction), loudness and ampScope. The first three are each built in three variants from one source: complete, control (the editor only) and headless (the signal processing only)the speakers (headless), the controller (control)dsp/juce_plugins
speakerdThe speaker's audio engine: hosts the plugin chain inside PipeWire, from the settings stored on the speakereach speakerdsp/juce_apps/speakerd
ampdThe speaker's network service: stores and applies its settings; on the left speaker, also the hub of the paireach speakerfirmware/ampd
ControllerThe desktop application for tuning the pair through the hubthe listener's computerdsp/juce_apps/controller
PipeWire and SnapcastThe speaker's audio server, and the network stream that feeds iteach speakerfirmware/pipewire, firmware/snapcast-setup.sh
Kernel supportDevice tree, kernel configuration, and the amplifier and sound-card driverseach speakerfirmware
Installerssetup.sh installs the audio software of a speaker, one component at a timethe development computer, or the speakerfirmware/setup.sh

The controller, ampd and speakerd communicate through the protocol described in docs/protocol.md. The overall design is described in docs/remote-plugin-host.md.

Tuning GUIThe loudness plugin's editor in the controller
Tuning tool: driver responses, the crossover sum and the corrected output, with every filter parameter adjustable live.The loudness plugin in the controller: the plugin's own editor, acting as a remote control for both speakers.

Project status

The first three steps of the roadmap are complete and tested: the plugins in their three variants, the speakerd audio engine, and the controller with the hub. Every test run checks them against a pair of virtual speakers. On 1 November 2026 the platform was first installed on a real board, which now starts speakerd at boot and plays the music Snapcast streams to it. Running ampd and the controller on real boards is the next stage of that installation. Step 4 of the roadmap (oscilloscope data, a catalogue of the plugins on each speaker, and several controllers at once) is next. tools/roadmap.py reports the current state.

Hardware

The platform uses two boards joined by a board-to-board connector: a base board that carries the BPI-CM4 module, with a USB-C port and a debug serial port, and a speaker amp board with the two MAX98397 amplifiers, a boost converter for their supply and a 5 V regulator for the rest of the system. The KiCad projects and their details are in hardware/.

The two boards: a KiCad render of the base board and the speaker amp board, wiping across to a photo of the boards as built, with the BPI-CM4 module

The picture alternates between a render of the KiCad projects (hardware/render/) and a photograph of the boards as built (all.jpeg).

Hardware block diagram

Firmware

The board runs Armbian Linux with this repository's device tree, kernel configuration and amplifier drivers, and PipeWire as its audio server. firmware/setup.sh installs the audio software of a speaker, either from the development computer or on the board itself. The bring-up procedure and the installers are described in firmware/.

Development

All development and testing, apart from work on the boards themselves, takes place on a Linux x86_64 computer with no board attached. Only Podman and git are required: the builds and the tests run in a development container with the same PipeWire version as the boards.

sh
git clone --recurse-submodules https://github.com/AMuszkat/bpi_amp_platform
cd bpi_amp_platform
tools/test.sh all          # the complete test suite
tools/test.sh changed      # while working: the checks that cover the files changed
tools/build.sh loudness    # build one plugin or application into build/
tools/container.sh         # open a shell in the development container

The first run builds the container image and the JUCE framework, which takes a few minutes. A focused check then takes between a few seconds and two minutes, and the complete suite about two minutes. For a board, tools/build.sh speakerd aarch64 cross-compiles into build/aarch64/, and firmware/setup.sh --mode target-remote installs the result. Run tools/test.sh all before installing on a board: nothing enforces it.

The Python measurement and tuning tools have their own quick start in dsp/README.md. The development process, including the test levels, the development agents and continuous integration, is described in CLAUDE.md and docs/autonomous-development.md.

Repository layout

DirectoryContents
hardwareKiCad projects: the base board and the amplifier board
firmwareDevice tree, kernel configuration, amplifier drivers, PipeWire configuration, the installers and ampd
dspMeasurement and tuning tools, the JUCE plugins, speakerd, the controller and the plugin test tool
docsThe system design, its protocol, the block FIR filter, the development setup and the diagrams
tests/vpairTwo virtual speakers on one computer, for development and testing without boards
toolsBuild, test, container and board scripts

License

The software under dsp/ is free software, licensed under the GNU Affero General Public License v3.0; see dsp/LICENSE.

Parts

119
QtyValueFootprintReferences
21100nFspeaker_global_library:C_0402_1005MetricC1, C2, C3, C4, C16, C20, C24, C28, C29, C30, C31, C32, C34, C35, C44, C50 +5
1233rspeaker_global_library:R_0402_1005MetricR4, R5, R6, R7, R8, R9, R19, R20, R21, R22, R23, R24
1110Kspeaker_global_library:R_0402_1005MetricR1, R3, R10, R11, R16, R18, R25, R26, R27, R28, R29
111uFspeaker_global_library:C_0603_1608MetricC5, C8, C9, C21, C25, C33, C36, C37, C57, C64, C65
810uFspeaker_global_library:C_1206_3216MetricC13, C15, C22, C23, C41, C43, C58, C59
6470uFspeaker_amp_library:C_ELEC_8x10C18, C19, C46, C47, C48, C49
4150pFspeaker_global_library:C_0402_1005MetricC10, C11, C38, C39
41uFspeaker_global_library:C_0402_1005MetricC12, C17, C40, C45
422uFspeaker_global_library:C_0805_2012MetricC14, C26, C27, C42
34.7kspeaker_global_library:R_0402_1005MetricR2, R12, R17
3Conn_01x02speaker_global_library:B2P-VHJBATT1, JOUT1, JOUT2
3~speaker_global_library:R_0603_1608MetricR32, R33, R34
210uFspeaker_global_library:C_0805_2012MetricC60, C61
21N4148WSDiode_SMD:D_SOD-323D1, D2
247uFspeaker_global_library:CAP_EEEFK1C470PC62, C63
2BSZ024N04LS6speaker_global_library:PQFN330x330Q1, Q2
2FERR_NFZ2MSD301SZ10Lspeaker_global_library:NFZ2MSD301SZ10LFB2, FB4
2FERR_NFZ2MSD301SZ10Lspeaker_amp_library:NFZ2MSD301SZ10LFB1, FB3
2~speaker_global_library:WLP35U1, U2
10.047uFCapacitor_SMD:C_0402_1005MetricC53
110MResistor_SMD:R_0402_1005MetricR30
113.3KResistor_SMD:R_0402_1005MetricR31
11uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC54
14.7uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC55
14.7uHspeaker_global_library:HCM1A1307-4R7-RL2
141.2Kspeaker_global_library:R_0402_1005MetricR15
151Kspeaker_global_library:R_0402_1005MetricR13
17.68Kspeaker_global_library:R_0402_1005MetricR14
1CONN_2x23PINspeaker_global_library:SAMTEC_SSW-123-01-T-DJ1
1Conn_01x04speaker_global_library:B4P-VHJPVDD1
1Conn_02x04_Odd_Evenspeaker_global_library:TSW-104-07-F-DJBST_PVDD1
1LTC3786speaker_global_library:QFN-16_UD_LITU4
1L_74404054xxspeaker_global_library:IND_5040-WE-LQS_WREL1
1MP9943speaker_global_library:QFN-8_MP9943_MNPU3

More from AMuszkat/bpi_amp_platform

1
  • 2 layers76.2 × 50.8 mmBase board, the printed circuit board in 3D

    Base board

    AMuszkat/bpi_amp_platform

    Banana pi cm4io class D amp board based on MAX98397

    23 parts

Similar boards

  • 4 layers83 × 55 mmSADA Board, the printed circuit board in 3D

    SADA Board

    makerCL/JUCI_CubeSat_SADA

    Solar Array Drive Assembly

    160 parts2
  • 2 layers90 × 90 mmPlasmaTransformer RF Node Igniter, the printed circuit board in 3D

    PlasmaTransformer RF Node Igniter

    inceptionev/PlasmaTransformer

    This project mainly focuses on creating a driver and 3D-printed support structure that allows for safe continuous operation of a plasma toroid.

    65 parts14
  • 4 layers105 × 95 mmCarrier, the printed circuit board in 3D

    Carrier

    mp911de/airgrep

    A portable ADS-B / FLARM receiver

    220 parts
  • 2 layers185 × 110 mmGN845-PWB, the printed circuit board in 3D

    GN845-PWB

    NaokiS28/Konami-System-573-Documentation

    Schematics and pinout information for the Konami System 573

    110 parts16
  • 6 layers62 × 55.5 mmStepper driver, the printed circuit board in 3D

    Stepper driver

    bluesatunsw/owr

    This repo includes all software necessary to operate the Test Rover Platform that is being designed and developed in the 502 project.

    204 parts5Apache-2.0
  • 4 layers100 × 100 mmSmallDSPMicro, the printed circuit board in 3D

    SmallDSPMicro

    Gemuesesaft/SmallDSP

    a small, modular and affordable DSP Module

    312 parts1GPL-3.0
  • 4 layers55 × 55 mmAI Pocket, the printed circuit board in 3D

    AI Pocket

    zycero/AiPocket-Kicad-ESP32-P4-seconde

    164 parts1

Questions

How big is the Speaker amp PCB?

It measures 76.2 × 50.8 mm and has 4 copper layers, 1.61 mm thick.

What parts does the Speaker amp use?

119 parts, built around the MP9943GQ-Z, AC0402FR-0710KL, CL31B106KBHNNNE and EMZS350ARA471MHA0G. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Speaker amp KiCad files?

From the AMuszkat/bpi_amp_platform repository on GitHub, at the commit this page was made from: the board is hardware/speaker_amp/speaker_amp.kicad_pcb and its schematic hardware/base_board/base_board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Speaker amp design in my own project?

Its repository states no licence, so its author keeps all rights: ask AMuszkat before reusing the design.