GAAD (Go Advanced Audio Decoder)

Related tags

Audio & Music gaad
Overview

GoDoc Build Status Go Report Card

GAAD (Go Advanced Audio Decoder)

Package currently provides AAC parsing capabilities. This package performs a full parse of AAC-LC and HE-AACv1 bitstreams. Bitstreams with Parametric Stereo (HE-AACv2) are not yet supported, but AAC bitstream data and SBR data will be extracted. The AAC decode from the parsed data to LPCM (.wav) is not yet implemented. Please help us expand and test this library!

AACParser

This package currently supports AAC audio data contained in an ADTS header. All available data is returned in the adts struct and can be accessed as nested objects as presented in the AAC specification. All parameter names should be verbatim from the AAC specification, if you find an issue with this please file a bug or submit a pull request.

AAC Types

Type Description CODEC
AACLC AAC mp4a.40.2
HEAAC AAC + SBR mp4a.40.5
HEAACv2 AAC + SBR + PS mp4a.40.29

where:

  • SBR = Spectral band replication
  • PS = Parametric Stereo

Usage

var []byte buf
buf = <ADTS+AAC data>

// Parsing the buffer
adts, err := gaad.ParseADTS(buf)

// Looping through top level elements and accessing sub-elements
var sbr bool
if adts.Fill_elements != nil {
	for _, e := range adts.Fill_elements {
		if e.Extension_payload != nil &&
			e.Extension_payload.Extension_type == gaad.EXT_SBR_DATA {
			sbr = true
		}
	}
}

VBR vs CBR

VBR (Variable bitrate) and CBR (Constant bitrate) is derived from the bitstream_type attribute in the adif_header section. It is VBR if bitstream_type is true, and CBR otherwise.

References

ISO/IEC STANDARD 14496-3

Title         : Coding of audio-visual objects — Part 3: Audio
File          : ISO_14496-3-4th-Edition.pdf
Edition       : Fourth edition (2009-09-01)
Relevant Sections
    - Page 64   : 1.6.5 Signaling of SBR
    - Page 120  : 1.A.2 AAC Interchange formats
    - Page 489  : 4.4.2 GA bitstream payloads

Related Books

Related Links

Issues
  • Fixes for two of the fuzzing issues

    Fixes for two of the fuzzing issues

    Notes

    I'll preface this by saying I didn't reference the spec for these two issues. The first fix is that the Scale Factor Index table only goes to 11 in the look up table. This fix addresses issue #10

    The second fix just ensures that the Raw_data_block_position array is not accessed out of bound. This addresses issue #9

    opened by WillGunther 3
  • Ignore extensions while not supported, fix misc

    Ignore extensions while not supported, fix misc

    Since we don't support extensions right now I would argue we should just omit them rather than approaching it with no intent to actually parse and use it. I'm running into situations where the parser will get tripped up in the bitstream and try to allocate gigs of memory.

    Additionally:

    • excluded_channels.Additional_excluded_chns was never allocated resulting in a panic
    • Add checks to not allocate the world elsewhere as well
    opened by LimitlessEarth 2
  • Package level vars - which should be constant - mutated in aacwindowgrouping.go

    Package level vars - which should be constant - mutated in aacwindowgrouping.go

    In the following block of code:

    	case ONLY_LONG_SEQUENCE, LONG_START_SEQUENCE, LONG_STOP_SEQUENCE:
    		info.num_windows = 1
    		info.num_window_groups = 1
    		info.window_group_length = make([]uint8, info.num_window_groups)
    		info.window_group_length[info.num_window_groups-1] = 1
    		info.num_swb = num_swb_long_windows[idx][sfi]
    
    		info.sect_sfb_offset = append(info.sect_sfb_offset, swb_offset_long_window[sfi][:info.num_swb])
    		info.swb_offset = swb_offset_long_window[sfi][:info.num_swb]
    
    		// Special cases for 960's final values so we don't have to duplicate tables
    		info.sect_sfb_offset[0] = append(info.sect_sfb_offset[0], framelength)
    		info.swb_offset = append(info.swb_offset, framelength)
    

    The line info.sect_sfb_offset[0] = append(info.sect_sfb_offset[0], framelength) ends up mutating some of the underlying swb_offset... slices. This mutation prevents the code from being thread safe, and may have other impacts. I think the root of the issue is

    The following playground provides an MVCE of an analogous situation: https://play.golang.org/p/BMcQU5-FS5

    I think @jessejlt has an even simpler example.

    opened by cveazey 2
  • panic: runtime error: index out of range in gaad.(*ADTS).excluded_channels

    panic: runtime error: index out of range in gaad.(*ADTS).excluded_channels

    Hello.

    I found a index out of range bug in gaad.

    Please confirm.

    Thanks.

    reproduce code:

    package gaad
    
    import (
    	"testing"
    )
    
    func TestFuzzCrashers(t *testing.T) {
    
    	var crashers = []string{
    		"\xff\xf10\xdc0\xb8\xad",
    	}
    
    	for _, f := range crashers {
    		ParseADTS([]byte(f))
    	}
    }
    

    Crash Log:

    --- FAIL: TestFuzzCrashers (0.00s)
    panic: runtime error: index out of range [recovered]
    	panic: runtime error: index out of range
    
    goroutine 17 [running]:
    testing.tRunner.func1(0xc42004d5f0)
    	/usr/lib/go-1.8/src/testing/testing.go:622 +0x29d
    panic(0x5337a0, 0x5fbe10)
    	/usr/lib/go-1.8/src/runtime/panic.go:489 +0x2cf
    github.com/Comcast/gaad.(*ADTS).excluded_channels(0xc42004d6c0, 0xc42009b301, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1832 +0x2ca
    github.com/Comcast/gaad.(*ADTS).dynamic_range_info(0xc42004d6c0, 0x4, 0xb)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1787 +0x3f7
    github.com/Comcast/gaad.(*ADTS).extension_payload(0xc42004d6c0, 0x2, 0x4f0006, 0x0, 0x0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1731 +0x32b
    github.com/Comcast/gaad.(*ADTS).fill_element(0xc42004d6c0, 0x6, 0x6, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1293 +0xbf
    github.com/Comcast/gaad.(*ADTS).raw_data_block(0xc42004d6c0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1020 +0x269
    github.com/Comcast/gaad.(*ADTS).adts_frame(0xc42004d6c0, 0xc420019800, 0x7)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:796 +0x91
    github.com/Comcast/gaad.ParseADTS(0xc4200b52a0, 0x7, 0x8, 0xc4200b52a0, 0x7, 0x8)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:773 +0xbe
    github.com/Comcast/gaad.TestFuzzCrashers(0xc42004d5f0)
    	/home/karas/go/src/github.com/Comcast/gaad/fuzzer_test.go:14 +0x90
    testing.tRunner(0xc42004d5f0, 0x5647e0)
    	/usr/lib/go-1.8/src/testing/testing.go:657 +0x96
    created by testing.(*T).Run
    	/usr/lib/go-1.8/src/testing/testing.go:697 +0x2ca
    exit status 2
    FAIL	github.com/Comcast/gaad	0.009s
    
    opened by gy741 1
  • panic: runtime error: index out of range in gaad.window_grouping

    panic: runtime error: index out of range in gaad.window_grouping

    Hello.

    I found a index out of range bug in gaad.

    Please confirm.

    Thanks.

    reproduce code:

    package gaad
    
    import (
    	"testing"
    )
    
    func TestFuzzCrashers(t *testing.T) {
    
    	var crashers = []string{
    		"\xff\xf10\x850",
    	}
    
    	for _, f := range crashers {
    		ParseADTS([]byte(f))
    	}
    }
    
    

    Crash Log:

    --- FAIL: TestFuzzCrashers (0.00s)
    panic: runtime error: index out of range [recovered]
    	panic: runtime error: index out of range
    
    goroutine 17 [running]:
    testing.tRunner.func1(0xc42004d520)
    	/usr/lib/go-1.8/src/testing/testing.go:622 +0x29d
    panic(0x5337a0, 0x5fbe10)
    	/usr/lib/go-1.8/src/runtime/panic.go:489 +0x2cf
    github.com/Comcast/gaad.window_grouping(0xc420073720, 0x400000c)
    	/home/karas/go/src/github.com/Comcast/gaad/aacwindowgrouping.go:151 +0xe30
    github.com/Comcast/gaad.(*ADTS).ics_info(0xc42004d5f0, 0x0, 0x4f4e00, 0x5e9b00, 0xc4200b52d0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1114 +0x2b9
    github.com/Comcast/gaad.(*ADTS).individual_channel_stream(0xc42004d5f0, 0x0, 0x0, 0x5e9b00, 0xc4200b52c0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1398 +0x3ad
    github.com/Comcast/gaad.(*ADTS).coupling_channel_element(0xc42004d5f0, 0x3, 0x2, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1204 +0x300
    github.com/Comcast/gaad.(*ADTS).raw_data_block(0xc42004d5f0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1006 +0x8b3
    github.com/Comcast/gaad.(*ADTS).adts_frame(0xc42004d5f0, 0xc420019800, 0x5)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:796 +0x91
    github.com/Comcast/gaad.ParseADTS(0xc4200b52a0, 0x5, 0x8, 0xc4200b52a0, 0x5, 0x8)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:773 +0xbe
    github.com/Comcast/gaad.TestFuzzCrashers(0xc42004d520)
    	/home/karas/go/src/github.com/Comcast/gaad/fuzzer_test.go:14 +0x90
    testing.tRunner(0xc42004d520, 0x5647e0)
    	/usr/lib/go-1.8/src/testing/testing.go:657 +0x96
    created by testing.(*T).Run
    	/usr/lib/go-1.8/src/testing/testing.go:697 +0x2ca
    exit status 2
    FAIL	github.com/Comcast/gaad	0.011s
    
    opened by gy741 1
  • panic: runtime error: index out of range in gaad.(*ADTS).adts_header_error_check

    panic: runtime error: index out of range in gaad.(*ADTS).adts_header_error_check

    Hello.

    I found a index out of range bug in gaad.

    Please confirm.

    Thanks.

    reproduce code:

    package gaad
    
    import (
    	"testing"
    )
    
    func TestFuzzCrashers(t *testing.T) {
    
    	var crashers = []string{
    		"\xff\xf00000\x010",
    	}
    
    	for _, f := range crashers {
    		ParseADTS([]byte(f))
    	}
    }
    
    

    Crash Log:

    --- FAIL: TestFuzzCrashers (0.00s)
    panic: runtime error: index out of range [recovered]
    	panic: runtime error: index out of range
    
    goroutine 17 [running]:
    testing.tRunner.func1(0xc42004d380)
    	/usr/lib/go-1.8/src/testing/testing.go:622 +0x29d
    panic(0x5337a0, 0x5fbe10)
    	/usr/lib/go-1.8/src/runtime/panic.go:489 +0x2cf
    github.com/Comcast/gaad.(*ADTS).adts_header_error_check(0xc42004d450)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:895 +0xf8
    github.com/Comcast/gaad.(*ADTS).adts_frame(0xc42004d450, 0xc420019800, 0x8)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:801 +0xd9
    github.com/Comcast/gaad.ParseADTS(0xc4200b52a0, 0x8, 0x8, 0xc4200b52a0, 0x8, 0x8)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:773 +0xbe
    github.com/Comcast/gaad.TestFuzzCrashers(0xc42004d380)
    	/home/karas/go/src/github.com/Comcast/gaad/fuzzer_test.go:14 +0x90
    testing.tRunner(0xc42004d380, 0x5647e0)
    	/usr/lib/go-1.8/src/testing/testing.go:657 +0x96
    created by testing.(*T).Run
    	/usr/lib/go-1.8/src/testing/testing.go:697 +0x2ca
    exit status 2
    FAIL	github.com/Comcast/gaad	0.009s
    
    opened by gy741 1
  • Fixing parse for SBR extension channel pair element

    Fixing parse for SBR extension channel pair element

    When parsing an SBR extension containing an sbr_channel_pair_element, the value of bs_frame_class (from sbr_grid) is overwritten, rather than stored per channel. The value of bs_frame_class is later needed to select the HCB used in sbr_envelope, and may cause a parse error when set incorrectly.

    The test added in this request, TestSbrChannelPairElementParse, run against the current head (7cb3b3c) demonstrates the issue:

    $ go test . -run ^TestSbrChannelPairElementParse  -v
    === RUN   TestSbrChannelPairElementParse
        aacparser_test.go:236: err (sbr extension payload malformed) must be nil
    --- FAIL: TestSbrChannelPairElementParse (0.00s)
    FAIL
    FAIL  github.com/Comcast/gaad 0.008s
    FAIL
    

    Both libfaad and FFmpeg set bs_frame_class per channel:

    Storing bs_frame_class per channel, as it is in this request, passes the aforementioned test and all other package tests.

    opened by jake-dog 1
  • panic: runtime error: slice bounds out of range in gaad.freq_derived

    panic: runtime error: slice bounds out of range in gaad.freq_derived

    Hello.

    I found a slice bounds out of range bug in gaad.

    Please confirm.

    Thanks.

    reproduce code:

    package gaad
    
    import (
    	"testing"
    )
    
    func TestFuzzCrashers(t *testing.T) {
    
    	var crashers = []string{
    			"\xff\xf1L0000\xda000000000000" +
    	        "0\xa8\xc3000n\xe40000\xbe\x99\xb10\x96\xfc\xea0" +
    	        "\xddڀ\x000}\xf70000g?\xf10\x00\x00000" +
    	        "\xb200\x8c\xe7Z00\xf7\[email protected]\xcb00\xcb#<\xdb1" +
    	        "\xde~0\xfc]",
    	}
    
    	for _, f := range crashers {
    		ParseADTS([]byte(f))
    	}
    }
    

    Crash Log:

    --- FAIL: TestFuzzCrashers (0.00s)
    panic: runtime error: slice bounds out of range [recovered]
    	panic: runtime error: slice bounds out of range
    
    goroutine 17 [running]:
    testing.tRunner.func1(0xc42004d2b0)
    	/usr/lib/go-1.8/src/testing/testing.go:622 +0x29d
    panic(0x5337a0, 0x5fbe20)
    	/usr/lib/go-1.8/src/runtime/panic.go:489 +0x2cf
    github.com/Comcast/gaad.freq_derived(0xc420084380, 0xc401021806)
    	/home/karas/go/src/github.com/Comcast/gaad/aacsbrtables.go:250 +0x487
    github.com/Comcast/gaad.derive_sbr_tables(0xc420084380, 0x60102050c00, 0xc4200b5350, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacsbrtables.go:88 +0x1ac
    github.com/Comcast/gaad.(*ADTS).sbr_extension_data(0xc42004d380, 0x7, 0x102, 0x0, 0x0, 0xc420019800, 0x40ef01)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1903 +0xeb
    github.com/Comcast/gaad.(*ADTS).extension_payload(0xc42004d380, 0x7, 0x4f0002, 0x0, 0x0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1740 +0x3d4
    github.com/Comcast/gaad.(*ADTS).fill_element(0xc42004d380, 0x2, 0x6, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1293 +0xbf
    github.com/Comcast/gaad.(*ADTS).raw_data_block(0xc42004d380, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1020 +0x269
    github.com/Comcast/gaad.(*ADTS).adts_frame(0xc42004d380, 0xc420019800, 0x55)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:796 +0x91
    github.com/Comcast/gaad.ParseADTS(0xc420017b00, 0x55, 0x60, 0xc420017b00, 0x55, 0x60)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:773 +0xbe
    github.com/Comcast/gaad.TestFuzzCrashers(0xc42004d2b0)
    	/home/karas/go/src/github.com/Comcast/gaad/fuzzer_test.go:18 +0x90
    testing.tRunner(0xc42004d2b0, 0x564830)
    	/usr/lib/go-1.8/src/testing/testing.go:657 +0x96
    created by testing.(*T).Run
    	/usr/lib/go-1.8/src/testing/testing.go:697 +0x2ca
    exit status 2
    FAIL	github.com/Comcast/gaad	0.005s
    
    opened by gy741 0
  • panic: runtime error: len out of range in (*BitReader).ReadBitsToByteArray

    panic: runtime error: len out of range in (*BitReader).ReadBitsToByteArray

    Hello.

    I found a len out of range bug in gaad.

    Please confirm.

    Thanks.

    reproduce code:

    package gaad
    
    import (
    	"testing"
    )
    
    func TestFuzzCrashers(t *testing.T) {
    
    	var crashers = []string{
    			"\xff\xf100000\xc3\xdc",
    	}
    
    	for _, f := range crashers {
    		ParseADTS([]byte(f))
    	}
    }
    

    Crash Log:

    --- FAIL: TestFuzzCrashers (0.00s)
    panic: runtime error: makeslice: len out of range [recovered]
    	panic: runtime error: makeslice: len out of range
    
    goroutine 17 [running]:
    testing.tRunner.func1(0xc42004d520)
    	/usr/lib/go-1.8/src/testing/testing.go:622 +0x29d
    panic(0x5337a0, 0xc4200b52e0)
    	/usr/lib/go-1.8/src/runtime/panic.go:489 +0x2cf
    github.com/Comcast/gaad/bitreader.(*BitReader).ReadBitsToByteArray(0xc420019800, 0xfffffffffffffff9, 0x5e9b00, 0xc4200b52d0, 0xc4200b52c0, 0xc420027cf0, 0x4f4ef6)
    	/home/karas/go/src/github.com/Comcast/gaad/bitreader/bitreader.go:129 +0x72
    github.com/Comcast/gaad.(*ADTS).sbr_extension_data(0xc42004d5f0, 0x1, 0x100, 0x0, 0x0, 0xc420019800, 0x40ef01)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1913 +0x1b1
    github.com/Comcast/gaad.(*ADTS).extension_payload(0xc42004d5f0, 0x1, 0x4f0000, 0x0, 0x0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1740 +0x3d4
    github.com/Comcast/gaad.(*ADTS).fill_element(0xc42004d5f0, 0x0, 0x6, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1293 +0xbf
    github.com/Comcast/gaad.(*ADTS).raw_data_block(0xc42004d5f0, 0x0, 0x0)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:1020 +0x269
    github.com/Comcast/gaad.(*ADTS).adts_frame(0xc42004d5f0, 0xc420019800, 0x9)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:796 +0x91
    github.com/Comcast/gaad.ParseADTS(0xc4200b52a0, 0x9, 0x10, 0xc4200b52a0, 0x9, 0x10)
    	/home/karas/go/src/github.com/Comcast/gaad/aacparser.go:773 +0xbe
    github.com/Comcast/gaad.TestFuzzCrashers(0xc42004d520)
    	/home/karas/go/src/github.com/Comcast/gaad/fuzzer_test.go:14 +0x90
    testing.tRunner(0xc42004d520, 0x5647e0)
    	/usr/lib/go-1.8/src/testing/testing.go:657 +0x96
    created by testing.(*T).Run
    	/usr/lib/go-1.8/src/testing/testing.go:697 +0x2ca
    exit status 2
    FAIL	github.com/Comcast/gaad	0.010s
    
    opened by gy741 0
Owner
Comcast brings together the best in media and technology to create the world's best entertainment and online experiences
null
Package flac provides access to FLAC (Free Lossless Audio Codec) streams.

flac This package provides access to FLAC (Free Lossless Audio Codec) streams. Documentation Documentation provided by GoDoc. flac: provides access to

null 208 May 14, 2022
Go tools for audio processing & creation ?

GoAudio ? GoAudio is an audio processing library, currently supporting WAVE files, although some tools such as the synth and breakpoints are encoding

Dylan Meeus 221 May 7, 2022
Mini audio library

malgo Go bindings for miniaudio library. Requires cgo but does not require linking to anything on the Windows/macOS and it links only -ldl on Linux/BS

Milan Nikolic 171 May 7, 2022
Sequence-based Go-native audio mixer for music apps

Mix https://github.com/go-mix/mix Sequence-based Go-native audio mixer for music apps See demo/demo.go: package main import ( "fmt" "os" "time"

null 154 Apr 11, 2022
Go bindings for the PortAudio audio I/O library

portaudio This package provides an interface to the PortAudio audio I/O library. See the package documentation for details. To build this package you

Gordon Klaus 503 May 6, 2022
Go package capable of generating waveform images from audio streams. MIT Licensed.

waveform Go package capable of generating waveform images from audio streams. MIT Licensed. This library supports any audio streams which the azul3d/e

Matt Layher 349 Apr 18, 2022
CLI audio player written in go.

A very minimal CLI audio player.

Dave Hulihan 42 Apr 8, 2022
alto is a program built for audio management.

alto, a music organizer alto is a program built for audio management. It's purpose is to provide the user the means to create a path construct to move

null 20 Apr 5, 2022
Terrible Audio Downloader

Terrible Audio Downloader This is just a small go project I did for myself, to manage my audio library to get away from spotify. All it does is downlo

null 0 Oct 30, 2021
Audio visualizer in Go

demo_audio_visualizer Simple audio visualizer in Go Used libraries: raylib-go go-mp3 oto go-dsp To disable the additional console window on Windows OS

Miretz 1 Mar 8, 2022
A "native" ogg vorbis decoder for Go (uses inline stb_vorbis)

vorbis This Go package provides a "native" ogg vorbis decoder, but still requires cgo, as it uses inline code from stb_vorbis. Someday, it won't. The

Steve McCoy 31 May 4, 2022
Local-audio - Web walking audio tour platform proof-of-concept

Goal: Proof of concept for a Web Audio walk platform Data retention dynamdo db "time to live" expires in 1 day from creation of record set in add.go s

Kai Hendry 3 Jan 9, 2022
Nfc-sun-decoder - A Decoder for NXP 424 DNA SUN (Secure Unique) messages

NFC SUN Decoder A Decoder for NXP 424 DNA SUN (Secure Unique) messages This library makes decoding 424 DNA SUN messages easier. While the 424 DNA chip

Jonathan Bartlett 1 Feb 12, 2022
COBS implementation in Go (Decoder) and C (Encoder & Decoder) with tests.

COBS Table of Contents About The project COBS Specification Getting Started 3.1. Prerequisites 3.2. Installation 3.3. Roadmap Contributing License Con

Thomas Höhenleitner 2 May 7, 2022
Package flac provides access to FLAC (Free Lossless Audio Codec) streams.

flac This package provides access to FLAC (Free Lossless Audio Codec) streams. Documentation Documentation provided by GoDoc. flac: provides access to

null 208 May 14, 2022
Go tools for audio processing & creation ?

GoAudio ? GoAudio is an audio processing library, currently supporting WAVE files, although some tools such as the synth and breakpoints are encoding

Dylan Meeus 221 May 7, 2022
Mini audio library

malgo Go bindings for miniaudio library. Requires cgo but does not require linking to anything on the Windows/macOS and it links only -ldl on Linux/BS

Milan Nikolic 171 May 7, 2022
Sequence-based Go-native audio mixer for music apps

Mix https://github.com/go-mix/mix Sequence-based Go-native audio mixer for music apps See demo/demo.go: package main import ( "fmt" "os" "time"

null 154 Apr 11, 2022
Go bindings for the PortAudio audio I/O library

portaudio This package provides an interface to the PortAudio audio I/O library. See the package documentation for details. To build this package you

Gordon Klaus 503 May 6, 2022
Go package capable of generating waveform images from audio streams. MIT Licensed.

waveform Go package capable of generating waveform images from audio streams. MIT Licensed. This library supports any audio streams which the azul3d/e

Matt Layher 349 Apr 18, 2022
CLI audio player written in go.

A very minimal CLI audio player.

Dave Hulihan 42 Apr 8, 2022
Go bindings for audio capture and playback with ALSA and libasound

Go ALSA bindings These bindings allow capture and playback of audio via ALSA using the alsa-lib library. Installation go get github.com/cocoonlife/goa

null 35 Mar 21, 2022
Process audio files with pipelined DSP framework

phono is a command for audio processing. It's build on top of pipelined DSP framework. Installation Prerequisites: lame to enable mp3 encoding To link

pipelined 46 May 5, 2022
Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio.

pulse-simple Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio. The full Simple API is supported, including channel m

Tommy 19 Jun 21, 2021
Go package captcha implements generation and verification of image and audio CAPTCHAs.

Package captcha ⚠️ Warning: this captcha can be broken by advanced OCR captcha breaking algorithms. import "github.com/dchest/captcha" Package captch

Dmitry Chestnykh 1.6k May 19, 2022
Discord screenshare, now with audio!

audio-share-discord-linux Discord screenshare, now with audio! Build Instructions go build . chmod +x audio-share-discord-linux ./audio-share-discord-

null 40 Apr 17, 2022
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams

rtsp-simple-server is a simple, ready-to-use and zero-dependency RTSP / RTMP server and proxy, a software that allows users to publish, read and proxy live video and audio streams. RTSP is a specification that describes how to perform these operations with the help of a server, that is contacted by both publishers and readers and relays the publisher's streams to the readers.

Alessandro Ros 3k May 9, 2022
LiveKit - Open source, distributed video/audio rooms over WebRTC

LiveKit is an open source project that provides scalable, multi-user conferencing over WebRTC. It's designed to give you everything you need to build real time video/audio capabilities in your applications.

LiveKit 2.4k May 10, 2022
A simple library to extract video and audio frames from media containers (based on libav).

Reisen A simple library to extract video and audio frames from media containers (based on libav, i.e. ffmpeg). Dependencies The library requires libav

NightGhost 41 Apr 29, 2022