Mini audio library

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)
Owner
Milan Nikolic
SysAdmin / Developer
Milan Nikolic
Comments
  • 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?.

  • 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?

  • 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?

  • address unsafe issues

    address unsafe issues

    go 1.19 is picking up a lot of misuse of unsafe pointers in this library when using the race flag. This PR doesn't rely on struct layouts for non-trivial types.

    • Addresses https://github.com/golang/go/issues/5253#issuecomment-909495001
  • 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
    
  • 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.

  • 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)

  • SIGSEGV from `ma_device_uninit`

    SIGSEGV from `ma_device_uninit`

    Encountered SIGSEGV when trying to execute Uninit() for a device. This happened to me even when I ran the example code in this repository. The recording seems to work as expected though, it's just that I keep getting SIGSEGV every time I want to close/uninit the device.

    How to reproduce: go run _examples/capture/capture.go

    Expected outcome: Successful execution

    Actual outcome:

    Recording...
    Press Enter to stop recording...
    
    fatal error: unexpected signal during runtime execution
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x7fe4d7ffe910 pc=0x7fe540daac99]
    
    runtime stack:
    runtime.throw({0x503538?, 0x219f790?})
            /usr/local/go/src/runtime/panic.go:992 +0x71
    runtime.sigpanic()
            /usr/local/go/src/runtime/signal_unix.go:802 +0x3a9
    
    goroutine 1 [syscall]:
    runtime.cgocall(0x49d520, 0xc000074c08)
            /usr/local/go/src/runtime/cgocall.go:157 +0x5c fp=0xc000074be0 sp=0xc000074ba8 pc=0x40dc9c
    github.com/gen2brain/malgo._Cfunc_ma_device_uninit(0x219f730)
            _cgo_gotypes.go:1569 +0x45 fp=0xc000074c08 sp=0xc000074be0 pc=0x498e85
    github.com/gen2brain/malgo.(*Device).Uninit.func1(0x4ebd40?)
            [REDACTED]/malgo/device.go:146 +0x3a fp=0xc000074c40 sp=0xc000074c08 pc=0x49a61a
    github.com/gen2brain/malgo.(*Device).Uninit(0xc0001a8030)
            [REDACTED]/malgo/device.go:146 +0xb3 fp=0xc000074c70 sp=0xc000074c40 pc=0x49a593
    main.main()
            [REDACTED]/malgo/_examples/capture/capture.go:68 +0x4f2 fp=0xc000074f80 sp=0xc000074c70 pc=0x49ca52
    runtime.main()
            /usr/local/go/src/runtime/proc.go:250 +0x212 fp=0xc000074fe0 sp=0xc000074f80 pc=0x43e372
    runtime.goexit()
            /usr/local/go/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc000074fe8 sp=0xc000074fe0 pc=0x466fa1
    exit status 2
    

    Environment:

    • OS: Ubuntu 22.04
    • Go version: 1.18.1
  • 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.

  • 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.

  • 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?

  • Extend WasapiDeviceConfig to support loopbackProcessID and loopbackProcessExclude

    Extend WasapiDeviceConfig to support loopbackProcessID and loopbackProcessExclude

    Miniaudio recently added experimental support for windows application loopback audio capture to specify/exclude process id It would be nice to use this new feature in malgo. Related: https://github.com/mackron/miniaudio/issues/484

  • Q: how to encode input audio bytes to PCM properly

    Q: how to encode input audio bytes to PCM properly

    I am a bit of a novice to audio encoding. I am attempting to capture desktop audio using WASAPI loopback Code here: https://gist.github.com/husainhz7/c8d4fac481a3b860243566835afaeca0

    I want to feed this audio to libopus to encode an opus stream. libopus requires PCM encoded floats/ints. What is the best way to do that here. I see that miniaudio provides 'ma_encoder_write_pcm_frames' which I don't think is supported by malgo.

  • 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 ❤️

  • 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

  • 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.

  • 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.

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

Jan 1, 2023
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

Jan 5, 2023
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

Oct 24, 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

Dec 23, 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"

Dec 1, 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

Nov 17, 2022
CLI audio player written in go.
CLI audio player written in go.

A very minimal CLI audio player.

Dec 13, 2022
alto is a program built for audio management.
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

Oct 10, 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

Oct 30, 2021
Audio visualizer in Go
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

Dec 4, 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

Dec 31, 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

Jan 4, 2023
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

Sep 21, 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

Oct 15, 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

Nov 18, 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

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

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

Jan 1, 2023
A simple library to extract video and audio frames from media containers (based on libav).
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

Jan 2, 2023
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

Dec 10, 2022