Awesome Go

minimp3

CategoryAudio and Music
SubcategoryAudio and Music
Stars134

Lightweight MP3 decoder library

About minimp3

minimp3

Go Reference Builder Coverage Status

Decode mp3 base on https://github.com/lieff/minimp3

Installation

  1. The first need Go installed (version 1.15+ is required), then you can use the below Go command to install minimp3.
$ go get -u github.com/tosone/minimp3
  1. Import it in your code:
import "github.com/tosone/minimp3"

Examples are here

package main

import (
	"bytes"
	"log"
	"os"
	"time"

	"github.com/ebitengine/oto/v3"
	"github.com/tosone/minimp3"
)

func main() {
	file, err := os.ReadFile("test.mp3")
	if err != nil {
		log.Fatal(err)
	}

	dec, data, err := minimp3.DecodeFull(file)
	if err != nil {
		log.Fatal(err)
	}

	op := &oto.NewContextOptions{
		SampleRate:   dec.SampleRate,
		ChannelCount: dec.Channels,
		Format:       oto.FormatSignedInt16LE,
	}
	context, readyChan, err := oto.NewContext(op)
	if err != nil {
		log.Fatal(err)
	}
	<-readyChan

	player := context.NewPlayer(bytes.NewReader(data))
	player.Play()
	for player.IsPlaying() {
		time.Sleep(time.Millisecond)
	}

	dec.Close()
	if err = player.Close(); err != nil {
		log.Fatal(err)
	}
}
package main

import (
	"log"
	"os"
	"time"

	"github.com/ebitengine/oto/v3"
	"github.com/tosone/minimp3"
)

func main() {
	file, err := os.Open("input.mp3")
	if err != nil {
		log.Fatal(err)
	}
	dec, err := minimp3.NewDecoder(file)
	if err != nil {
		log.Fatal(err)
	}
	<-dec.Started()
	log.Printf("Convert audio sample rate: %d, channels: %d\n", dec.SampleRate, dec.Channels)
	op := &oto.NewContextOptions{
		SampleRate:   dec.SampleRate,
		ChannelCount: dec.Channels,
		Format:       oto.FormatSignedInt16LE,
	}
	context, readyChan, err := oto.NewContext(op)
	if err != nil {
		log.Fatal(err)
	}
	<-readyChan
	player := context.NewPlayer(dec)
	player.Play()
	for player.IsPlaying() {
		time.Sleep(time.Millisecond)
	}
	if err := player.Close(); err != nil {
		log.Fatal(err)
	}
}
package main

import (
	"log"
	"net/http"
	"os"
	"time"

	"github.com/ebitengine/oto/v3"
	"github.com/tosone/minimp3"
)

func main() {
	var args = os.Args
	if len(args) != 2 {
		log.Fatal("Run test like this:\n\n\t./networkAudio.test [mp3url]\n\n")
	}

	response, err := http.Get(args[1])
	if err != nil {
		log.Fatal(err)
	}
	defer response.Body.Close()

	dec, err := minimp3.NewDecoder(response.Body)
	if err != nil {
		log.Fatal(err)
	}
	<-dec.Started()

	log.Printf("Convert audio sample rate: %d, channels: %d\n", dec.SampleRate, dec.Channels)

	op := &oto.NewContextOptions{
		SampleRate:   dec.SampleRate,
		ChannelCount: dec.Channels,
		Format:       oto.FormatSignedInt16LE,
	}
	context, readyChan, err := oto.NewContext(op)
	if err != nil {
		log.Fatal(err)
	}
	<-readyChan

	player := context.NewPlayer(dec)
	player.Play()
	for player.IsPlaying() {
		time.Sleep(time.Millisecond)
	}
	dec.Close()
	if err := player.Close(); err != nil {
		log.Fatal(err)
	}
}

Frequently Asked Questions

What is minimp3?

minimp3 is a Audio and Music library for the Go programming language. Lightweight MP3 decoder library

How do I install minimp3?

Install minimp3 with the Go module system using `go get tosone/minimp3`. Check the repository for the current installation instructions.

What category does minimp3 belong to?

minimp3 is listed under Audio and Music, specifically Audio and Music.

← Back to Audio and Music