Bir internet radyosunu 7/24 açık tutmanın en zor yanı, kimse stüdyoda değilken de yayının sürmesidir. Bilgisayarınızda çalışan bir yayın programı kapandığında ya da internetiniz koptuğunda dinleyiciler sessizlikle veya hata mesajıyla karşılaşır. AutoDJ, bu boşluğu sunucu tarafında dolduran otomatik yayın katmanıdır: sunucuya yüklediğiniz müzikleri çalma listelerine ve zamanlamaya göre çalar, canlı DJ bağlandığında kenara çekilir, DJ çıkınca kaldığı yerden devam eder.

Bu yazıda AutoDJ kavramını, çalma listesi ve zamanlama mantığını, canlı DJ devralması ve fallback'i, crossfade ve jingle kullanımını anlatıyoruz. Ardından bunun AzuraCast'te Liquidsoap ile nasıl yapıldığını, Icecast'in fallback-mount özelliğini ve SHOUTcast DNAS'ın yedek yayın ayarlarını resmî belgeler üzerinden gösteriyoruz.

AutoDJ nedir?

AutoDJ nedir? Sunucu tarafı AutoDJ (Liquidsoap, AzuraCast), Masaüstü otomasyon (RadioBOSS, SAM), Sunucunun yedek dosyası (fallback, backupfile)

AutoDJ, bir yayın sunucusuna (Icecast veya SHOUTcast) sürekli ses gönderen, sunucuda çalışan bir source client'tır. Yani dinleyici açısından canlı bir DJ'den farkı yoktur; sunucuya normal bir kaynak gibi bağlanır. Farkı, bilgisayarınıza değil sunucuya bağlı olmasıdır: sizin makineniz kapalıyken de yayın sürer.

AzuraCast belgeleri bu rolü açıkça Liquidsoap'a verir: Liquidsoap AutoDJ olarak çalışır, giriş akışlarını her mount point için doğru formata dönüştürür, canlı DJ bağlantılarını, filtrelemeyi ve sıkıştırmayı yönetir. Masaüstü otomasyon yazılımları (RadioBOSS, SAM Broadcaster) da benzer işler yapar, ancak onlar sizin bilgisayarınızda çalışır.

YaklaşımNerede çalışırBilgisayar kapanınca
Sunucu tarafı AutoDJ (Liquidsoap, AzuraCast)Yayın sunucusunun yanındaYayın devam eder
Masaüstü otomasyon (RadioBOSS, SAM)Sizin bilgisayarınızdaYayın durur
Sunucunun yedek dosyası (fallback, backupfile)Yayın sunucusundaTek dosya veya döngü çalar

Çalma listeleri ve zamanlama

AutoDJ'nin beyni çalma listeleridir. AzuraCast belgesi çalma listesi tiplerini şöyle sıralar:

  • General Rotation: varsayılan, en düşük öncelikli liste; gün boyu çalar.
  • Once per X Songs: her X şarkıda bir çalar (jingle ve kuşak anonsları için ideal).
  • Once per X Minutes ve Once per X Hour: belirli zaman aralıklarıyla çalar.
  • Advanced Playlist: şarkıları AzuraCast yönetir, çalma kurallarını Liquidsoap koduyla siz yazarsınız.

Belgeye göre her liste tipi belirli saat bloklarına veya tarih aralığına zamanlanabilir; zamanlanmış listeler daha yüksek varsayılan önceliğe sahiptir ve yeni sürümlerde öncelik tek tek ayarlanabilir. Dinleyici şarkı istekleri (Song Requests) varsayılan olarak en yüksek önceliktedir. Böylece örneğin hafta içi 07:00-10:00 arasına bir sabah listesi, gece saatlerine sakin bir liste koyup geri kalan zamanı genel rotasyona bırakabilirsiniz.

Liquidsoap tarafında zaman bazlı geçiş switch ile yapılır. Liquidsoap Cookbook'taki örnek:

ruby
s = switch([({0h-7h}, night), ({7h-24h}, day)])

Jingle ve anonslar

Jingle, radyonuzun adını söyleyen kısa ses parçasıdır. AzuraCast'te bunu Once per X Songs tipinde ayrı bir liste olarak tanımlamak en pratik yoldur. Liquidsoap'ta aynı iş ağırlıklı rotate ile yapılır; Cookbook'taki örnekte her üç müzik parçasına bir jingle düşer:

ruby
radio = rotate([jingles.{weight = 1}, music.{weight = 3}])

Belirli bir zaman dilimi açıldığında bir kez jingle çalmak için Cookbook predicate.activates kullanır:

ruby
radio = switch([(predicate.activates({0m-5m}), jingles), ({true}, playlist)])

Crossfade: şarkılar arası geçiş

Crossfade, bir şarkı biterken sesini azaltıp bir sonrakini yükselterek ikisini kısa bir süre üst üste bindirmektir; radyolardaki kesintisiz akış hissini verir. Liquidsoap'ta en basit hâli tek satırdır:

ruby
s = crossfade(s)

AzuraCast'in Liquidsoap belgesi crossfade'in iki parçadan oluştuğunu (crossing ve fading) anlatır ve parça bazında liq_fade_in, liq_fade_out gibi metadata alanlarıyla fade sürelerinin ayarlanabildiğini gösterir. Panelde hangi geçiş ayarlarının sunulduğu AzuraCast sürümüne göre değişebilir; istasyonunuzun AutoDJ ayarlarına bakın. Masaüstü tarafta RadioBOSS ve SAM Broadcaster da crossfade içerir; SAM'in crossfader'ı fade noktalarını otomatik tespit edebilir ve Gap Killer ile parça aralarındaki sessizliği keser.

Canlı DJ devralması ve fallback

Canlı DJ devralması ve fallback: AzuraCast'te canlı DJ, Liquidsoap'ta fallback mantığı

AutoDJ'nin en önemli işi canlı yayınla birlikte çalışabilmektir. Mantık her sistemde aynıdır: bir öncelik sırası vardır, canlı kaynak bağlıysa o çalar, değilse AutoDJ çalar. Canlı kaynak koparsa dinleyiciler düşmez, otomatik olarak AutoDJ'ye geçer.

AzuraCast'te canlı DJ

AzuraCast'te istasyonda Enable Streamers açıldığında birden fazla DJ hesabı oluşturabilirsiniz. Her DJ doğrudan Liquidsoap'a bağlanır; belgeye göre amaç canlı DJ'ler ile AutoDJ arasında kesintisiz geçiştir. DJ'ler Icecast veya Shoutcast uyumlu herhangi bir yayın yazılımını kullanabilir; bağlantı bilgileri istasyonun Streamers/DJ Accounts sayfasındadır. AzuraCast tüm DJ bağlantılarını Liquidsoap üzerinden yönlendirdiği için sunucu tipi olarak Icecast seçilmesini önerir. Yayın kaydı açılabilir ve kayıtlar her DJ'in yanındaki Broadcasts menüsünden indirilebilir.

Liquidsoap'ta fallback mantığı

Liquidsoap'ta canlı yayını kabul eden giriş input.harbor'dır: kaynak yazılımlar sesi, Icecast'e gönderir gibi Liquidsoap'a gönderir. Harbor belgesindeki örnek ve fallback zinciri şöyle birleşir:

ruby
live = input.harbor("test-harbor", port=8080, password="xxx")
music = playlist("/my/playlist.txt")
radio = fallback([live, music])

Belgeye göre listede ilk sıradaki canlı kaynak, kullanılabilir olduğu anda devreye girer ve şarkı sonunu beklemez; canlı girişler varsayılan olarak track_sensitive=false ile çalışır. Şarkının bitmesini beklemek isterseniz .{track_sensitive = true} kullanılır. Cookbook, en sona bir acil durum (emergency) kaynağı da eklemeyi gösterir: fallback([live, playlist, emergency]). Uzak bir akış koptuğunda kaynağı ayakta tutmak için mksafe, canlı yayın sessiz kaldığında onu devre dışı saymak için blank.strip kullanılır.

Icecast fallback-mount

Icecast fallback-mount: Zincirleme, Dosyaya fallback, fallback-when-full, Fallback yoksa

Liquidsoap kullanmasanız da Icecast'in kendisi basit bir devralma mekanizması sunar. Icecast yapılandırma belgesine göre bir mount'a <fallback-mount> tanımlarsanız, kaynak kapandığında ya da yayın yapmadığında dinleyiciler o mount'a taşınır. <fallback-override>1</fallback-override> ise kaynak geri bağlandığında dinleyicileri fallback'ten geri alır. Tipik kurgu: AutoDJ sürekli /autodj'ye yayın yapar, canlı DJ /canli'ya bağlanır, dinleyiciler /canli'yı dinler.

xml
<mount type="normal">
    <mount-name>/canli</mount-name>
    <fallback-mount>/autodj</fallback-mount>
    <fallback-override>1</fallback-override>
</mount>
  • Zincirleme: fallback mount da yayın yapmıyorsa ve onun da fallback'i varsa dinleyiciler oraya geçebilir.
  • Dosyaya fallback: fallback, webroot içindeki bir dosya da olabilir; belgeye göre dinleyici çıkana ya da yayın geri gelip dinleyicileri geri alana kadar tekrar eder.
  • fallback-when-full: mount'un max-listeners sınırı dolduğunda yeni dinleyicileri fallback'e gönderir.
  • Fallback yoksa: dinleyiciler başka bir mount'a taşınamazsa bağlantıları kesilir.

Dinleyicileri elle taşımak isterseniz Icecast yönetim arayüzündeki /admin/moveclients?mount=/canli&destination=/autodj uç noktası da vardır; hedef mount'ta canlı bir kaynak bulunması gerekir.

SHOUTcast tarafında durum

SHOUTcast DNAS'ın kendi içinde, kaynak düştüğünde devreye giren yedek ayarları bulunur. DNAS 2.5.5 belgesine göre backupfile veya yayına özel streambackupfile_X, kaynak koptuğunda ya da hiç yokken çalınır; backuptitle bu sırada gösterilecek başlığı, backuploop ise döngü sayısını belirler (varsayılan 0, kaynak geri gelene kadar döngü). streambackupurl_X ile bir dosya yerine başka bir yayın adresine düşülebilir. introfile ise yayın sürerken yeni bağlanan dinleyiciye önce çalınan karşılama dosyasıdır.

ini
streamid_1=1
streambackupfile_1=/yol/yedek.mp3
backuptitle=Birazdan canli yayindayiz
backuploop=0

SHOUTcast'in tam bir AutoDJ olarak sunduğu Transcoder (sc_trans) aracına gelince: bu yazı için güncel resmî belgesine erişemedik, bu yüzden ayar adı vermiyoruz. sc_trans kullanmayı düşünüyorsanız shoutcast.com üzerindeki güncel belgeleri esas alın. AzuraCast gibi paneller ise SHOUTcast'i isteğe bağlı yayın sunucusu olarak kullanırken AutoDJ işini yine Liquidsoap'a yaptırır.

Sık yapılan hatalar

  • AutoDJ ile canlı yayını farklı format ve bitrate'te göndermek. SHOUTcast belgesi yedek ve intro dosyalarının yayın formatıyla aynı olmasını şart koşar; Icecast fallback'inde de aynı formatı kullanmak en güvenli yoldur.
  • Canlı DJ'in AutoDJ ile aynı mount'a bağlanmaya çalışması; bir mount'a aynı anda tek kaynak bağlanır.
  • Fallback mount tanımlamadan canlı mount'u yayınlamak; DJ koptuğunda dinleyiciler düşer.
  • Jingle'ları genel rotasyona karıştırmak; Once per X Songs gibi ayrı bir listeyle düzenli aralıklar elde edilir.
  • Telif durumunu düşünmeden geniş bir müzik arşivini 7/24 çalmak; bunun için radyo yayınında müzik telifi yazısına bakın.

Sık Sorulan Sorular

AutoDJ için bilgisayarımın açık kalması gerekir mi?

Sunucu tarafı AutoDJ'de (AzuraCast/Liquidsoap gibi) hayır; müzikler sunucuya yüklenir ve yayın orada üretilir. RadioBOSS veya SAM Broadcaster gibi masaüstü otomasyonlarda ise bilgisayar açık kalmalıdır.

Canlı yayına geçince AutoDJ'yi elle durdurmam gerekir mi?

Doğru kurulmuş bir fallback düzeninde hayır. Liquidsoap'ta canlı kaynak fallback listesinde önde olduğu için bağlandığı anda devreye girer; Icecast'te fallback-override açıksa canlı mount geri geldiğinde dinleyiciler oraya taşınır.

Jingle'lar şarkı adı olarak görünür mü?

Bu, AutoDJ'nin ve çalma listesinin ayarlarına bağlıdır. Panel kullanıyorsanız çalma listesi ayarlarında metadata ile ilgili seçenekleri, Liquidsoap kullanıyorsanız metadata işlemleriyle ilgili belgeleri kontrol edin.

AutoDJ'yi kendim kurabilir miyim?

Evet. AzuraCast açık kaynaktır ve Docker ile kurulması önerilir; Liquidsoap'ı tek başına da kullanabilirsiniz. Kurulumun genel akışı için internet radyosu nasıl kurulur yazısına bakın.

Yazılım ve platform adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: SHOUTcast ve Icecast farkı · İnternet radyosu nasıl kurulur · Radyo yayın programları · Bitrate ve ses kalitesi · Müzik telifi · Radyo yazılımı