Compare commits

...

2 Commits

Author SHA1 Message Date
aoife cassidy
9b1bf9c252
use pings to show self speaking 2025-11-01 21:01:11 +01:00
aoife cassidy
15740565d1
get rid of deafened buffer 2025-11-01 21:00:13 +01:00
2 changed files with 15 additions and 6 deletions

View File

@ -73,9 +73,9 @@ func (au *Audio) ProcessInput(conn *ircevent.Connection, channel string) error {
} }
empty := make([]float32, len(out)) empty := make([]float32, len(out))
if !au.Deafened { select {
select { case str := <-au.OutBuffer:
case str := <-au.OutBuffer: if !au.Deafened {
raw, err := base64.StdEncoding.DecodeString(str) raw, err := base64.StdEncoding.DecodeString(str)
if err != nil { if err != nil {
break break
@ -83,9 +83,9 @@ func (au *Audio) ProcessInput(conn *ircevent.Connection, channel string) error {
if _, err = dec.DecodeFloat32(raw, out); err != nil { if _, err = dec.DecodeFloat32(raw, out); err != nil {
break break
} }
default:
copy(out, empty)
} }
default:
copy(out, empty)
} }
}) })
if err != nil { if err != nil {
@ -125,6 +125,7 @@ func (au *Audio) ProcessInput(conn *ircevent.Connection, channel string) error {
} }
str := base64.StdEncoding.EncodeToString(data[:n]) str := base64.StdEncoding.EncodeToString(data[:n])
conn.Send("PING", "SPEAKING")
conn.Privmsg(channel, str) conn.Privmsg(channel, str)
} }

10
main.go
View File

@ -101,6 +101,14 @@ func (m *model) setDeafen(is bool) {
} }
func (m model) Init() tea.Cmd { func (m model) Init() tea.Cmd {
m.conn.AddCallback("PONG", func(e ircmsg.Message) {
if e.Params[1] == "SPEAKING" {
u := m.users[m.nick]
u.lastSpoke = time.Now()
m.users[m.nick] = u
}
})
m.conn.AddCallback("PRIVMSG", func(e ircmsg.Message) { m.conn.AddCallback("PRIVMSG", func(e ircmsg.Message) {
target, message := e.Params[0], e.Params[1] target, message := e.Params[0], e.Params[1]
if target != m.channel { if target != m.channel {
@ -215,7 +223,7 @@ func (m model) View() (s string) {
status = deafened status = deafened
} else if user.isMuted { } else if user.isMuted {
status = muted status = muted
} else if user.lastSpoke.Add(time.Second * 2).After(time.Now()) { } else if user.lastSpoke.Add(time.Millisecond * 100).After(time.Now()) {
status = speaking status = speaking
nickStyled = nick nickStyled = nick
} }