This commit is contained in:
Mac Call
2023-03-04 14:12:26 +01:00
commit e53fb1b54f
12 changed files with 616 additions and 0 deletions

77
stream_enregistre.go Normal file
View File

@@ -0,0 +1,77 @@
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
}