Lightweight, portable audio feature extraction engine for MoonBit (Mel Spectrogram, Log-Mel, MFCC)
git clone https://github.com/1zhouhaoran1/MoonMel.git
cd MoonMel
moon run examples/basic --target jsSTFT: 513 x 63
Mel: 80 x 63
Log-Mel: 80 x 63
MFCC: 13 x 63. ./tools/dev/activate.ps1pnpm --dir playground install --frozen-lockfile
pnpm --dir playground run dev| Action | Result |
|---|---|
| Select a synthetic tone, sweep, mixture or silence | See an actual MoonBit spectrogram and waveform |
| Upload an 8/16-bit PCM WAV | Decode with MoonMel, downmix channels and preview up to ten seconds |
| Change FFT/hop/Mel/MFCC parameters | Recompute the currently selected audio |
| Select Log-Mel, STFT or MFCC | Inspect values by pointer or left/right keys on the plot |
| Play, capture a microphone, export | Hear input, analyze a rolling one-second window, download JSON/CSV |
let cfg = @moonmel.FeatureConfig::default()
let result = @moonmel.analyze(samples, config=cfg).unwrap()
println(result.mfcc.n_cols)| Library | Implementation / fit | Difference relevant to this project |
|---|---|---|
| MoonMel | Pure MoonBit; compiled JS/WASM/Native | Native MoonBit integration, inspectable core pipeline; external coverage of advanced features is still limited |
| librosa | Python / NumPy / SciPy research ecosystem | Reference for this project's aligned core numerical checks |
| Meyda | JavaScript and Web Audio features | Established browser feature integration |
| Essentia.js | Essentia C++ through WASM with JS/TS API | Broader music algorithms and model integration |
node tools/quality/check-toolchain.mjs
node tools/quality/check-architecture.mjs
moon check --deny-warn
moon test --deny-warn
moon test --target js --deny-warn
pnpm --dir playground run build
pnpm --dir playground test& A:\DevEnv\Envs\moonmel_py\Scripts\python.exe tools/reference/check_parity.pyfn chroma_filterbank(sample_rate : Int, n_fft : Int, tuning? : Double, f_min? : Double) -> FeatureMatrixfn chroma_from_spectrogram(spectrogram : FeatureMatrix, sample_rate : Int, n_fft : Int, norm? : ChromaNorm, tuning? : Double, f_min? : Double) -> Result[FeatureMatrix, MelError]fn chroma_stft(samples : Array[Double], config? : FeatureConfig, norm? : ChromaNorm) -> Result[FeatureMatrix, MelError]fn compute_delta(matrix : FeatureMatrix, width? : Int, order? : Int) -> Result[FeatureMatrix, MelError]fn compute_energy(audio : AudioBuffer, frame_length? : Int, hop_length? : Int, center? : Bool) -> Result[FeatureMatrix, MelError]fn compute_rms(audio : AudioBuffer, frame_length? : Int, hop_length? : Int, center? : Bool) -> Result[FeatureMatrix, MelError]fn formant_frequencies(frames : Array[FormantFrame], formant_idx : Int, fallback? : Double) -> Array[Double]fn formant_track(samples : Array[Double], sample_rate? : Int, config? : FormantConfig) -> Result[Array[FormantFrame], MelError]fn formants_frame(frame : Array[Double], sample_rate : Int, config? : FormantConfig) -> Result[FormantFrame, MelError]fn hpss_from_audio(samples : Array[Double], config? : FeatureConfig, hpss_config? : HpssConfig) -> Result[HpssResult, MelError]fn interchannel_level_difference(buffer : MultiChannelAudioBuffer, ch1 : Int, ch2 : Int, config? : FeatureConfig) -> Result[FeatureMatrix, MelError]fn interchannel_phase_difference(buffer : MultiChannelAudioBuffer, ch1 : Int, ch2 : Int, config? : FeatureConfig) -> Result[FeatureMatrix, MelError]fn log_mel_spectrogram(samples : Array[Double], config? : FeatureConfig) -> Result[FeatureMatrix, MelError]fn lpc_features(samples : Array[Double], order : Int, frame_length : Int, hop_length : Int) -> Result[FeatureMatrix, MelError]fn lpcc_features(samples : Array[Double], order : Int, n_lpcc : Int, frame_length : Int, hop_length : Int) -> Result[FeatureMatrix, MelError]fn mel_spectrogram(samples : Array[Double], config? : FeatureConfig) -> Result[FeatureMatrix, MelError]fn multichannel_mel(buffer : MultiChannelAudioBuffer, config? : FeatureConfig) -> Result[Array[FeatureMatrix], MelError]fn multichannel_mfcc(buffer : MultiChannelAudioBuffer, config? : FeatureConfig) -> Result[Array[FeatureMatrix], MelError]fn multichannel_stft(buffer : MultiChannelAudioBuffer, config? : FeatureConfig) -> Result[Array[FeatureMatrix], MelError]fn onset_detect_audio(samples : Array[Double], config? : FeatureConfig, onset_config? : OnsetConfig, delta? : Double, wait? : Int) -> Result[Array[Int], MelError]fn onset_strength_audio(samples : Array[Double], config? : FeatureConfig, onset_config? : OnsetConfig) -> Result[Array[Double], MelError]fn pitch_shift(samples : Array[Double], sample_rate? : Int, n_steps? : Double, config? : FeatureConfig) -> Result[Array[Double], MelError]fn pitch_yin(samples : Array[Double], sample_rate? : Int, config? : YinConfig) -> Result[PitchTrack, MelError]fn power_to_db(matrix : FeatureMatrix, ref_val : Double, amin : Double, top_db : Double) -> FeatureMatrixfn spectral_centroid(samples : Array[Double], config? : FeatureConfig) -> Result[FeatureMatrix, MelError]fn spectral_contrast(spec : FeatureMatrix, sample_rate : Int, n_fft : Int, config? : ContrastConfig) -> FeatureMatrixfn spectral_contrast_audio(samples : Array[Double], feature_config? : FeatureConfig, contrast_config? : ContrastConfig) -> Result[FeatureMatrix, MelError]fn spectral_flatness(samples : Array[Double], config? : FeatureConfig, amin? : Double) -> Result[FeatureMatrix, MelError]fn spectral_rolloff(samples : Array[Double], config? : FeatureConfig, roll_percent? : Double) -> Result[FeatureMatrix, MelError]fn tempogram(samples : Array[Double], feature_config? : FeatureConfig, tempo_config? : TempoConfig) -> Result[TempogramResult, MelError]fn tempogram_from_onset(onset_env : Array[Double], sample_rate : Int, hop_length : Int, config? : TempoConfig) -> TempogramResultfn time_stretch(samples : Array[Double], rate : Double, config? : FeatureConfig) -> Result[Array[Double], MelError]fn yin_frame(frame : Array[Double], sample_rate : Int, f_min? : Double, f_max? : Double, threshold? : Double) -> (Double, Double, Double)fn zero_crossing_rate(audio : AudioBuffer, frame_length? : Int, hop_length? : Int, center? : Bool) -> Result[FeatureMatrix, MelError]Install
Download zipLightweight, portable audio feature extraction engine for MoonBit (Mel Spectrogram, Log-Mel, MFCC)