func fetchYoutubeInfo(client *gumble.Client, id string) { var info videoInfo // Fetch + parse video info url := fmt.Sprintf("http://gdata.youtube.com/feeds/api/videos/%s?v=2&alt=jsonc", id) if resp, err := http.Get(url); err != nil { return } else { decoder := json.NewDecoder(resp.Body) if err := decoder.Decode(&info); err != nil { return } info.Data.Duration *= time.Second resp.Body.Close() } // Create response string var buffer bytes.Buffer if err := outputTemplate.Execute(&buffer, info); err != nil { return } message := gumble.TextMessage{ Channels: []*gumble.Channel{ client.Self.Channel, }, Message: buffer.String(), } client.Send(&message) }
func New(client *gumble.Client) (*Stream, error) { s := &Stream{ client: client, userStreams: make(map[uint32]openal.Source), sourceFrameSize: client.Config.GetAudioFrameSize(), } s.deviceSource = openal.CaptureOpenDevice("", gumble.AudioSampleRate, openal.FormatMono16, uint32(s.sourceFrameSize)) s.deviceSink = openal.OpenDevice("") s.contextSink = s.deviceSink.CreateContext() s.contextSink.Activate() s.buffer = make([]byte, gumble.AudioMaximumFrameSize) s.link = client.AttachAudio(s) return s, nil }