Mini audio library

Overview

malgo

TravisCI Build Status AppVeyor Build Status GoDoc Go Report Card

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/BSDs.

Installation

go get -u github.com/gen2brain/malgo

Documentation

Documentation on GoDoc. Also check examples.

Platforms

  • Windows (WASAPI, DirectSound, WinMM)
  • Linux (PulseAudio, ALSA, JACK)
  • FreeBSD/NetBSD/OpenBSD (OSS/audio(4)/sndio)
  • macOS (CoreAudio)
  • Android (OpenSL|ES, AAudio)
Issues
  • unable to obtain correct number of samples

    unable to obtain correct number of samples

    Hi everyone,

    I am trying to capture audio with minimum latency (10mSec) using malgo.

    I am having a problem. I am not sure if it is myself making a mistake or I have hit a bug in malgo. I do not know frankly.

    The brief statement is: -- I am using malgo 0.10.19 -- I need to capture from a predefined device @ 44.1ks/sec, with 16 bits, and 1 channel -- during a 10 seconds take, the number of bytes obtained is very different from the expected

    Details:

    The device used as input is being chosen out from the list of available devices produced by malgo itself, notice that the test selects one of the pre-listed devices. https://bitbucket.org/claudio_ortega/jambridge2/src/master/src/audio/test/device_capture_test.go

    It fills in the config structure with the selected capturing device ID. Then it starts the device, and then it waits for 10 seconds for the capturing device to inject the samples in the callback before stopping the capture and ending the test.

    ** Expected: The total number of bytes expected after 10 seconds is something around the theoretical

    2*44.1ks/sec*10sec = 882,000 bytes
    

    ** Observed: The config for the device occurs between lines 37 and 44. The output produced by the test case into the console is in here: https://bitbucket.org/claudio_ortega/jambridge2/src/master/notes/bug-report.txt between lines 75 and 128 Notice that the number of bytes obtained is 52800, when the expected is 882000

    It might be me making a mistake, that would be great to know. Can anybody see if I am missing something obvious here?.

    opened by claudio-ortega 11
  • How can I select a device to use for capture/playback manually?

    How can I select a device to use for capture/playback manually?

    Simply passing a pointer to the ID obtained from context.Devices doesn't work, as it always panics at runtime with panic: runtime error: cgo argument has Go pointer to Go pointer. Is there a way to do this?

    opened by fbrozovic 9
  • Capture example doesn't run on macOS 10.15.3?

    Capture example doesn't run on macOS 10.15.3?

    Hello, when I run the capture example on my Mac-mini (2018, Catalina 10.15.3) it exits early with this error:

    Assertion failed: (tNext <= framesReadFromClient+1), function ma_src_read_deinterleaved__linear, file /Users/craig/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h, line 30529

    The Mac mini doesn't have a microphone, but I have a guitar usb interface that is considered the default input device in sound preferences. Also, I'm running it in iterm, which does have access to the input device in the privacy settings. Would you expect this setup to work?

    opened by cswank 9
  • capture example does not compile

    capture example does not compile

    go run _examples/capture/capture.go
    # command-line-arguments
    _examples/capture/capture.go:25:14: deviceConfig.Format undefined (type malgo.DeviceConfig has no field or method Format)
    _examples/capture/capture.go:26:14: deviceConfig.Channels undefined (type malgo.DeviceConfig has no field or method Channels)
    _examples/capture/capture.go:34:60: deviceConfig.Format undefined (type malgo.DeviceConfig has no field or method Format)
    _examples/capture/capture.go:36:43: deviceConfig.Channels undefined (type malgo.DeviceConfig has no field or method Channels)
    _examples/capture/capture.go:47:3: unknown field 'Recv' in struct literal of type malgo.DeviceCallbacks
    _examples/capture/capture.go:49:33: too many arguments in call to malgo.InitDevice
    	have (malgo.Context, malgo.DeviceType, nil, malgo.DeviceConfig, malgo.DeviceCallbacks)
    	want (malgo.Context, malgo.DeviceConfig, malgo.DeviceCallbacks)
    _examples/capture/capture.go:67:45: deviceConfig.Channels undefined (type malgo.DeviceConfig has no field or method Channels)
    _examples/capture/capture.go:76:38: deviceConfig.Channels undefined (type malgo.DeviceConfig has no field or method Channels)
    _examples/capture/capture.go:81:3: unknown field 'Send' in struct literal of type malgo.DeviceCallbacks
    _examples/capture/capture.go:84:32: too many arguments in call to malgo.InitDevice
    	have (malgo.Context, malgo.DeviceType, nil, malgo.DeviceConfig, malgo.DeviceCallbacks)
    	want (malgo.Context, malgo.DeviceConfig, malgo.DeviceCallbacks)
    _examples/capture/capture.go:84:32: too many errors
    
    opened by djadala 7
  • Odd behavior after periodically capturing audio over a long period of time

    Odd behavior after periodically capturing audio over a long period of time

    Hey! This ain't so much an 'error' but a general usage type of question.

    So I wrote a program that is kind of based off of the capture example but using a timer. The source of that program is more or less here.

    The parameters I'm passing into malgo look like this:

    [Mike]
    pollDuration = 5 // Every five seconds, capture one second of audio.
    channels     = 1
    sampleRate   = 8000
    NoMMap       = 1
    bufferSize   = 1000
    

    Now, the application runs fine and it does exactly what I want it to do - which is to continuously detect whether or not my microphone is capturing audio. However, after probably, like, a few hours of running I start seeing problems from the perspective of other applications. If another application tries to grab control of the mic, then that application freezes up. This occurs even after I shut down my own application.

    Is this some sort of locking issues? Am I doing something grossly inefficient? The platform I'm on is Windows 10.

    Any and all help is super appreciated.

    opened by howdoicomputer 7
  • Latest version of mini_al

    Latest version of mini_al

    Do you have any plan to upgare mini_al? It has some API changes and improvements (https://github.com/dr-soft/mini_al/blob/891258a5b0c463ada17c544c438fb6fe6d4f148c/mini_al.h#L13100-L13135)

    opened by devfacet 5
  • API/release status?

    API/release status?

    Hello there and thank you for this wrapper! I want to know how stable the API is and whether you are planning to do any versioned releases?

    I intend to use the audio library and would like to extend it to support multiple operations in parallel; Right now for instance there's only one callback possible at a time. Changing this would require API-breaking changes. Hence my question whether you are planning to do a v1 release after such a contribution, or a v1 release now, followed by a v2 release.

    opened by dertseha 4
  • A not so small bunch of not so small fixes and improvements

    A not so small bunch of not so small fixes and improvements

    ContextConfig and DeviceConfig are now Go structs and are not compatible with CGO at all. This means we can use Go types and replace *byte with string and uint32 / uint8 with bool, and it also means that CGO will do all the nasty work of converting between C and Go for us and if Miniaudio gets updated and a struct field or something changes, there will be a nice, compile time error instead of random undefined behavior when the wrong field is accessed. We do need to convert between the C and Go versions of structs, but better boring self-updating code than code that could break at any moment.

    The AllocatedContext type is now Context, because the only place you could really allocate a context is in the C heap.

    InitContext and InitDevice no longer take an extra struct argument containing callbacks, the callbacks can be set in the context / device config instead.

    Updated the examples.

    Added the pointerList type, which is just a slice of unsafe.Pointer with methods to allocate strings and bytes and free all the pointers. We use this for converting Go strings into C strings and easily freeing everything when the context / device is freed. It has an optimization that converts empty Go strings into null pointers (which is what Miniaudio expects anyway) and it doesn't add null pointers to the list. In short, C strings are only allocated if the go string is set to something other than an empty value.

    Removed our logic that converts a Miniaudio error code to a string and use ma_result_description instead.

    All miniaudio constants are now resolved by CGO. At least one of them was already invalid because their values were defined manually, then Miniaudio was updated and the update added a new error code somewhere higher up the enum.

    Miniaudio now has an Error type. Errors returned by Miniaudio functions are now comparable with the Miniaudio error constants, except that MA_SUCCESS will be returned as a nil error. Even if we update Miniaudio and forget to add new error codes, users just won't have any constants to compare the error value to. Everything else will work, though.

    All Miniaudio error code constants now have the Err prefix.

    DeviceConfig now has the Opensl, CoreAudio and Aaudio fields which were apparently never added.

    Added many many new error codes that weren't already defined.

    FormatType is now Format. It doesn't make sense for some types to have a Type suffix but for other to not.

    Optimized goDataCallback so that the buffer size is calculated in C and we avoid a C> go > C call. I don't think it helped (the source of my high-ish CPU usage must be somewhere else) but can't hurt.

    When implementing methods on any type that's a uintptr such as Device, make sure the receiver isn't *self. This will cause problems if you try to convert self to an unsafe.Pointer, because of course it's not pointing where you think it's pointing.

    Added Device.SetDataCallback and Device.SetStopCallback, which let us set the data and stop callbacks of a device, even while it's running. This works because we have a mutex and aren't changing the actual C callback, just the user-provided function on the Go side.

    Implemented (Format).String, which returns a description of the format using ma_get_format_name.

    Replaced Context.Devices with Context.PlaybackDevices, Context.CaptureDevices and context.AllDevices. More efficient and convenient for everyone!

    Added (*DeviceInfo).Formats which returns a slice of the devices supported formats

    DeviceConfig.PeriodSizeInMilliseconds is now PeriodSizeInDuration, which lets you set it using a time.Duration

    Simplified the capture example. Are you trying to scare away contributors or something?

    Added the FramesToDuration, DurationToFrames, BytesToFrames, FramesToBytes and BytesToDuration functions which let you convert between stuff.

    Any uintptr types like Device and Context now check if the pointer is nil when calling cptr. This can cause a segfault otherwise. Go still prints a helpful stack trace somehow, but let's just avoide it entirely.

    Added Backend.String method to the Backend type, and added the Backend method to the Context type which returns the current backend.

    Modified the enumerate example to print the currently used backend, and weather loopback devices are supported.

    Added the DataBuffer type which lets you easily convert the input and output pointers you get in a ma_device_callback_proc into either raw bytes or slices of any of the Miniaudio formats except for FormatF24. DataCallback now uses these types.

    Fixes #28 even though it's noted in the commit.

    opened by Keithcat1 3
  • Examples not compiled

    Examples not compiled

    Hi there, I run into some problems while trying to compile the examples. Error Reports:

    $ go run ./_examples/playback/playback.go ./track01.mp3
    # command-line-arguments
    _examples/playback/playback.go:74:14: deviceConfig.Format undefined (type malgo.DeviceConfig has no field or method Format)
    _examples/playback/playback.go:75:14: deviceConfig.Channels undefined (type malgo.DeviceConfig has no field or method Channels)
    _examples/playback/playback.go:79:59: deviceConfig.Format undefined (type malgo.DeviceConfig has no field or method Format)
    _examples/playback/playback.go:87:3: unknown field 'Send' in struct literal of type malgo.DeviceCallbacks
    _examples/playback/playback.go:89:33: too many arguments in call to malgo.InitDevice
            have (malgo.Context, malgo.DeviceType, nil, malgo.DeviceConfig, malgo.DeviceCallbacks)
            want (malgo.Context, malgo.DeviceConfig, malgo.DeviceCallbacks)
    

    It seems that examples don't match the code. I'm not sure... may the examples remain unchanged after updating?

    opened by gonearewe 3
  • Doesn't work with go mod?

    Doesn't work with go mod?

    microphone-demo export GO111MODULE=off
    ➜  microphone-demo go get -u github.com/gen2brain/malgo
    ➜  microphone-demo export GO111MODULE=on
    ➜  microphone-demo go get -u github.com/gen2brain/malgo
    go: finding github.com/gen2brain/malgo latest
    # github.com/gen2brain/malgo
    In file included from ../../../../pkg/mod/github.com/gen2brain/[email protected]/context.go:3:
    ./malgo.h:4:10: fatal error: 'miniaudio/miniaudio.h' file not found
    #include "miniaudio/miniaudio.h"
             ^~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    ➜  microphone-demo
    

    You can see that with go mod enabled, I cannot install this package at all. It installs without go mod.

    opened by tylerlong 3
  • Callback rewrite

    Callback rewrite

    Hello there!

    As discussed in #2 , this is a rewrite about the callbacks. It ended up becoming a huge rewrite after all, including your suggestion to split it up into a low-level API (sub-package mini_al) and the "high-level" API (in root).

    The concept of using the API is similar to what is current, though I split up the context and device (de)initialization to be more close to how mini_al as it. With regard to the context, there's a split up between the types Context and AllocatedContext. This was done to allow, in the future, to refer to the Context of any device. Such action would not allow to Free(), which is only available on an AllocatedContext. This is also the reason why Uninit() does not implicitly free.

    Apart from that, I tried to streamline the mini_al API a little bit, which is why there aren't various flavors on how to initialize the device config. Furthermore I separated how the callbacks are registered, to avoid having the user fiddle around with callback pointers.

    The callbacks are stored in maps now that the static handler (which is always registered) refers to. This is the core of the rewrite.

    Further changes are with respect to how DeviceID implements Stringer. Under windows, the ID is a utf-16 string, and printing that never looked good. Since integers also don't make good strings, I changed the string presentation of the ID to a hex-string.

    You'll also find that I split up the code into more files.

    The high-level API is a suggestion. Though, I find that it removes quite some flexibility and is also quite small in implementation. I wonder whether it is "necessary" to have this as at all and rather stick to the original layout and provide only a "reference" implementation for Reader/Writer based approaches.

    I wanted to create the pull-request yesterday, only to find that mini_al was updated recently - so I followed and brought it up to date as well, so no conflict comes.

    Most of the tests have made it to the new implementation, and the examples have been moved and adapted as well. (Common: have such non-formative parts start with underscores in their directory name.)

    Finally, as this is quite a rewrite, this pull-request is rather a request for comments. Especially the case with the high-level API is unsure.

    opened by dertseha 3
  • Microphone Not Working on built and notarized binary - MacOS

    Microphone Not Working on built and notarized binary - MacOS

    Hi,

    I am fairly new to go and just made a little binary to pipe the microphone sound to the google speech to text cloud API, it works fine when i do a go run of the code. It also works when i build on my mac machine.

    But once i build and notarized the binary to send it to someone in a zip, the microphone input recording don't seem to work when they run the app.

    Am i missing something ? Should i be able to build and expect all the included binaries of the plugin to work on the build ?

    i feel like it could be related to macOS microphone permission, when i launch the binary there is no prompt to give access to the microphone.

    Thanks ❤️

    opened by louistb 5
  • Warnings on macOS 12.1

    Warnings on macOS 12.1

    Hi, Perhaps you may find this useful, i am getting the following warnings running enumerate example on m1 macOS 12.1. It still lists device, these are just warnings.

    Thanks

    github.com/gen2brain/malgo

    In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24495:36: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24529:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24571:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24600:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24655:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24693:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24783:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24905:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24943:29: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:24972:41: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:26058:37: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:26087:37: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here In file included from miniaudio.c:4: /Users/q/go/pkg/mod/github.com/gen2brain/[email protected]/miniaudio.h:26533:37: warning: 'kAudioObjectPropertyElementMaster' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreAudio.framework/Headers/AudioHardwareBase.h:208:5: note: 'kAudioObjectPropertyElementMaster' has been explicitly marked deprecated here

    opened by conotto 0
  • Convert all Malgo structs to Go representations

    Convert all Malgo structs to Go representations

    This changes the ContextConfig, DeviceConfig and DeviceInfo structs to use Go types which are easier to use, require less integer conversion, safer, and we use CGO to figure out struct field offsets by manually converting structs so everything will work properly when Miniaudio updates. This is a breaking change because the types and names of many fields of the before mentioned structs have changed. Everything else should still be the same. Also move all the callback stuff from miniaudio.c and malgo.h into callbacks.c and callbacks.h to make things tidier.

    opened by Keithcat1 10
  • DeviceInfo.Name function returns a string with null bytes in it

    DeviceInfo.Name function returns a string with null bytes in it

    Go strings shouldn't normally have null bytes, and this breaks stuff expecting them not to. Normally you convert a C string to a Go string with the C.GoString function, it takes a pointer to a C string and returns a Go string.

    opened by Keithcat1 1
  • Q: Why is iOS not supported?

    Q: Why is iOS not supported?

    malgo does not list iOS as a supported platform, but macOS. As far as I understand, Miniaudio is based on Core Audio for both macOS and iOS. So I am surprised by this restriction. Is this a hard constraint, i.e. is there a technical burden that prohibits deployment, or is it just not tested?

    Many thanks for an answer to help me out!

    opened by fdraxler 2
Owner
Milan Nikolic
SysAdmin / Developer
Milan Nikolic
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
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
GAAD (Go Advanced Audio Decoder)

GAAD (Go Advanced Audio Decoder) Package currently provides AAC parsing capabilities. This package performs a full parse of AAC-LC and HE-AACv1 bitstr

null 98 May 7, 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
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 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
? ID3 decoding and encoding library for Go

id3v2 Supported ID3 versions: 2.3, 2.4 Installation go get -u github.com/bogem/id3v2 Usage example package main import ( "fmt" "log" "github.com

Albert Nigmatzianov 243 May 3, 2022
♪ A low-level library to play sound on multiple platforms ♪

Oto (音) A low-level library to play sound. This package offers io.WriteCloser to play PCM sound. Platforms Windows macOS Linux FreeBSD OpenBSD Android

Hajime Hoshi 984 May 18, 2022
EasyMidi is a simple and reliable library for working with standard midi file (SMF)

EasyMidi EasyMidi is a simple and reliable library for working with standard midi file (SMF). Installing A step by step series of examples that tell y

null 38 Feb 17, 2022
Go library for searching on YouTube Music.

ytmusic Go library for searching on YouTube Music and getting other useful information. Installing go get github.com/raitonoberu/ytmusic Usage Search

Denis 7 Apr 14, 2022
Small application to convert my music library folder structure to 'crates' in the open-source DJ software Mixxx

Small application to convert my music library folder structure to 'crates' in the open-source DJ software Mixxx

Bart van Oort 1 May 8, 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
trojan-go trojan(mini) mini auth trojan golang go

trojan forked from https://github.com/p4gefau1t/trojan-go Usage build: go build -tags "full" client: ./trojan-go -client -remote xxx.com:443 -local

Fan 0 Feb 2, 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
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
A youtube library for retrieving metadata, and obtaining direct links to video-only/audio-only/mixed versions of videos on YouTube in Go.

A youtube library for retrieving metadata, and obtaining direct links to video-only/audio-only/mixed versions of videos on YouTube in Go. Install go g

José Pastor 3 Oct 22, 2021
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
GAAD (Go Advanced Audio Decoder)

GAAD (Go Advanced Audio Decoder) Package currently provides AAC parsing capabilities. This package performs a full parse of AAC-LC and HE-AACv1 bitstr

null 98 May 7, 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
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 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