Comments (2)
Hello,
If it can help someone:
In my case I made some modification to the stream.go in gumbleopenal to change a GPIO PIN on the raspberry. I did that with a timer that is reset all the time audio data is coming and that expire after 20ms on no reset that trigger a GPIO. This way I have a RX pin led.
func (s *Stream) OnAudioStream(e *gumble.AudioStreamEvent) {
rpio.Open()
pin := rpio.Pin(17)
pin.Output()
fmt.Printf("A")
pin.Low()
timerptt := time.NewTimer(time.Millisecond * 20)
var watchpin = true
go func() {
for watchpin {
<-timerptt.C
pin.Low()
}
}()
go func() {
source := openal.NewSource()
emptyBufs := openal.NewBuffers(8)
reclaim := func() {
if n := source.BuffersProcessed(); n > 0 {
reclaimedBufs := make(openal.Buffers, n)
source.UnqueueBuffers(reclaimedBufs)
emptyBufs = append(emptyBufs, reclaimedBufs...)
}
}
var raw [gumble.AudioMaximumFrameSize * 2]byte
for packet := range e.C {
samples := len(packet.AudioBuffer)
pin.High()
timerptt.Reset(time.Second)
if samples > cap(raw) {
continue
}
for i, value := range packet.AudioBuffer {
binary.LittleEndian.PutUint16(raw[i*2:], uint16(value))
}
reclaim()
if len(emptyBufs) == 0 {
continue
}
last := len(emptyBufs) - 1
buffer := emptyBufs[last]
emptyBufs = emptyBufs[:last]
buffer.SetData(openal.FormatMono16, raw[:samples*2], gumble.AudioSampleRate)
source.QueueBuffer(buffer)
if source.State() != openal.Playing {
source.Play()
}
}
watchpin = false
reclaim()
emptyBufs.Delete()
source.Delete()
}()
}
from gumble.
If it can help someone
Your hack helped me today, thanks! BTW, will be great to refactor this to more standard way (i.e. declare and fire events instead of switching pin directly) and issue PR to @layeh.
from gumble.
Related Issues (20)
- how to join a channel with gumble lib HOT 5
- Missing doc for openAL HOT 4
- PermissionDeniedMissingCertificate HOT 1
- Getting choppy sound. HOT 13
- [MacOS] s.deviceSource.CaptureSamples always return 0 HOT 1
- Force TCP mode in gumble? HOT 1
- Automatic rate limiting HOT 3
- Matterbridge integration? HOT 1
- Protocol features (v1.4) HOT 1
- Transmit Stereo Audio HOT 2
- Panic when a client disconnects hard ?
- question : are commands and voice packets sent on the same socket or on 2 different sockets ? HOT 1
- the opus can not work well when using gumble.
- Client loses ability to send message to channel HOT 2
- No audio transmitted and received and mumble-audio-player play no sound
- How to get gumbleffmpeg stream duration/length?
- Receiving audio HOT 1
- certificate signed by unknown authority HOT 1
- How to use .p12 user certificate from Mumble? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gumble.