
Offline music analysis and pitch-preserving beat matching: estimates beats, bars, tempo and key; plans automatic transitions or overlaps; includes monophonic pitch analysis and continuous time-stretch/pitch-shift.
Offline music analysis and pitch-preserving beat matching for Kotlin applications. BeatWeave estimates beats, bars, tempo and key, then uses the observed beat clocks to plan transitions or simultaneous overlaps. The source checkout also provides monophonic pitch analysis and independent pitch shifting. Applications provide audio decoding, playback and UI.
Version 0.10.0 is a development release. Automatic bar selection still accepts some incorrect interpretations and rejects some usable transitions. See accuracy and limitations before using it for unattended automix. The 0.11.0 source adds pulse-compatible explicit transitions, outgoing coverage queries, cue ranking and pitch APIs. The published 0.10.0 Maven packages do not include these changes; build 0.11.0 locally until it is published to Central.
| Module | Purpose | License |
|---|---|---|
analysis |
Spectral features, tempo/key and monophonic pitch estimates, beat clocks and mixing interfaces | MIT |
learned-beats |
Local Beat This! inference, bar tracking and transition selection | MIT |
rubberband |
Continuous stereo time stretching and independent pitch shifting | GPL-2.0-or-later |
The supplied adapters support Android API 26+ and Linux x86_64/JVM. Android native
builds cover arm64-v8a, armeabi-v7a and x86_64. Common iOS targets are optional
(-PenableAppleTargets=true); iOS inference and time-stretch adapters are not included.
BeatWeave 0.10.0 is available from Maven Central; no local library build is needed. Model files are separate; model setup explains how to install and verify them. No model or audio is downloaded during analysis.
Add the dependencies to your application's Gradle build:
repositories {
mavenCentral()
}
dependencies {
implementation("io.github.adrielggmotion.beatweave:analysis:0.10.0")
implementation("io.github.adrielggmotion.beatweave:learned-beats:0.10.0")
implementation("io.github.adrielggmotion.beatweave:rubberband:0.10.0")
}To build or modify the library itself, follow the build instructions. Publishing covers signing and the manually approved Central release process.
The Android AAR includes its native libraries. The JVM JAR includes the Linux
x86_64 (glibc) native library; consumers do not need CMake or java.library.path.
Model files remain separate. KMP applications can use analysis from
commonMain and the supplied inference/stretch adapters from Android and JVM
source sets.
val transition = LocalMixPlanner.autoTransition(firstAnalysis, secondAnalysis, bars = 16)
val overlap = LocalMixPlanner.overlap(firstAnalysis, secondAnalysis)Transitions support 2, 4, 8, 16 or 32 bars, with automatic or explicit cue selection. In 0.11.0, explicit transitions can pair songs with different bar pulse counts. See pulse alignment, sparse outros and rejection messages. An overlap retains both recordings and matches their selected common span. Preparation uses a continuous stretcher; playback, seeking and export reuse its prepared audio. See usage for analysis, rendering and error handling.
examples/jvm and examples/android are integration smoke consumers. They are
not music-player or transition-editor apps.
See CONTRIBUTING.md for focused checks and regression reports.
The analysis and learned-beat modules use the MIT license. Model and runtime notices are in learned-beats/licenses. The optional Rubber Band module uses GPL-2.0-or-later; its source and attribution are described in THIRD_PARTY.md. Including that module does not produce an MIT-only distribution.
Offline music analysis and pitch-preserving beat matching for Kotlin applications. BeatWeave estimates beats, bars, tempo and key, then uses the observed beat clocks to plan transitions or simultaneous overlaps. The source checkout also provides monophonic pitch analysis and independent pitch shifting. Applications provide audio decoding, playback and UI.
Version 0.10.0 is a development release. Automatic bar selection still accepts some incorrect interpretations and rejects some usable transitions. See accuracy and limitations before using it for unattended automix. The 0.11.0 source adds pulse-compatible explicit transitions, outgoing coverage queries, cue ranking and pitch APIs. The published 0.10.0 Maven packages do not include these changes; build 0.11.0 locally until it is published to Central.
| Module | Purpose | License |
|---|---|---|
analysis |
Spectral features, tempo/key and monophonic pitch estimates, beat clocks and mixing interfaces | MIT |
learned-beats |
Local Beat This! inference, bar tracking and transition selection | MIT |
rubberband |
Continuous stereo time stretching and independent pitch shifting | GPL-2.0-or-later |
The supplied adapters support Android API 26+ and Linux x86_64/JVM. Android native
builds cover arm64-v8a, armeabi-v7a and x86_64. Common iOS targets are optional
(-PenableAppleTargets=true); iOS inference and time-stretch adapters are not included.
BeatWeave 0.10.0 is available from Maven Central; no local library build is needed. Model files are separate; model setup explains how to install and verify them. No model or audio is downloaded during analysis.
Add the dependencies to your application's Gradle build:
repositories {
mavenCentral()
}
dependencies {
implementation("io.github.adrielggmotion.beatweave:analysis:0.10.0")
implementation("io.github.adrielggmotion.beatweave:learned-beats:0.10.0")
implementation("io.github.adrielggmotion.beatweave:rubberband:0.10.0")
}To build or modify the library itself, follow the build instructions. Publishing covers signing and the manually approved Central release process.
The Android AAR includes its native libraries. The JVM JAR includes the Linux
x86_64 (glibc) native library; consumers do not need CMake or java.library.path.
Model files remain separate. KMP applications can use analysis from
commonMain and the supplied inference/stretch adapters from Android and JVM
source sets.
val transition = LocalMixPlanner.autoTransition(firstAnalysis, secondAnalysis, bars = 16)
val overlap = LocalMixPlanner.overlap(firstAnalysis, secondAnalysis)Transitions support 2, 4, 8, 16 or 32 bars, with automatic or explicit cue selection. In 0.11.0, explicit transitions can pair songs with different bar pulse counts. See pulse alignment, sparse outros and rejection messages. An overlap retains both recordings and matches their selected common span. Preparation uses a continuous stretcher; playback, seeking and export reuse its prepared audio. See usage for analysis, rendering and error handling.
examples/jvm and examples/android are integration smoke consumers. They are
not music-player or transition-editor apps.
See CONTRIBUTING.md for focused checks and regression reports.
The analysis and learned-beat modules use the MIT license. Model and runtime notices are in learned-beats/licenses. The optional Rubber Band module uses GPL-2.0-or-later; its source and attribution are described in THIRD_PARTY.md. Including that module does not produce an MIT-only distribution.