Initial prototyping hackery.
This commit is contained in:
commit
d6f9ac7138
37
main.go
Normal file
37
main.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
"remote-mic/socketops"
|
||||||
|
"remote-mic/pulsectl"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func nop() {
|
||||||
|
fmt.Print("Listening for TCP connection on port 8080... ")
|
||||||
|
conn, err := socketops.AcceptConn(":8080")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
fmt.Println("Connection accepted!")
|
||||||
|
|
||||||
|
data := make(chan []byte, 10)
|
||||||
|
go socketops.HandleConn(conn, data)
|
||||||
|
socketops.HandleData(data)
|
||||||
|
|
||||||
|
fmt.Println("Exiting.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
pulsectl.LoadPipeSource(pulsectl.PipeSourceConfig{
|
||||||
|
"remote-mic",
|
||||||
|
"/dev/shm",
|
||||||
|
"s16le",
|
||||||
|
44100,
|
||||||
|
2,
|
||||||
|
})
|
||||||
|
time.Sleep(10 * time.Second)
|
||||||
|
pulsectl.UnloadPipeSource()
|
||||||
|
}
|
32
pulsectl/pulsectl.go
Normal file
32
pulsectl/pulsectl.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package pulsectl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os/exec"
|
||||||
|
"fmt"
|
||||||
|
"path"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
type PipeSourceConfig struct {
|
||||||
|
PipeName string
|
||||||
|
PipeDir string
|
||||||
|
Encoding string
|
||||||
|
Bitrate int
|
||||||
|
Channels int
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadPipeSource(config PipeSourceConfig) error {
|
||||||
|
cmd := exec.Command("pactl", "load-module", "module-pipe-source",
|
||||||
|
fmt.Sprintf("source_name=%s", config.PipeName),
|
||||||
|
fmt.Sprintf("file=%s", path.Join(config.PipeDir, config.PipeName)),
|
||||||
|
fmt.Sprintf("format=%s", config.Encoding),
|
||||||
|
fmt.Sprintf("rate=%d", config.Bitrate),
|
||||||
|
fmt.Sprintf("channels=%d", config.Channels),
|
||||||
|
)
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
func UnloadPipeSource() error {
|
||||||
|
cmd := exec.Command("pactl", "unload-module", "module-pipe-source")
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
51
socketops/socketops.go
Normal file
51
socketops/socketops.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package socketops
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
const bufSize = 1024
|
||||||
|
|
||||||
|
|
||||||
|
func AcceptConn(connstr string) (net.Conn, error) {
|
||||||
|
addr, err := net.ResolveTCPAddr("tcp", connstr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
sock, err := net.ListenTCP("tcp", addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
conn, err := sock.AcceptTCP()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
conn.SetNoDelay(true)
|
||||||
|
return conn, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func HandleConn(conn net.Conn, out chan<- []byte) {
|
||||||
|
buf := make([]byte, bufSize)
|
||||||
|
for {
|
||||||
|
n, err := conn.Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
close(out)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if n > 0 {
|
||||||
|
out <- buf[:n]
|
||||||
|
fmt.Printf("Bytes read: %d\n", n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func HandleData(data <-chan []byte) {
|
||||||
|
for {
|
||||||
|
buf, open := <-data
|
||||||
|
if !open {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fmt.Printf("%v\n", string(buf))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user