Lofi Girl радіостанція. Монітор едішн

Під час роботи у мене часто на фоні грають lofi-радіостанції (також я знайшов цікавішу альтернативу – плейлисти а-ля «Luxury Hotel Lounge» в спотіфаях), і час від часу (окей, дуже часто) перевіряю, що взагалі діється в моніторингових каналах, і ось народився приклад такої радіостанції зі сповіщеннями від монітора.

Приклад сповіщення
0:00
/20.976326530612244

Трансляція в реальному часі

⚠️ Тут була колись трансляція в реальному часі, але експеримент завершився. Всім дякую!

OpenAI просить вказувати, що синтез тексту в аудіо, раптом що, робить не людина, і навіть не бездушна машина, а ✨AI✨!
Текст для сповіщень береться з каналу
monitor.

Взагалі, то був брейншторм, чи можна взагалі створити повноцінну інтернет-радіостанцію з допомогою AI. Музика та плейлисти – взагалі не є проблемою (тут навіть без AI можна обійтись), новини можна з новинних ресурсів автоматично збирати та раз на годину та публікувати (теж майже без AI, але дуже короткий опис новини можна робити з допомогою), а от з розмовними шоу – це проблемно, хоча вже і почали зʼявлятись подкасти, згенеровані лише на основі AI – можна послухати уявну розмову Стіва Джобса з Джо Роганом.

Щоб трохи покопати технічну складову цих стрімінгів та цей новий text-to-speech сервіс (створений за каденції Сема Альтмана), зʼявилась дуже всрата ідея – обʼєднати сповіщення в реальному часі про загрози та вибухи з фоновою музикою.

Text-to-Speech

Через те, що OpenAI тепер йдуть не лише в той бік, щоб вводити постійно текст, зʼявилась можливість надсилати текст голосовухою! Можливість переводити текст в голос була і раніше, а от можливість конвертувати текст в голос зʼявилась нещодавно.

Чому для синтезу використовується AI, адже умовна сірі може спілкуватись, не маючи ніякого AI? В AI-версії можна почути приємніші та в рази реалістичніші голоси (приклади від OpenAI), вони розуміють різні абревіатури та інші лінгвістичні штуки, які не потрібно зачитувати, як вони виглядають в тексті.

Звісно, що тут теж не все ідеально. Поки я пробував використовувати ці інструменти, я помітив, що скорочення «км.» зачитує як «кілометров» та акцент українською досить дивний – виглядає, як суміш канадсько-української мови (як у фільмі «Мої думки тихі» або у виставі «З цією виставою щось не так», хехе).

Приклад
0:00
/17.554285714285715

Також не можна примусово ставити паузи та окремі слова зачитувати швидше/повільніше можливість зачитувати. Наприклад, те ж Polly від Амазону, має свою нотацію та дозволяє без проблем змінювати багато параметрів, але не має української мови.

Стрімінг (нудні технічні деталі та проблеми)

Перед тим, як зробити стрімінг, я поспілкувався з чатгпт про це! Фактично мені треба було програвати постійно один стрім, та час від часу зменшувати плавно гучність до 30%, програвати інший трек (з гучністю 100%), та змінювати плавно гучність до 100% назад. Він запропонував дуже складний ланцюг ffmpeg → Digital Audio Workstation → Open Broadcaster Software та VoiceMeeter Banana. Напевно, він подумав, що у мене буде якась сурйозна радіостанція!

Я трохи офігів, бо мені здавалось, що достатньо програвати всю музику в системному аудіо-стрімі та просто публікувати його назовні, тому вирішив піти іншим шляхом – тримати постійно один vlc-плеєр зі стрімом, запускати час від часу інший з .mp3 треком і стрімити в інтернет всі аудіостріми з девайсу.

Все це успішно запрацювало з python-vlc та cvlc -vvv pulse://alsa_output.platform-bcm2835_audio.analog-stereo.monitor --sout '#transcode{acodec=mp3,ab=256,channels=2}:standard{access=http,dst=0.0.0.0:9602/stream.mp3}', але після того, як я ці команди додав в сервіси supervisor (щоб стартувати та перезапускались автоматично), все це перестало працювати – сам скрипт працює (якщо я вставляю навушники в raspberry pi – я все чую), але в логах все ще були помилки (PulseAudio server connection failure: Connection refused), і cvlc теж перестає бачити аудіо-вихід. Як я тільки не шукав – я так і не зрозумів суть проблеми та рішень, хоч і багато всього перепробував. Можливо, це тому, що у мене стоїть headless debian, можливо це щось не так з правами (хоча в конфігурацію supervisor я переніс всі змінні), або фізичний вихід працює інакше, або є ще якась різниця між tty та сервісами від supervisor. Тому раптом хтось знає прямо очевидну помилку, чому не працює (я прямо впевнений, що проблема десь на поверхні, і це я просто не зміг зрозуміти PulseAudio) — напишіть мені будбласка!

Чи працюватиме постійно?

Через те, що це все працює у мене на компʼютері вдома, який постійно підключений до інтернету, то під час блекаутів це навряд чи працюватиме. Ну і взагалі, це було створено як proof-of-concept, тому ніяких гарантій немає – може працюватиме далі, а може трансформується в щось більше :)


А щоб блекаутів не було – запаковуємо небо своїми гривнями, а я побіг подавати цю радіостанцію на премію ДОУ, як проєкт, який наближує перемогу!