// OpenAI Realtime two-presenter audio backend; no external WebSocket library required.
if (!class_exists('SV_OpenAI_Realtime_Podcast')) {
class SV_OpenAI_Realtime_Podcast {
private static function readn($s,$n){$b='';while(strlen($b)<$n&&!feof($s)){$p=fread($s,$n-strlen($b));if($p===false||$p==='')break;$b.=$p;}return strlen($b)===$n?$b:false;}
private static function send($s,$data){$n=strlen($data);$h=chr(0x81);if($n<126)$h.=chr(0x80|$n);elseif($n<65536)$h.=chr(0xfe).pack('n',$n);else $h.=chr(0xff).pack('NN',0,$n);$mask=random_bytes(4);$p='';for($i=0;$i<$n;$i++)$p.=$data[$i]^$mask[$i%4];$frame=$h.$mask.$p;while($frame!==''){$w=fwrite($s,$frame);if(!$w)return false;$frame=substr($frame,$w);}return true;}
private static function frame($s){$h=self::readn($s,2);if($h===false)return false;$a=ord($h[0]);$b=ord($h[1]);$n=$b&127;if($n===126){$v=self::readn($s,2);if(!$v)return false;$n=unpack('n',$v)[1];}elseif($n===127){$v=self::readn($s,8);if(!$v)return false;$a64=unpack('Nhi/Nlo',$v);$n=$a64['hi']*4294967296+$a64['lo'];}if($n>12000000)return false;$mask=($b&128)?self::readn($s,4):'';$p=self::readn($s,(int)$n);if($p===false)return false;if($mask)for($i=0;$i<$n;$i++)$p[$i]=$p[$i]^$mask[$i%4];return ['opcode'=>$a&15,'data'=>$p];}
private static function pcm($key,$model,$voice,$text){
$host='api.openai.com';$path='/v1/realtime?model='.rawurlencode($model);
$ctx=stream_context_create(['ssl'=>['verify_peer'=>true,'verify_peer_name'=>true],'socket'=>['tcp_nodelay'=>true]]);
$s=@stream_socket_client('tls://'.$host.':443',$errno,$errstr,15,STREAM_CLIENT_CONNECT,$ctx);
if(!$s){error_log('[SV Realtime] connect '.$errstr);return false;}
stream_set_timeout($s,35);$nonce=base64_encode(random_bytes(16));
$req="GET $path HTTP/1.1\r\nHost: $host\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: $nonce\r\nSec-WebSocket-Version: 13\r\nAuthorization: Bearer $key\r\nOpenAI-Beta: realtime=v1\r\n\r\n";
fwrite($s,$req);$headers='';while(strpos($headers,"\r\n\r\n")===false&&strlen($headers)<16000){$line=fgets($s,4096);if($line===false)break;$headers.=$line;}
if(!preg_match('~^HTTP/1\\.[01] 101\\b~',$headers)){error_log('[SV Realtime] handshake '.substr($headers,0,90));fclose($s);return false;}
// Separate response for every presenter; no conversation content is generated or altered.
$session=['type'=>'session.update','session'=>['instructions'=>'Sei un doppiatore italiano. Parla ESCLUSIVAMENTE in italiano standard (it-IT) con cadenza giornalistica naturale. Leggi esattamente il testo richiesto, senza traduzioni o aggiunte. Non pronunciare istruzioni, etichette o nomi dei presentatori.','voice'=>$voice,'output_audio_format'=>'pcm16']];
$item=['type'=>'conversation.item.create','item'=>['type'=>'message','role'=>'user','content'=>[['type'=>'input_text','text'=>'Leggi ad alta voce ESATTAMENTE questo testo in italiano, senza cambiare parole e senza introduzioni: '.mb_substr($text,0,3500)]]]];
$response=['type'=>'response.create','response'=>['modalities'=>['audio'],'instructions'=>'Leggi SOLO la battuta specificata, in italiano standard, senza aggiungere parole.']];
foreach([$session,$item,$response] as $event)if(!self::send($s,wp_json_encode($event))){fclose($s);return false;}
$pcm='';$complete=false;$start=microtime(true);$error='';
while(microtime(true)-$start<105){$f=self::frame($s);if(!$f)break;if($f['opcode']===9){self::send($s,$f['data']);continue;}if($f['opcode']===8)break;if($f['opcode']!==1)continue;$e=json_decode($f['data'],true);if(!is_array($e))continue;
$type=$e['type']??'';
if($type==='response.audio.delta'||$type==='response.output_audio.delta'){$b=base64_decode($e['delta']??'',true);if($b!==false)$pcm.=$b;}
if($type==='response.done'){$complete=($e['response']['status']??'')==='completed';if(!$complete)$error=wp_json_encode($e['response']['status_details']??[]);break;}
if($type==='error'){$error=(string)($e['error']['message']??'error');break;}
}
fclose($s);
if(!$complete||strlen($pcm)<2000){error_log('[SV Realtime] failed '.$error);return false;}
return $pcm;
}
public static function synthesize($text,$key,$model,$voice,$mp3,$ffmpeg='ffmpeg'){
if(!in_array($model,['gpt-realtime-2.1-mini','gpt-realtime-2.1'],true))return false;
$pcm=self::pcm($key,$model,$voice,$text);if(!$pcm)return false;
$temp=tempnam(sys_get_temp_dir(),'svrtpcm');if(!$temp)return false;file_put_contents($temp,$pcm);
$cmd=escapeshellcmd($ffmpeg).' -nostdin -y -loglevel error -f s16le -ar 24000 -ac 1 -i '.escapeshellarg($temp).' -c:a libmp3lame -b:a 128k '.escapeshellarg($mp3).' 2>&1';
$o=[];$rc=1;exec($cmd,$o,$rc);@unlink($temp);
return $rc===0&&is_file($mp3)&&filesize($mp3)>1000;
}
}}
Qualiano, scoperto cantiere edile non a norma: denunciato imprenditoreQualiano, scoperto cantiere edile non a norma: denunciato imprenditore
Siamo la redazione di Cronache della Campania. Sembra un account astratto ma possiamo assicurarvi che è sempre un umano a scrivere questi articoli, anzi più di uno ed è per questo usiamo questo account. Per conoscere la nostra Redazione visita la pagina "Redazione" sopra nel menù, o in fondo..Buona lettura!
Ascolta questo articoloRiproduci la versione audio
Ascolta
Caricamento in corso...
A Qualiano, i carabinieri stanno effettuando controlli sulla sicurezza sul lavoro e hanno denunciato l’amministratore unico di un’azienda edile per mancanza di parapetti in un cantiere.
Durante un intervento nel cantiere di via Campana, dove si stavano svolgendo lavori di ristrutturazione, i militari hanno rilevato l’assenza di parapetti, comminando sanzioni per oltre 12mila euro e sospendendo l’attività imprenditoriale.
I controlli continueranno anche nei prossimi giorni per assicurare e verificare la sicurezza sul lavoro.
A Napoli è stata presentata la conferenza di lancio del Forum Internazionale Il Metodo Mattei 2026. L’evento si terrà a Roma il 12 e 13 novembre 2026 presso il…
• leggi l’articolo
La vicenda prende le mosse da un appuntamento concordato tramite una piattaforma di annunci online. Un uomo ultrasessantacinquenne, affetto da patologie cronich…
• leggi l’articolo
Da Mondragone alla città normanna con la determinazione cucita nei guantoni. La parabola di Angelo Belli tra i pali è uno di quei racconti che accendono i rifle…
• leggi l’articolo
Napoli. -Il dado è tratto e la fase delle indagini preliminari ha ceduto il passo al giudizio. È fissata per il prossimo 3 dicembre l'udienza preliminare davant…
• leggi l’articolo
Nel borgo medievale sopra Caserta, la pizza con funghi porcini trova una cornice fatta di pietra, aria fresca e memoria urbana campana.
• leggi l’articolo
Nuovo importante riconoscimento per l’ASL Salerno e per il percorso di innovazione sanitaria che sta trasformando accessibilità e qualità dei servizi sociosanit…
• leggi l’articolo
A Sant’Arpino, nel Casertano, carabinieri hanno sequestrato un veicolo commerciale a tre ruote e un carico di rifiuti, deferendo un 33enne per gestione non auto…
• leggi l’articolo
Offerta di lavoro a Napoli per Senior Full Stack Developer presso una software house cliente di Grafton. Nessuna scadenza indicata nel bando; controllare la pag…
• leggi l’articolo
Il gaming mobile occupa ormai uno spazio importante nelle abitudini digitali degli italiani. Smartphone e tablet permettono di giocare durante una pausa, sui me…
• leggi l’articolo
Nella casa circondariale di Avellino gli agenti della Polizia Penitenziaria hanno sventato l’ennesimo tentativo di far entrare sostanze stupefacenti nell’istitu…
• leggi l’articolo
Controlli congiunti di Carabinieri e NAS in un panificio a Gricignano di Aversa: denunciato il titolare per irregolarità lavorative e igieniche; sequestrati cir…
• leggi l’articolo
Caivano - Si è conclusa nel territorio di Caivano la latitanza del 22enne Francesco Ahmetovic evaso lo scorso 13 ottobre dalla Casa di Reclusione di Carinola, i…
• leggi l’articolo
Giugliano - Un uomo di 37 anni è rimasto gravemente ferito al termine di una lite scoppiata nella tarda serata di ieri a Giugliano in Campania, nella zona di Li…
• leggi l’articolo
Michele Santoro debutta come monologhista teatrale con Siamo uomini o caporali al Teatro Karol, nell'ambito della rassegna Platealmente. Ingresso gratuito con p…
• leggi l’articolo
A Napoli, nella chiesa di Secondigliano, è in programma l’esecuzione gratuita del Requiem di Mozart diretta da Enzo Amato con un cast di solisti, nell’ambito de…
• leggi l’articolo
A Napoli arriva una guida gratuita per facilitare l’orientamento di studenti Erasmus e altri giovani stranieri: l’iniziativa, realizzata dall’associazione Noi@E…
• leggi l’articolo
A Napoli, una serata virtuale su TikTok ha messo insieme donne sopravvissute, associazioni, professionisti e rappresentanti istituzionali per rafforzare reti di…
• leggi l’articolo
Svolta nelle indagini della Squadra Mobile: mancano le telecamere nella zona del delitto, ma un testimone oculare ha fornito l'identikit dei tre assassini che l…
• leggi l’articolo
Dopo diversi mesi di utilizzo di una macchina isotonica, si può avvertire un movimento anomalo o un "gioco" nel carrello dei pesi o nei bracci di leva. Questa s…
• leggi l’articolo
Treccani Cultura racconta, attraverso la serie Onde, come gli italianismi abbiano varcato confini e culture. In vetta resta pizzaiuolo, seguito da espresso, mok…
• leggi l’articolo
Giovedì 29 ottobre il Centro Smile Dental di Napoli apre le porte alle famiglie per Sorrisi da paura, un evento speciale dedicato ai più piccoli, tra divertimen…
• leggi l’articolo
Ecco l'oroscopo completo di mercoledì 28 ottobre 2026, segno per segno, con l'analisi dei quattro ambiti richiesti e il consiglio astrologico del giorno. La gio…
• leggi l’articolo
Grafton cerca un Senior Graphic Designer per un cliente ICT con sede a Napoli. Candidatura tramite Grafton; la scadenza non è indicata nei dati disponibili.
• leggi l’articolo
Un esperimento ha riportato cellule del sangue anziane a uno stato simile a quello giovanile. Ma non è ancora un ringiovanimento dell’organismo.
• leggi l’articolo
Uno studio su 13 astronauti esamina come il cuore si adatta alla microgravità e alla gravità marziana simulata, con risultati incoraggianti ma ancora preliminar…
• leggi l’articolo
Un’analisi automatizzata di Reddit segnala sintomi inattesi associati a retatrutide non autorizzata, ma non dimostra un rapporto causale.
• leggi l’articolo
Un episodio ferroviario dell’Ottocento collega una tempesta geomagnetica ai primi segnali dei rischi per telegrafi e infrastrutture elettriche.
• leggi l’articolo
CREA pubblica un avviso informativo per assunzioni tramite collocamento mirato: 17 posti in diverse sedi italiane, tra cui Battipaglia (Campania), con candidatu…
• leggi l’articolo
Uno studio indica che un eccesso di RNA può danneggiare i mitocondri anche senza una risposta immunitaria, con possibili implicazioni per infezioni e invecchiam…
• leggi l’articolo
Portici - Restano gravissime, sebbene si registri un piccolissimo e cauto miglioramento, le condizioni di Mario Spedaliere, il 34enne tifoso del Portici rimasto…
• leggi l’articolo
Un uomo di 49 anni, con precedenti, è stato colpito da un’ordinanza di custodia cautelare in carcere nel contesto di un’indagine su detenzione ai fini di spacci…
• leggi l’articolo
Sigilli a un grande stabilimento conserviero nell’ambito dei controlli ambientali sul bacino del fiume Sarno. L’operazione, condotta dai militari del Nucleo ope…
• leggi l’articolo
Un contratto di lavoro che sarebbe stato registrato soltanto dopo la morte dell’operaio. È uno degli elementi emersi dalle indagini sulla morte di Salvatore Rus…
• leggi l’articolo
Una fabbrica clandestina di fuochi d’artificio nel centro abitato di Montesarchio, in provincia di Benevento, è stata scoperta dai Carabinieri. Un uomo, sorpres…
• leggi l’articolo
La giustizia gli ha riconosciuto il diritto al trasferimento, ma la decisione è arrivata quando ormai era troppo tardi per assistere la madre. Un maresciallo de…
• leggi l’articolo
Momenti di preoccupazione nel centro di Napoli, dove undici famiglie sono state sgomberate in via precauzionale da una palazzina al civico 37 di vico lungo Sant…
• leggi l’articolo
Il tempo cancella il reato, ma non gli effetti civili della sentenza. È questa la decisione pronunciata oggi dalla Corte di Assise di Appello di Napoli nei conf…
• leggi l’articolo