func (s *Stream) sourceRoutine() { interval := s.client.Config.AudioInterval frameSize := s.client.Config.GetAudioFrameSize() if frameSize != s.sourceFrameSize { s.deviceSource.CaptureCloseDevice() s.sourceFrameSize = frameSize s.deviceSource = openal.CaptureOpenDevice("", gumble.AudioSampleRate, openal.FormatMono16, uint32(s.sourceFrameSize)) } ticker := time.NewTicker(interval) defer ticker.Stop() stop := s.sourceStop int16Buffer := make([]int16, frameSize) for { select { case <-stop: return case <-ticker.C: buff := s.deviceSource.CaptureSamples(uint32(frameSize)) if len(buff) != frameSize*2 { continue } for i := range int16Buffer { int16Buffer[i] = int16(binary.LittleEndian.Uint16(buff[i*2 : (i+1)*2])) } s.client.Send(gumble.AudioBuffer(int16Buffer)) } } }
func (s *Stream) sourceRoutine() { interval := s.client.Config.AudioInterval frameSize := s.client.Config.GetAudioFrameSize() ticker := time.NewTicker(interval) defer ticker.Stop() s.paused = false int16Buffer := make([]int16, frameSize) byteBuffer := make([]byte, frameSize*2) for { select { case <-s.pause: s.paused = true return case <-ticker.C: if _, err := io.ReadFull(s.pipe, byteBuffer); err != nil { s.stateChange.Lock() s.cleanup() return } for i := range int16Buffer { float := float32(int16(binary.LittleEndian.Uint16(byteBuffer[i*2 : (i+1)*2]))) int16Buffer[i] = int16(s.Volume * float) } s.Elapsed += interval s.client.Send(gumble.AudioBuffer(int16Buffer)) } } }