78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
)
|
|
|
|
const stream_url = "http://streaming.rolandradio.net/rolandradio"
|
|
const stream_file = "./rolanradio_%s.mp3"
|
|
const sizeGeneriqueToStrip = 0x702A0 //octets
|
|
const bufferSize = 2048 //octets
|
|
|
|
func stopRecording() bool {
|
|
return false
|
|
}
|
|
|
|
// Enregistre le stream_url dans stream_file en ajoutant la date (%s)
|
|
// prend un channel de type booleen en entrée : true a la fin de la fonction OK, false si erreur
|
|
func Enregistre_stream(done chan bool, errChan chan error, filename string) {
|
|
// Obtenir la réponse HTTP depuis l'URL
|
|
resp, err := http.Get(stream_url)
|
|
if err != nil {
|
|
fmt.Println("Error fetching stream:", err)
|
|
done <- false
|
|
errChan <- err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// Créer un fichier local pour écrire les données du flux audio
|
|
file, err := os.Create(filename)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error creating file : %s", err)
|
|
done <- false
|
|
errChan <- err
|
|
}
|
|
defer file.Close()
|
|
|
|
//fmt.Println("Rejet des ", sizeGeneriqueToStrip, " premiers octets du stream")
|
|
fmt.Println("Recording...")
|
|
|
|
// met a la poubelle les premiers octets du stream (entete + generique roland radio)
|
|
_, err = io.CopyN(io.Discard, resp.Body, sizeGeneriqueToStrip)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Erreur du strip de l'entête et générique du stream: %s", err)
|
|
done <- false
|
|
errChan <- err
|
|
}
|
|
|
|
buffer := make([]byte, bufferSize)
|
|
|
|
var totalBytes int64
|
|
for {
|
|
n, err := resp.Body.Read(buffer)
|
|
if err != nil && err != io.EOF {
|
|
fmt.Fprintf(os.Stderr, "Error lecture buffer stream : %s", err)
|
|
done <- false
|
|
errChan <- err
|
|
}
|
|
|
|
_, err = file.Write(buffer[:n])
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error copying stream : %s", err)
|
|
done <- false
|
|
errChan <- err
|
|
}
|
|
|
|
totalBytes += int64(n)
|
|
|
|
if stopRecording() {
|
|
break
|
|
}
|
|
}
|
|
|
|
done <- true
|
|
}
|