Doküman Başvuru
NMC, NAP ve .nfa
Bu sayfa NOT Cable'ın kendi geliştirdiği 3 parçayı özetler. Tamamı notFM tarafından yazıldı, hazır bir codec alınıp etrafına ağ kurulmadı.
Şartnamelerin tamamı kamuya açıktır. github.com/emrehakan-ai/notcable. Uygulama açık kaynak değildir.
NMC#
notFM Media Codec. Sesi yalnızca sıkıştırmak için değil, ağ üzerinden zamanlı ve senkron çalmak için tasarlanmış müzik codec'i.
Zaman öncelikli çerçeve. Her çerçeve yalnızca ses baytı değil, zamanı belli bir birimdir. Alıcı kaç örnek taşıdığını, ne zaman çalması gerektiğini ve kaybolursa nasıl toparlanacağını her zaman bilir.
Bağımsız çözülür. Her çerçeve tek başına çözülebilir ve kendi sağlama denetimini taşır. Bozulan bir çerçeve sessizce çalınmaz, ayırt edilir.
Mağaza müziğine göre ayarlı. Film, oyun ya da telefon sesi hedeflenmez. Uzun dinleme seansları, düşük yorgunluk, düşük ve sabit bit hızı, kesintisiz yayın ve temiz anons geçişi için ayarlanmıştır.
Kodlayıcı ağır, çözücü hafif. Kodlama güçlü bir makinede ya da içe aktarma anında bir kez yapılır. Çözücü ise avuç içi kartlarda rahat çalışacak kadar hafif kalır. 100 nokta kurmak 100 pahalı cihaz almak olmamalıdır.
NAP#
notFM Ses Protokolü. Ses paketlerini ve ortak zamanı taşıyan ağ protokolü.
Varış anı ile çalma anı ayrıdır. Alıcı paketi önceden alır, sarsıntı tamponuna koyar ve ortak zaman çizgisine göre çalar. Protokolün kalbi bu ayrımdır.
Sabit başlık, bütünlük denetimi. Her ses paketi 48 baytlık sabit bir başlık, NMC çerçevesi ve 4 baytlık bir sağlama kuyruğu taşır.
Ayrı bir saat kanalı. Saat istek ve cevap paketleri sesten bağımsız akar. Müzik dursa da saat akmaya devam eder, böylece saatler sonra başlayan bir parça da senkron başlar.
Tek gönderim, çok alıcı. Yayın çoklu gönderimle gider. Kaynak paketi bir kez gönderir, ağ onu katılan her alıcıya dağıtır.
Denetim paketleri de aynı protokol üzerinden taşınır. Alıcı susturma ve yasaklama komutları bunlardır.
.nfa#
notFM Ses Akışı. Yayına hazır dosya biçimi. İçinde tek tek çözülebilen NMC çerçeveleri sırayla durur.
Bir kez kodlanır, her yayında hazırdır. Dosya içe aktarılırken bir kez kodlanır. Yayın anında kaynak, saklanan çerçeveleri doğrudan ağ paketlerine koyar, yeniden kodlama yoktur.
Aynı dosya, aynı sonuç. Yeniden kodlama olmadığı için aynı dosyanın her yayını bit düzeyinde aynı çıkar ve çalma anında kodlayıcı işlemci gücü harcamaz.
Kendini tarif eden başlık. Başlıkta codec kipi, örnekleme hızı, kanal sayısı, hedef bit hızı, çerçeve sayısı ve toplam örnek sayısı yazılıdır. Başlığın kendisi de sağlamayla korunur.
Ses işleme zinciri#
Yayın zinciri de aynı yerde, kaynakta çalışır ve NMC kodlamasından önce uygulanır. Ağa çıkan paket zaten işlenmiş sestir.
Ayrıntı için Ses işleme sayfasına bakın.
Bayt düzeni#
Aşağıdakiler kamuya açık şartnameden alınmıştır. NAP paketlerinde çok baytlı
tam sayılar büyük sonlu, .nfa dosyasında ise küçük sonlu yazılır.
Sağlama toplamı ikisinde de aynı CRC32 çokterimlisini kullanır, 0xEDB88320,
yansıtılmış biçimde.
NAP ses paketi, başlık 48 bayt.
konum boy alan
0 4 imza "NAP1"
4 1 protokol sürümü (1)
5 1 paket tipi
6 2 başlık boyu
8 4 bayraklar (bit 0: akış sonu / parça sınırı)
12 8 akış kimliği
20 4 sıra numarası
24 8 çalma anı, ortak zaman çizgisinde nanosaniye
32 4 örnekleme hızı
36 2 kanal sayısı
38 2 codec kipi
40 2 taşınan PCM çerçevesi
42 2 ayrılmış (0)
44 4 yük bayt sayısı
48 n NMC çerçevesi
48+n 4 0 ile 48+n-1 arasının CRC32'si
Paket tipleri şöyle. 1 ses, 2 saat isteği, 3 saat cevabı, 4 denetim.
.nfa başlığı.
konum boy alan
0 4 imza "NFA1"
4 2 kap sürümü (1)
6 2 codec kipi
8 4 örnekleme hızı
12 2 kanal sayısı
14 2 ayrılmış (0)
16 4 hedef bit hızı, bit/sn
20 4 çerçeve kaydı sayısı
24 8 toplam PCM çerçevesi
32 4 başlığın 0-31 baytlarının CRC32'si
Saat#
Saat eşitlemesi 4 zaman damgalı bir alışverişle yapılır. İstek 32 bayt, cevap 48 bayttır, ikisi de istek kimliğini ve zaman damgalarını taşır.
Alıcı saniyede bir alışveriş yapar, kayan bir pencere üzerinde saat farkını ve sürüklenmeyi kestirir ve gidiş dönüş süresi düşük olan ölçümleri belirgin biçimde daha ağır tartar. Böylece kablosuz bağlantıdaki sarsıntılı bir alışveriş kestirimi bozmak yerine kendiliğinden sönümlenir.
Parça değişimi#
Yeni bir parça, aynı zaman çizgisinde daha büyük bir akış kimliği olarak duyurulur. Ayrı bir komut, ayrı bir el sıkışma ya da yeniden kilitlenme yoktur. Oturum kipindeki alıcılar yeni kimliği olduğu gibi devralır.