Helix MP3 Decoder is a high-performance MP3 decoding library designed to provide swift and reliable audio data decoding capabilities. This project is based on Lefucjusz's Helix-MP3-Decoder, commit 31773ea.
We designed a helix_demo to demonstrate how to use the Helix MP3 Decoder and run on Nuclei CPU.
Note:
- Helix MP3 Decoder only support MPEG-1 version. So the sample rate of MP3 file only support 32k, 44.1k and 48k.
- The decoder output is always 2 channel no matter the MP3 file has 1 or 2 channels.
| Directory | Description |
|---|---|
| src | source files |
| data | data manipulation source files and some test results |
Please refer to the Prerequests section in the README.md of parent directory.
First, change to the directory where Makefile is located. We take Nuclei N300 CPU as an example.
To build without extension:
make CORE=n300 ARCH_EXT= allTo build with B and P extension:
make CORE=n300 ARCH_EXT=_zba_zbb_zbc_zbs_xxldspn3x allFor more information about Nuclei CPU Architecture extension, please refer to ARCH_EXT section in Nuclei SDK documentation.
The data for test input is prepared in input.h. The input data is generated from in_1s_32k.mp3 by xxd tool. And the reference output is in output.h. The output data is generated from out_32k.raw which is the decoded output run on x86 platform. We compare the results run on Nuclei CPU with the reference output to ensure the correctness.
We record the CPU cycles consumed to decode MP3 data, and caclulate the average cycles as shown in the following table. To show the performance of Nuclei CPU extensions, we compare the cpu cycles consumed between w/ and w/o extension. For w/o extension, the build option is ARCH_EXT=, for w/ extension, the build option is ARCH_EXT=_zba_zbb_zbc_zbs_xxldspn3x.
Test bitstream: n300_dual_best_config_ku060_16M_7cd945994_18d811786_202408191002.bit
| case | w/o ext (avg cycles) | w/ ext (avg cycles) | speedup ratio |
|---|---|---|---|
| mp3 decode | 384124.40 | 245075.77 | 1.57 |