You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NoiseTorch/main.go

105 lines
2.1 KiB
Go

package main
import (
"image"
"io/ioutil"
"log"
"os"
"github.com/aarzilli/nucular/font"
"github.com/lawl/pulseaudio"
"github.com/aarzilli/nucular"
"github.com/aarzilli/nucular/style"
)
//go:generate go run scripts/embedlibrnnoise.go
//go:generate go run scripts/embedversion.go
type input struct {
ID string
Name string
isMonitor bool
checked bool
}
func main() {
f, err := os.OpenFile("/tmp/noisetorch.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
log.Fatalf("error opening file: %v\n", err)
}
defer f.Close()
log.SetOutput(f)
log.Printf("Application starting. Version: %s", version)
initializeConfigIfNot()
rnnoisefile := dumpLib()
defer removeLib(rnnoisefile)
ui := uistate{}
ui.config = readConfig()
ui.librnnoise = rnnoisefile
paClient, err := pulseaudio.NewClient()
defer paClient.Close()
ui.paClient = paClient
if err != nil {
log.Fatalf("Couldn't create pulseaudio client\n")
}
go updateNoiseSupressorLoaded(paClient, &ui.noiseSupressorState)
sources, err := paClient.Sources()
if err != nil {
log.Fatalf("Couldn't fetch sources from pulseaudio\n")
}
inputs := make([]input, 0)
for i := range sources {
if sources[i].Name == "nui_mic_remap" {
continue
}
var inp input
inp.ID = sources[i].Name
inp.Name = sources[i].PropList["device.description"]
inp.isMonitor = (sources[i].MonitorSourceIndex != 0xffffffff)
inputs = append(inputs, inp)
}
ui.inputList = inputs
wnd := nucular.NewMasterWindowSize(0, "NoiseTorch", image.Point{550, 300}, func(w *nucular.Window) {
updatefn(w, &ui)
})
ui.masterWindow = &wnd
style := style.FromTheme(style.DarkTheme, 2.0)
style.Font = font.DefaultFont(16, 1)
wnd.SetStyle(style)
wnd.Main()
}
func dumpLib() string {
f, err := ioutil.TempFile("", "librnnoise-*.so")
if err != nil {
log.Fatalf("Couldn't open temp file for librnnoise\n")
}
f.Write(libRNNoise)
log.Printf("Wrote temp librnnoise to: %s\n", f.Name())
return f.Name()
}
func removeLib(file string) {
err := os.Remove(file)
if err != nil {
log.Printf("Couldn't delete temp librnnoise: %v\n", err)
}
log.Printf("Deleted temp librnnoise: %s\n", file)
}