haha
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package audio
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"time"
|
||||
"../icecast"
|
||||
)
|
||||
|
||||
// type stream_t struct {
|
||||
// filepath string
|
||||
// bitrate int
|
||||
// channels int
|
||||
// encoding_src string
|
||||
// encoding_dst string
|
||||
// }
|
||||
|
||||
func Play(filename string) {
|
||||
|
||||
sig := make(chan os.Signal, 1)
|
||||
signal.Notify(sig, os.Interrupt, os.Kill)
|
||||
|
||||
samplerate := 44100
|
||||
bytes_per_sample := 1
|
||||
channels := 1
|
||||
bytes_per_sec := int(samplerate) * channels * bytes_per_sample
|
||||
|
||||
r, e := os.Open(filename)
|
||||
chk(e)
|
||||
defer r.Close()
|
||||
|
||||
_, er := icecast.Connect()
|
||||
chk(er)
|
||||
|
||||
audio := make([]byte, 2 * 1024)
|
||||
|
||||
dt := time.Second * time.Duration(len(audio)) / time.Duration(bytes_per_sec)
|
||||
|
||||
now := time.Now()
|
||||
|
||||
for {
|
||||
|
||||
n, err := r.Read(audio)
|
||||
if n == 0 {
|
||||
break
|
||||
}
|
||||
chk(err)
|
||||
|
||||
icecast.Send(audio)
|
||||
|
||||
select {
|
||||
case <-sig:
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
time.Sleep(dt)
|
||||
|
||||
}
|
||||
|
||||
fmt.Println(time.Duration(time.Now().Sub(now)))
|
||||
|
||||
}
|
||||
|
||||
|
||||
func chk(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user