Katzenjammer del 29 giugno 2022
Podcast: Play in new window
Subscribe: RSS
- Subwoolfer – Melocoton
- Elton John, Britney Spears – Hold Me Closer
- Steve Lacy – Bad Habit
- Editors – Papillon
- Muse – You Make Me Feel Like It’s Halloween
- Savage Garden – To the Moon & Back
- Pixies – Vault of Heaven
- Kasabian – STRICTLY OLD SKOOL
- David Bowie – The Man Who Sold the World
- The Chemical Brothers – Let Forever Be
- Desireless – Voyage voyage
- Bush – Machinehead
- Nicolò Carnesi – Mi sono perso a Zanzibar
- I Cani – Velleità
- La Crus – Come ogni volta
- Pixies – There’s A Moon On
Twitch in streaming dal flusso di una webradio
Twitch è un servizio di streaming video, utilizzato principalmente dai giocatori, che può essere utilizzato anche per un altro scopo. Come forse già saprai, sono un Digital Streaming Specialist in una web radio, radiocittaperta.it. Twitch può essere utilizzato per una web radio o una radio? Come può una web radio utilizzare le funzionalità video di Twitch?
Ci sono radio e web radio che usano Twitch per lo streaming dei loro contenuti, per lo più usano alcune webcam in studio e aggiungono l’audio in streaming della radio al video. Sembra una radiovisione, come quella che puoi trovare sul digitale terrestre. Le tecnologie possono ottenere su Twitch lo stesso risultato di quello che trovi sul digitale ma con meno spese. Twitch è gratuito, il software di streaming può essere gratuito (OBS è un software gratuito per farlo), devi acquistare una o più videocamere e dell’hardware di acquisizione video, ma puoi vedere tutte queste cose con il budget che hai.
Se non disponi affatto di un budget e non desideri aggiungere un video reale ripreso da una videocamera allo streaming audio della tua web radio, puoi creare un video digitale con i seguenti passaggi. L’idea è di:
- Usare un’immagine statica
- Aggiungere del contenuto dinamico, ad esempio un video creato direttamente dalla sorgente audio
- Aggiungere l’audio in streaming
Potresti pensare di aver bisogno di un software sempre aperto su un computer, ma esiste una soluzione migliore: usa ffmpeg per farlo e lascia che ffmpeg venga eseguito in background su un computer. Ho già scritto di ffmpeg e di alcune delle sue funzioni. Con questa soluzione puoi eseguirlo su un computer utilizzato anche per altro, su un server o anche su un RaspberryPi connesso a internet. E questa è roba molto interessante! Che ti serve?
- La chiave twitch, è una cosa fatta così live_238476238546_234jhgfuowgsjdhbfwsDFSdgbjsbv
- L’audio stream https://my.audio.stream:port/stream
- Un immagine statica /somepath/mystaticimage.jpg
dopodiché basta lanciare questo comando
ffmpeg -loop 1 -f image2 -thread_queue_size 256 -i /somepath/mystaticimage.jpg \
-thread_queue_size 256 -i https://my.audio.stream:port/stream -re \
-nostdin \
-f lavfi -i aevalsrc="sin(0*2*PI*t)" \
-vcodec libx264 -r 30 -g 30 \
-preset fast -vb 3000k -pix_fmt rgb24 \
-pix_fmt yuv420p -f flv \
-filter_complex \
"[1:a]showwaves=s=960x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave]; \
[0:v][outputwave] overlay=0:510:shortest=1 [out]" \
-map '[out]' -map '1:a' -c:a copy -y \
rtmp://live-ber.twitch.tv/app/live_238476238546_234jhgfuowgsjdhbfwsDFSdgbjsbv \
-loglevel quiet 2> /dev/null &
qualche nota su questo comando:
-
[0:v][outputwave] overlay=0:510:shortest=1 [out]"
imposta dove viene stampata la forma d’onda, 510 è “a quale altezza” puoi giocare con quel valore per spostare la forma d’onda in alto o in basso.
-
"[1:a]showwaves=s=960x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave];
è il creatore della forma d’onda. C’è il colore e come deve essere stampata la forma d’onda, controlla la documentazione di ffmpeg per altre configurazioni
-
-loglevel quiet 2> /dev/null &
serve a mettere il comando in background
E questo è il risultato finale (alcuni secondi)
Twitch streaming from webradio stream
Twitch is a video streaming service, mostly used by gamers, that can be used also for another purpose. As you may already know, I’m a Digital Streaming Specialist in a web radio radiocittaperta.it. Can Twitch be used for a web radio or radio? How can a web radio use the Twitch video functionalities?
There are multiple radio and web radio that use Twitch to stream their content, mostly they use some webcams in the studio and add the radio streaming audio to the video. This looks like a TV radio, like the one that you can find on TV. Technologies can achieve the same result on Twitch as the one on TV with fewer expenses. Twitch is free, the streaming software can be free (OBS is a free software to do it), you need to buy a camera(s) and some video acquisition hardware but you can arrange these things with the budget you have.
Furthermore, if you are interested in news about Fix Radio guide to construction site and tradespeople salary It is a national digital radio station in the United Kingdom that has websites, Facebook, YouTube, and podcast channels. Read on to learn more about it.
Additionally, This is the first significant streaming agreement we have seen in a long time. Following the shutdown of Microsoft’s Mixer platform, streaming services’ competition to sign the biggest talents waned. However, Kick is now officially putting their money where their mouth is in order to obtain the best talent available as they enter the fray as a real competitor to Twitch and YouTube. Since xQc launching Kick a few months ago, the platform has continuously mocked Twich and positioned itself as being more creator-friendly. It promises to give streamers more control over the direction the network takes and offers larger income splits with them. Links to a cryptocurrency-based casino abroad, however, have made some people wary about utilizing the app.
If you don’t have a budget at all, and you don’t want to add a real video taken from a camera to your web radio audio streaming, you can create a digital video with the following steps. The idea is to:
- Use a static image
- Add some dynamic content, for example, some video created directly from the audio source
- Add the streaming audio
You may think that you need software always open on a computer but there is a better solution: use ffmpeg to do this and let ffmpeg run in background on a computer. I’ve already written about ffmpeg (here, here, and here) and some of the function it has. With this solution, you can run it on a computer also used for something else, on a server, or also on a RaspberryPi connected to the internet. And this is very cool stuff!
- twitch key, it looks like live_238476238546_234jhgfuowgsjdhbfwsDFSdgbjsbv
- the audio stream https://my.audio.stream:port/stream
- a static image /somepath/mystaticimage.jpg
then just run this command
ffmpeg -loop 1 -f image2 -thread_queue_size 256 -i /somepath/mystaticimage.jpg \
-thread_queue_size 256 -i https://my.audio.stream:port/stream -re \
-nostdin \
-f lavfi -i aevalsrc="sin(0*2*PI*t)" \
-vcodec libx264 -r 30 -g 30 \
-preset fast -vb 3000k -pix_fmt rgb24 \
-pix_fmt yuv420p -f flv \
-filter_complex \
"[1:a]showwaves=s=960x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave]; \
[0:v][outputwave] overlay=0:510:shortest=1 [out]" \
-map '[out]' -map '1:a' -c:a copy -y \
rtmp://live-ber.twitch.tv/app/live_238476238546_234jhgfuowgsjdhbfwsDFSdgbjsbv \
-loglevel quiet 2> /dev/null &
some notes on this command:
-
set where the waveform is printed, 510 is “at what height” you can play with that value to move upper or lower the waveform.[0:v][outputwave] overlay=0:510:shortest=1 [out]"
-
is the waveform creator. There is the color and how the waveform should be printed, check the ffmepg documentation for other configuration"[1:a]showwaves=s=960x100:colors=Red:mode=cline:rate=25:scale=sqrt[outputwave];
-
is to put the command on background-loglevel quiet 2> /dev/null &
And this is the final result (some seconds)
Piero Angela, liberismo e vincolo di mandato
La scomparsa di Piero Angela ha toccato tutti. Chi della scienza si occupa, chi è appassionato, la gente comune e il tele-dipendente. Senza dubbio Piero Angela era uno bravo: da più di 50 anni in televisione, in Rai da prima che la TV esistesse. Una carriera poliedrica iniziata nel Jazz e finita come divulgatore scientifico. Ironico, serio, didattico, membro del Cicap negli anni ha creato ideato e condotto programmi anche sperimentali di divulgazioni scientifica. Ha portato in Rai il figlio, anche lui bravissimo divulgatore, a cui sono stati riconosciuti in maniera inequivocabile meriti e dati d’ascolto da brivido con argomenti fuori dalla televisione generalista.
La sua morte mi ha acceso una riflessione sulla politica, il liberismo, il monopolismo e altre cose collegate. Sarà che tra un mese ci sarà da votare, sarà che il sistema capitalistico liberista ha qualche falla, sarà che è Agosto e la mente vaga da sola o svalvola per il caldo.
Piero Angela era bravo, rimane il fatto che in televisione era una sorta di unico custode di quel tipo di argomentazioni, ruolo sicuramente meritato. La riflessione però è: oltre a Piero Angela, chi altro vi viene in mente che faceva divulgazione scientifica in Televisione? Giacobbo e i suoi misteri negli sgabuzzini delle fogne di Orte con l’attenzione all’operatore Omar? Direi di no. Cecchi Paone? Forse per un breve periodo si. Ma mentre potete citare più di un giornalista di cronaca, più di un giornalista sportivo, più di un presentatore o presentatrice, se si parla di divulgazione scientifica il nome è uno ed uno solo, ed è Piero Angela, o al massimo, il figlio Alberto (questo va letto con la voce di Vulvia / Guzzanti).
Se una persona è brava ce la vorremmo tenere e lasciarla al suo posto per più tempo possibile, se invece non è capace, o non ci piace, vorremmo andasse via o quantomeno non rimanesse per sempre. La deriva di questo ha portato a quelle cose tipo il vincolo di mandato proposto da un movimento politico, che in un epoca di disamore per la politica aveva forse un senso, ma a ragionarci a posteriori misà mica tanto. Se uno è bravo perché andrebbe mandato via per una norma un poco naïf? Non avremmo voluti molti anni di Pertini e pochi anni di Andreotti? E quindi in questa logica, se Piero Angela era bravo, perché mandarlo via o dare spazio ad altri?
Su questa stessa linea ho pensato a quanto il sistema economico attuale capitalista e liberista, favorisca la concorrenza, o almeno questa sia l’etichetta, ma poi questa concorrenza, che dovrebbe favorire il consumatore, in realtà non è applicabilissima.
Spesso si scontra con corporazioni e lobby (per rimanere in Italia tassisti contro Uber è solo la punta dell’iceberg) ma ancora peggio a volte si scontra con una impossibilità di applicazione. Mi viene in mente Google, colosso tecnologico che è in parte un motore di ricerca, ma con un business molto più ampio: inutile dire che Google funziona bene: cerchi e lui te lo trova, gmail funziona ed è una bomba, il servizio cloud è comodo e usabile, le sue mappe sono parte della nostra vita. Come faremmo senza Google?
Solo che Google, pur lavorando in un sistema liberista concorrenziale, de facto è monopolista. Nessuno, al momento della stesura di questo post (agosto 2022) è in grado di competere con anche uno solo dei servizi di Google. Nessun altro motore di ricerca, nessun altro servizio di mappe, forse per le mail ma comunque poca roba. E non può farlo perché servono degli investimenti talmente alti che sarebbero impensabili, perché il regime fiscale più che agevolato che ha ottenuto negli anni (per colpa anche degli stati e delle loro amministrazioni economiche, sia chiaro) lo pone in una situazione di perenne vantaggio. La domanda quindi che mi è venuta è: ma non sarebbe stato meglio se ci fosse stato un alternativa a Piero Angela in televisione? Anche con taglio diverso per carità, non necessariamente la copia di Piero Angela. Non era forse Piero Angela il monopolio della divulgazione scientifica in televisione?
In questa epoca moderna, purtroppo, dobbiamo per forza prendere le parti tipo squadre, per cui questa mia riflessione verrà vista come “SEI CONTRO PIERO ANGELA! ALLORA SEI NOVAX, UFO, RETTILIANI”.
Eh vabbè, me ne farò una ragione, ma non era questo il mio intento. Mi mancherà Piero Angela, il suo viaggio all’interno del corpo umano è stata una cosa impressionante, anche a rivederlo con gli occhi di oggi. I Dinosauri, la storia, la scienza spiegata da Paco Lanciani con una corda, un lenzuolo e un pezzo di vetro, i leoni e le gazzelle, le pillole di medicina di Super Quark. Spero ci sarà qualcun altro a prendere il suo posto, più di qualcuno, magari molti, magari molte.
In fondo in televisione c’è più di un astrologo, magari è il caso ci sia anche più di un divulgatore scientifico.
Agosto Abruzzese e Ferragosto Colleferino
I prodigi dello smart working: puoi lavorare da una casa sul mare e quando stacchi andare al mare a mangiare una pizzetta e bere un biretta. Per la casa ci vuole una connessione più che decente, e per questo ringrazio Alessandra, per la pizzetta e la birra il lido la riviera da Eraldo a Francavilla al mare fa sicuramente al caso vostro.
Ma solo se vi piacciono le cose vintage, antiche, anni 60, insomma tra il vecchio e il trash ma vere! Non quelle cose fighette finto vecchie, no no! Bar, birrette e forse anche le pizzette, hanno il fascino bello delle cose fatte come una volta… E poi il bagnino con il costumino nelle chiappe secche, la vecchina più bassa del bancone che porge la pizza con il vassoio in silver preso con i punti dell’Upim, l’arancione scolorito della pittura e degli ombrelloni. Tutto bellissimo, tutto orribile. Il piacere del tramonto sul mare dopo il lavoro rimane sempre impagabile (pure se il sole casca “dalla parte sbagliata”).
Una settimana sì di lavoro ma anche di incontri, bevute, mangiate e anche un concerto degli Zen Circus a Pineto. Le foto sono poche, ma raccontano di piccoli momenti, fatti di un compleanno con una cena casalinga a risotto biete-e-seppie (ricetta Viareggina) e Emidio Pepe come vino, di arrosticini, di hamburger di pecora buoni, anzi ottimi, da Rossopepe a Ortona (da rivedere invece le patate e i fritti di verdura, ma quisquiglie).
Dove non andare: Il Ristorante Mare Nostrum sul mare di Francavilla al mare è un “no”: menù vecchio, 4 alici come antipasto di alici, spaghetti affogati nel sugo troppo lento, una grigliata troppo secca. Il prezzo è buono sì, ma per lo stesso prezzo invece consiglierei…
…Dove andare: CaffeRistoratore StazioneFrancavilla (sì, il bar della stazione) che ad un prezzo più che onesto, ha degli ottimi primi di pesce, spiedini e vino.
Visto che una mangiata per bene ci scappa sempre, allora mi pare il caso di una delle grandiose recensioni di ristorazione fatte dal sottoscritto ma pur sempre con un aperto confronto con gli altri commensali e quindi eccoci a:
Recensione bocca di fregna del ristorante Caldora, Vallevò
Caldora a Vallevò ha un bellissimo affaccio sulla costa dei trabocchi (dove prenotare a volte è complesso). Il personale è cortese e professionale, il clima è gioviale ma comunque di livello e i consigli sul vino sono stati eccellenti (avendo noi sbagliato proprio come impostazione: abbiamo preso prima un bianco molto strutturato dal quale, salire di livello, era veramente troppo complesso). Ma veniamo ai piatti. Il menù degustazione da 8 portate ha un prezzo più che giusto, contiene però degli alti e bassi:
- Tonno marinato al sale e mentuccia con cubettato di pomodoro e cipolla rossa: ottima la consistenza del tonno, ma il sapore sfugge. Inoltre il tonno non c’è sembrato molto “locale”
- Filetto di ricciola marinato al sale e ginepro con giardiniera di finocchi e arance di Vallevò: buono, forse necessitava di un piccolo sprint di sapore
- Cappuccino di gamberi e zucchine: un piatto che ho capito poco. Troppo presente il brodo di zucchine, poco i gamberi che erano sul fondo e non sapevo come mangiare fin quando non sono arrivato alla fine.
- Come un baccalà con patate gialla e zafferano di Navelli: piatto molto buono, ben equilibrato, zafferano ben presente ma non coprente
- Pallotta di seppia in parmigiana: una vera perla di sapore, bravi e complimenti
- Tortello di gamberi bianchi all’arancia e fieno di prezzemolo: ottimo, ben equlibrato, non troppo aranciato, ottimo il brodo e la pasta
- Fusilloro Verrigni con scampi ed aspararagi: questo invece direi un piatto sbagliato. Pasta tendente allo scotto, poca presenza dello scampo, asparago fin troppo incisivo
- spiedone di spigola con peperoni uva e cipolla rossa caramellata: veramente una buona cottura della spigola, saporita ma non coperta dalla cipolla
E quindi? E quindi alcune cose molto buone e altre poco buone. Ma la cose che pesano sulla recensione sono due: il fatto che ci voleva un coltello per tutte le portate e invece, anche con i cambi di piatto, c’è stato portato sempre il coltello da “spina pesce” che per quanto uno ci provi, non si riesce proprio a tagliare le cose, i finocchi, il pesce. Non serve per tagliare oh…c’è poco da fare.
E la cosa peggiore che proprio proprio uno deve dire NO, è il pane. Il pane era vecchio, un piatto con 5 tipi di pane tutti vecchi. E visto che eravamo arrivati un poco tardino e avevamo fame la prima cosa che c’hanno portato è stato proprio il pane. Un pessimo biglietto da visita per un pranzo che poteva invece iniziare con tutt’altro abrivio. Peccato, non ci tornerei, ma se volete andare prendete solo i piatti che ho segnato come buoni, v’assicuro che prendendo solo quelli l’esperienza è ottima. E poi comunque il post pranzo stesi come dei leoni di mare sul pratino davanti al ristorante non è proprio da sottovalutare.
Poi il 14 si riparte e pranzo di ferragosto alla Bubbhaus. Pollo e peperoni, la ratafia riportata dall’Abruzzo, i biscotti fatti da mamma, la pasta all’uovo buonissima di Daniela, la capanna di Edera e bambù, la muta di cani, i gatti allergici, il caldo e l’umidità, miniature con colla cianacrilato polivinilico e una balena a dondolo BDSM. Grazie a tutti
Rossopepe, Ortona: hamburgheria
Riconoscere il silenzio da un input audio su Linux
Come Digital Streaming Specialist per una web radio (Radio Città Aperta) ho sempre nuove sfide e problemi da risolvere.
In una grande società c’è sempre la scelta tra “fare o comprare?” ma quando il tuo mondo è piccolo, senza finanziamenti, e con tanto entusiasmo ma poco tempo, devi trovare soluzioni adatte a tutte le tue esigenze. Non solo una soluzione deve essere economica: deve anche essere facile da capire, facile da mantenere, dovrebbe funzionare senza intervento manuale e cose del genere.
Il problema attuale è “come capire che la web radio è in streaming, quando lo streaming è muto?”
come capire che la web radio è in streaming, quando lo streaming è muto?
Perchè succede? Lo streaming della web radio è una catena di più parti, sia analogiche che digitali, e può capitare che alcune di esse siano mute, mentre altre funzionino come previsto. Ad esempio, supponiamo di avere un computer che funziona come nostro streamer; sta inviando l’input audio acquisito da una scheda audio direttamente a un server streamer. Anche se internet funziona, c’è la connessione, la password è nota e l’host è ok, non c’è modo di capire se l’audio catturato sia muto o meno. Ciò si traduce in uno streaming audio attivo e funzionante, ma che non produce audio (o forse si può sentire solo del rumore bianco).
Se il cavo di ingresso è staccato, se la sorgente audio è spenta o se il fader del mixer è completamente giù invece di essere al massimo volume, tutte queste situazioni possono portare a un audio silenzioso che passa attraverso la catena di streaming. La soluzione ottimale per questo è qualcosa che monitora in tempo reale l’audio in ingresso, controlla se ci sono almeno X secondi di silenzio e, se ciò accade, avvia alcune procedure che possono essere:
- avviare una playlist in modo che l’audio non sia più silenzioso
- inviare una e-mail e/o un avviso a qualcuno
Inoltre, quando l’ingresso audio non è più silenzioso (ad esempio, uno speaker della radio super intelligente ha spostato il fader del mixer nella posizione corretta…), questo software deve interrompere la riproduzione della playlist. Deve essere eseguito per sempre, deve essere riavviato se viene arrestato e deve essere eseguito all’avvio. Quindi iniziamo con qualcosa che ho trovato: Python hasounddevice
che fa quello che ci serve.
Sounddevice con Python
Non un campione di Python, ma sembra molto facile da capire, facile da usare, facile da modificare e super potente. Ho iniziato da questo thread con questo frammento di codice
# Print out realtime audio volume as ascii bars
import sounddevice as sd
import numpy as np
def print_sound(indata, outdata, frames, time, status):
volume_norm = np.linalg.norm(indata)*10
print ("|" * int(volume_norm))
with sd.Stream(callback=print_sound):
sd.sleep(10000)
che mostra alcune barre del livello di ingresso audio. Con qualche modifica, una catena di “if” ho modificato lo script in modo che scriva su un file quando vengono trovati X campioni silenziosi. Silent è definito come “un livello sotto la soglia, th.
#!/usr/bin/env python3
import numpy as np import sounddevice as sd import datetime duration = 10 #in seconds th = 10 sec = 0 maxNumberOfSilent = 4000 isSilent = True logfile = open("soundlevel.log", "a") def audio_callback(indata, frames, time, status): global sec global isSilent global logfile dateLog = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S] ") volume_norm = np.linalg.norm(indata) * 10 #print("|" * int(volume_norm)) #print(volume_norm) if volume_norm < th: sec += 1 else: sec = 0 if (sec > maxNumberOfSilent and not isSilent): isSilent = True logfile.write(dateLog+"Silent for "+str(maxNumberOfSilent)+" samples\n") logfile.flush() #print("Silent for "+str(maxNumberOfSilent)+" samples") elif (sec == 0 and isSilent): isSilent = False logfile.write(dateLog+"Music\n") logfile.flush() #print("Music") stream = sd.InputStream(callback=audio_callback) with stream: while (True): sd.sleep(duration * 1000)
Dopo qualche altra ricerca, ho trovato una classe per inviare e-mail utilizzando un account Gmail:
import smtplib, ssl
class Mail:
def __init__(self):
self.port = 465
self.smtp_server_domain_name = "smtp.gmail.com"
self.sender_mail = "........"
self.password = "........"
def send(self, emails, subject, content):
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
for email in emails:
result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")
service.quit()
if __name__ == '__main__':
mails = input("Enter emails: ").split()
subject = input("Enter subject: ")
content = input("Enter content: ")
mail = Mail()
mail.send(mails, subject, content)
Per mettere tutto insieme, ho creato un sistema che invia una e-mail quando il suono è silenzioso:
#!/usr/bin/env python3
import numpy as np
import sounddevice as sd
import datetime
import smtplib, ssl
th = 10
sec = 0
maxNumberOfSilent = 10000
isSilent = True
logfile = open("soundlevel.log", "a")
to_addresses = ("myemail@mail.com",)
class Mail:
def __init__(self):
self.port = 465
self.smtp_server_domain_name = "smtp.gmail.com"
self.sender_mail = "....."
self.password = "...."
def send(self, emails, subject, content):
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
for email in emails:
result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")
service.quit()
mail_client = Mail()
def audio_callback(indata, frames, time, status):
global sec
global isSilent
global logfile
dateLog = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S] ")
volume_norm = np.linalg.norm(indata) * 10
#print("|" * int(volume_norm))
#print(volume_norm)
if volume_norm < th:
sec += 1
else:
sec = 0
if (sec > maxNumberOfSilent and not isSilent):
isSilent = True
logfile.write(dateLog+"Silent for "+str(maxNumberOfSilent)+" samples\n")
logfile.flush()
mail_client.send(to_addresses,"Audio is silent",dateLog+" audio is silent")
#print("Silent for "+str(maxNumberOfSilent)+" samples")
elif (sec == 0 and isSilent):
isSilent = False
logfile.write(dateLog+"Music\n")
logfile.flush()
mail_client.send(to_addresses,"Audio back to normal",dateLog+" audio back to normal")
#print("Music")
stream = sd.InputStream(callback=audio_callback)
with stream:
while (True):
sd.sleep(10 * 1000)
Reportage del concerto Cristina D’Avena & Gem Boy live in Colleferro 2022 con riflessioni collaterali di ben altro spessore
Evento divertentissimo e di grandissima partecipazione. Amici cosmopoliti mi avevano fatto precedentemente notare che Cri riempie tranquillamente le sue venue con biglietto a pagamento (15/20 sacchi). Averla avuta gratis nella provincia denuclearizzata mi rende grato a chi ce l’ha portata.
Tutti i miei brani preferiti (“Mila & Shiro” e “I Puffi” della svolta ecologista, in particolare) sono stati eseguiti. Grande sorpresa per “Esplorando il corpo umano”. Travolgente la sequenza Emy-Creamy-Pollon (ed ora so che Emy e Creamy sono due cartoni animati diversi).
Di altissimo livello è stato l’accompagnamento della band “Gem Boy”, a loro volta artisti culto per alcune turpi parodie anni Novanta delle sigle TV più note. Quando si sono messi a “jammare” hanno inserito nei cartoons pregiati assoli rock (Lez Zeppelin, Queen, Chemical Brothers e chissà cos’altro) che hanno esaltato me e chi aveva orecchio per intendere (lo stesso dicasi per l’assolo sax sfociato in The Benny Hill Show).
Chiusura trionfale intergenerazionale con “Occhi di gatto”, dopo che il flusso sonoro era finito verso il 2000 e dintorni privilegiando la riscossa dei millennials. Costoro, da “nativi cristiniani” (vedi, ahimè, infra), ci hanno messo più trasporto di quanto non avessimo fatto prima noi, “generazione X” (di recente impropriamente rietichettati “boomer”, che, in realtà sarebbero i nostri genitori, realmente nati in tempo di reale boom economico).
Riflessioni sull’essere: un concerto di Cristina D’Avena a chi è rivolto?
La cantante ha detto di essere nel quarantennale della sua carriera. Tuttora canta sigle nuove, vedasi la nuova serie di Captain Tsubasa (ex “Holly e Benjy”). Io, dall’alto dei miei 44 anni, vengo, addirittura, dal crepuscolo della fase precedente all’ascesa quasi monopolistica di Cri-cri! Quindi ricordo forte e chiaro i robbottoni di Go-Nagai, Lupin di Castellina-Pasi (“Chi lo sa che faccia ha, chissà chi è…”), la prima sigla di Holly e Benj cantata dal bambino con l’enfisema (“Due sportivi, due ragazzi, per il calcio sono fatti…”). Sono andato al concerto animato da sano spirito pop e comuni stimoli nostalgici. Non ho provato alcun disagio né ho pensato, in caso di sua insorgenza, di rivalermi sulla presenza dei miei figli. Molti miei sodali, malgrado l’occasione potesse essere gradita per fare del cazzeggio di ottima qualità, non sono pervenuti. Cari amici, anzi amicici, non esserci stati non cancella il fatto che dopo anni di Dik Dik e Camaleonti (e taccio volutamente sul nome di Gigione) il pubblico target della festa di Sant’Anna siamo noi. Non esistono categorie di consumi (es.: apericene lunghe con vista apericolazione, tatuaggi, automobili, pizze al pata negra) che possano smentire questo dato incontrovertibile.
Terminato il concerto, poco prima dalla mezzanotte, vado ad ubriacarmi. All’una circa mi rincammino sulla via di casa e nel tragitto apprendo che Cristina è ancora lì a fare foto e firmare autografi. Ci provo e mi inserisco come il peggior italiano possibile: quello che in un attimo ottiene lo stesso risultato di chi ha fatto sacrifici per molto più tempo. Cristina era davvero provata dall’ora e passa a fare le dette cazzate (mi dicono che al termine del concerto la fila era chilometrica), per questo suo disagio (di Cri) ho deciso di rivalermi su mio figlio di anni 8 vestito con maglia da gioco ufficiale Nankatsu (ex “New Team”) di Tsubasa Ozora (ex Oliver Hutton o “Holly”). Già si era prestata con molta cortesia con chi mi aveva preceduto, tuttavia la presenza di quell’unico minorenne nottambulo ha generato sensazioni molto più positive rispetto al residuo nugolo di boomers (impropriamente detti). Questo mi porta a dire, in ultima analisi, che una gioventù inconsapevole è generalmente preferibile ad una vecchiaia consapevole, ma delle due, qui ed ora, cari sodali, abbiamo solo la seconda e non potrà che peggiorare.
Spett.le Comitato Festa di S. Anna, potreste per favore portarci (gratis e finché sono ancora vivi e in salute) anche gli Oliver Onions? Vorrei tanto farli sentire a mio figlio ma mi seccherebbe spostarmi e pagare il biglietto.
Setlist del concerto (così come ne ho preso nota, potrebbe contenere inesattezze e note di colore): “i pirati all’arrembaggio”, Mila & Shiro, Che campioni Holly e Benjy, Sailor Moon (versione a me ignota), Terry e Maggie, Taz, Esplorando il corpo umano, Lady Oscar (versione di Cristina, no “Grande festa alla corte di Francia”), Robin Hood, Puffi ECO, Emy, Creamy, Pollon, Kiss me Licia, Sailor Moon (versione a me nota), Medley dei Gem Boy, Stella della Senna, “gli scarafaggi”, Arale e Slump, Gem, Rossana o Roxana, “Johnny magia”, Dragonball (massimo sopravvento canoro delle generazioni recenti), “piccoli problemi di cuore”, canzone su un cartone che parla di sorci, “magica Sabrina”, Occhi di gatto.
Sabino Capogreco
Real time detect silence from audio input in Linux
As a
The current issue at hand is “how to understand that the web radio is streaming, when the stream is silent?”
understand that the web radio is streaming, but the stream is silent
How can this happen? Web radio streaming is a chain of multiple parts, both analog and digital, and it can happen that some of them are silent, while others are working as expected. For example, suppose we have a computer working as our streamer; it’s sending the audio input grabbed from a sound card directly to a streamer server. Even if the internet works, there’s connection, password is known and host is ok, there is no way to understand if the audio grabbed is silent or not. This results in audio streaming that is up-and-running, but not producing audio (or perhaps some white noise can be heard).
If the input cable is detached, if the audio source is turned off, or if the mixer fader is completely faded out instead of being at top volume, all these situations may lead to silent audio that goes through the streaming chain. The optimum solution for this is something that real-time monitors the input audio, checks if there are at least X seconds of silence and, if this happens, starts some procedures that can be:
- start some playlist so that the audio is no more silent
- send an e-mail and/or an alert to someone
Also, when the audio input is no more silent (a super smart radio speaker has moved the mixer fader to the correct position, for example…), this software needs to stop playing the playlist. It must run forever, it must restart if it’s stopped, and it must run at boot time. So let’s start with something that I’ve found: Python hassounddevice
that do what we need to do.
Sounddevice with Python
I’m not so used to Python, but it seems very easy to understand, easy to use, easy to modify and super powerful. I’ve started from this thread with this code snippet
# Print out realtime audio volume as ascii bars
import sounddevice as sd
import numpy as np
def print_sound(indata, outdata, frames, time, status):
volume_norm = np.linalg.norm(indata)*10
print ("|" * int(volume_norm))
with sd.Stream(callback=print_sound):
sd.sleep(10000)
that shows some bars from the audio input level, with some modifications, a chain of “if”; I’ve modified the script so that it writes to a file when X silent samples are found. Silent is defined as “a level under the threshold, th, value.
#!/usr/bin/env python3
import numpy as np import sounddevice as sd import datetime duration = 10 #in seconds th = 10 sec = 0 maxNumberOfSilent = 4000 isSilent = True logfile = open("soundlevel.log", "a") def audio_callback(indata, frames, time, status): global sec global isSilent global logfile dateLog = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S] ") volume_norm = np.linalg.norm(indata) * 10 #print("|" * int(volume_norm)) #print(volume_norm) if volume_norm < th: sec += 1 else: sec = 0 if (sec > maxNumberOfSilent and not isSilent): isSilent = True logfile.write(dateLog+"Silent for "+str(maxNumberOfSilent)+" samples\n") logfile.flush() #print("Silent for "+str(maxNumberOfSilent)+" samples") elif (sec == 0 and isSilent): isSilent = False logfile.write(dateLog+"Music\n") logfile.flush() #print("Music") stream = sd.InputStream(callback=audio_callback) with stream: while (True): sd.sleep(duration * 1000)
After some more research, I’ve found a class to send e-mails using a Gmail account:
import smtplib, ssl
class Mail:
def __init__(self):
self.port = 465
self.smtp_server_domain_name = "smtp.gmail.com"
self.sender_mail = "........"
self.password = "........"
def send(self, emails, subject, content):
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
for email in emails:
result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")
service.quit()
if __name__ == '__main__':
mails = input("Enter emails: ").split()
subject = input("Enter subject: ")
content = input("Enter content: ")
mail = Mail()
mail.send(mails, subject, content)
To put everything together, I’ve created a system that sends an e-mail when the sound is silent:
#!/usr/bin/env python3
import numpy as np
import sounddevice as sd
import datetime
import smtplib, ssl
th = 10
sec = 0
maxNumberOfSilent = 10000
isSilent = True
logfile = open("soundlevel.log", "a")
to_addresses = ("myemail@mail.com",)
class Mail:
def __init__(self):
self.port = 465
self.smtp_server_domain_name = "smtp.gmail.com"
self.sender_mail = "....."
self.password = "...."
def send(self, emails, subject, content):
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
for email in emails:
result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")
service.quit()
mail_client = Mail()
def audio_callback(indata, frames, time, status):
global sec
global isSilent
global logfile
dateLog = datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S] ")
volume_norm = np.linalg.norm(indata) * 10
#print("|" * int(volume_norm))
#print(volume_norm)
if volume_norm < th: sec += 1 else: sec = 0 if (sec > maxNumberOfSilent and not isSilent):
isSilent = True
logfile.write(dateLog+"Silent for "+str(maxNumberOfSilent)+" samples\n")
logfile.flush()
mail_client.send(to_addresses,"Audio is silent",dateLog+" audio is silent")
#print("Silent for "+str(maxNumberOfSilent)+" samples")
elif (sec == 0 and isSilent):
isSilent = False
logfile.write(dateLog+"Music\n")
logfile.flush()
mail_client.send(to_addresses,"Audio back to normal",dateLog+" audio back to normal")
#print("Music")
stream = sd.InputStream(callback=audio_callback)
with stream:
while (True):
sd.sleep(10 * 1000)