Live data from Hacker News

Audio from Scratch with Go: Stereo Panning

dylanmeeus.github.io

11–20 of 24 posts

Re: Audio from Scratch with Go: Stereo Panning

#12
post #11

Wonder if this should take into account pan laws: * https://en.wikipedia.org/wiki/Pan_law * https://www.image-line.com/support/flstudio_online_manual/ht... (search for "panning law")

I believe this minimal implementation actually over-compensates for pan law because it has a -6dB center. In other words, if you ask this tool for zero panning, it will actually divide the amplitude by 2 (probably not what most people would expect!) In DAWs, -3dB or 0dB center is more common. In a tool like this I would suggest a 0dB center by default, so that zero panning does not change the amplitude. This would be what you second link calls triangular pan law.

Re: Audio from Scratch with Go: Stereo Panning

#13
post #6
post #4

Earlier quoted context omitted.

Her, author here! :) Glad you liked it! I don't have concrete plans actually, just doing this for fun so we'll see how far I get :)

Might have been an interesting point to stream this data (basic sine) to an audio output instead of file. That's more immediately hands on. (Sorry, this refers to the first entry in your audio/go series)

that can easily get pretty tricky if you don't want to depend a lot on libraries, which the last time I checked weren't great for golang in this area. I have worked with ALSA (advanced linux sound architecture) a bit, implementing basic midi input from a keyboard + sound generators + plugins with go interfaces and pkg/plugin + stream to audio output... and it's a mess of devices, buffers and formats. and that's only for one OS. and if you start doing anything non-trivial, making the programs work well in real-time is not for the faint of heart.

if there was a single format supported everywhere, minimum buffer sizes and a common API for all OSes, it would be a whole another, much more pleasant story

Re: Audio from Scratch with Go: Stereo Panning

#14
This is a fun tutorial for processing audio in Go, but generally panning will sound bad if you only adjust the amplitude/level.

The two important missing pieces are phase delay and frequency-specific attenuation (the "head" model). Audio coming from the left side of your head reaches your left ear first, then your right ear later. Also, your head blocks certain frequencies more than others. Both of these effects are super noticeable and necessary to make panning sound "3D".

Adding these things to the Go code would actually be fairly straightforward, you just need to add a filter to `applyPan`. The filter would only need around 12 taps to sound good.

Here's a javascript tutorial which includes both of these additional features:

https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_A...

Re: Audio from Scratch with Go: Stereo Panning

#15

This is a fun tutorial for processing audio in Go, but generally panning will sound bad if you only adjust the amplitude/level. The two important missing pieces are phase delay and frequency-specific attenuation (the "head" model). Audio coming from the left side of your head reaches your left ear first, then your right ear later. Also, your head blocks certain frequencies more than others. Both of these effects are…

You say this like it's bog standard but adding HRTF and compensation for speaker distance are not part of a standard panning algorithm. This is more likely to exist in another module, such as for ambisonics or correction.

Re: Audio from Scratch with Go: Stereo Panning

#16

This is a fun tutorial for processing audio in Go, but generally panning will sound bad if you only adjust the amplitude/level. The two important missing pieces are phase delay and frequency-specific attenuation (the "head" model). Audio coming from the left side of your head reaches your left ear first, then your right ear later. Also, your head blocks certain frequencies more than others. Both of these effects are…

The tutorial you linked to doesn't explain how to implement any of that stuff. But it doesn't matter because the panner in the article is fine as it is. Simple panning is often the best option in music, since filtering your sounds will just make your mix sound bad on common sound systems. Left/right delay will be great on headphones but create phase effects on common speaker setups, often making things worse as well. I don't think a general-purpose tool should add potentially unwanted effects like that.

Re: Audio from Scratch with Go: Stereo Panning

#17
Having had to do some mass audio stuff on datasets recently I discovered SoX - a self proclaimed "swiss army knife" for sound processing. Delighted to find multiple bindings in Go, I eventually decided to just do it in python as there was a very solid library there and it was just simpler for my use case.

Re: Audio from Scratch with Go: Stereo Panning

#18

Having had to do some mass audio stuff on datasets recently I discovered SoX - a self proclaimed "swiss army knife" for sound processing. Delighted to find multiple bindings in Go, I eventually decided to just do it in python as there was a very solid library there and it was just simpler for my use case.

The command line application is also quite useful. Usually you wouldn't need to go into a programming language at all to wield its power

Re: Audio from Scratch with Go: Stereo Panning

#19
post #15

This is a fun tutorial for processing audio in Go, but generally panning will sound bad if you only adjust the amplitude/level. The two important missing pieces are phase delay and frequency-specific attenuation (the "head" model). Audio coming from the left side of your head reaches your left ear first, then your right ear later. Also, your head blocks certain frequencies more than others. Both of these effects are…

You say this like it's bog standard but adding HRTF and compensation for speaker distance are not part of a standard panning algorithm. This is more likely to exist in another module, such as for ambisonics or correction.

HRTF is often used in game audio and AR [2], but never [1] as a mix effect in commercial DAWs.

HRTF is a blunt instrument anyway. It's supposed to model your head and not just a standard imaginary generic head, and that's impossible without sticking a microphone inside each ear.

It's also a headphone-only effect. As soon as you play the sound through speakers you get room reflections and all kinds of other artefacts which wash out the spatial detail.

[1] Almost never. There are HRTF plugins, but they're hardly ever used in music mixing.

[2] Apple has some HRTF patents for recording audio on multiple channels - not just two - using HRTFs to capture apparent depth.

Re: Audio from Scratch with Go: Stereo Panning

#20
post #16

This is a fun tutorial for processing audio in Go, but generally panning will sound bad if you only adjust the amplitude/level. The two important missing pieces are phase delay and frequency-specific attenuation (the "head" model). Audio coming from the left side of your head reaches your left ear first, then your right ear later. Also, your head blocks certain frequencies more than others. Both of these effects are…

The tutorial you linked to doesn't explain how to implement any of that stuff. But it doesn't matter because the panner in the article is fine as it is. Simple panning is often the best option in music, since filtering your sounds will just make your mix sound bad on common sound systems. Left/right delay will be great on headphones but create phase effects on common speaker setups, often making things worse as well.…

To be fair, it’s not general, it’s a “speaker only” tool. For headphones, it’s incredibly unnatural to have audio only coming into one ear without a delayed signal in the other. That simply never happens in the real world.
Post reply on HN