Skip to content

Instantly share code, notes, and snippets.

@suapapa
Created April 19, 2020 08:20
Show Gist options
  • Save suapapa/d598d99360497252433af430902bb49e to your computer and use it in GitHub Desktop.
Save suapapa/d598d99360497252433af430902bb49e to your computer and use it in GitHub Desktop.
raw audio recording with portaudio and golang
package main
import (
"encoding/binary"
"fmt"
"os"
"os/signal"
"time"
"github.com/gordonklaus/portaudio"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("missing required argument: output file name")
return
}
fmt.Println("Recording. Press Ctrl-C to stop.")
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, os.Kill)
fileName := os.Args[1]
f, err := os.Create(fileName)
chk(err)
defer func() {
chk(f.Close())
}()
portaudio.Initialize()
time.Sleep(1)
defer portaudio.Terminate()
in := make([]int16, 64)
stream, err := portaudio.OpenDefaultStream(1, 0, 16000, len(in), in)
chk(err)
defer stream.Close()
chk(stream.Start())
loop:
for {
chk(stream.Read())
chk(binary.Write(f, binary.LittleEndian, in))
select {
case <-sig:
break loop
default:
}
}
chk(stream.Stop())
}
func chk(err error) {
if err != nil {
panic(err)
}
}
@lchernicharo
Copy link

Little question: when we deploy the app we don't need to install portaudio on the users' machines, right? We just have to do it on our developers machines, correct? Thanks

@rilysh
Copy link

rilysh commented May 6, 2024

If you also provide the shared library that the application will link, then no. A static binary also can be an option, but I'm not sure how Go does this.

@Ron-Zilber
Copy link

If I'm using "mpg123 - " to play the output file will it work ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment