Files
rolandradio_record/stream_enregistre.go
Mac Call e53fb1b54f initial
2023-03-05 15:06:10 +01:00

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
}