USB Dijital Ses

Bu makale, USB dijital ses ve ilgili USB tabanlı protokoller için Android desteğini gözden geçirmektedir.

Kitle

Bu makalenin hedef kitlesi Android cihaz OEM'leri, SoC satıcıları, USB ses çevre birimi tedarikçileri, gelişmiş ses uygulaması geliştiricileri ve Android'deki dahili USB dijital ses öğelerini ayrıntılı olarak anlamak isteyen diğerleridir.

Nexus cihazlarının son kullanıcıları, bunun yerine Nexus Yardım Merkezi'nde USB ana bilgisayar modunu kullanarak ses kaydetme ve oynatma makalesini görmelidir. Bu makale son kullanıcılara yönelik olmasa da, bazı müzik tutkunları tüketiciler ilgilerini çekebilir.

USB'ye Genel Bakış

Evrensel Seri Veri Yolu (USB), Wikipedia makalesi USB'de gayri resmi olarak açıklanmıştır ve resmi olarak USB Implementers Forum, Inc tarafından yayınlanan standartlarla tanımlanmıştır. Kolaylık sağlamak için burada temel USB kavramlarını özetliyoruz, ancak standartlar yetkili referanstır.

Temel kavramlar ve terminoloji

USB, ana bilgisayar adı verilen tek bir veri aktarım işlemi başlatıcısına sahip bir veriyoludur . Ana bilgisayar, veri yolu aracılığıyla çevre birimleriyle iletişim kurar.

Not: Cihaz ve aksesuar terimleri, çevre biriminin ortak eşanlamlılarıdır. Android cihazla veya aksesuar modu olarak adlandırılan Android'e özgü konseptle karıştırılabileceğinden, bu terimlerden burada kaçınıyoruz.

Kritik bir ana bilgisayar rolü, numaralandırmadır : veri yoluna hangi çevre birimlerinin bağlı olduğunu tespit etme ve tanımlayıcılar aracılığıyla ifade edilen özelliklerini sorgulama süreci.

Bir çevre birimi, tek bir fiziksel nesne olabilir, ancak gerçekte birden çok mantıksal işlevi yerine getirir . Örneğin, bir web kamerası çevre birimi hem kamera işlevine hem de mikrofon ses işlevine sahip olabilir.

Her çevresel işlevin, bu işlevle iletişim kurmak için protokolü tanımlayan bir arabirimi vardır.

Ana bilgisayar, bir boru üzerinden bir çevre birimi ile bir uç noktaya , bir veri kaynağına veya çevre biriminin işlevlerinden biri tarafından sağlanan havuza iletişim kurar.

İki tür boru vardır: mesaj ve akış . Çift yönlü kontrol ve durum için bir mesaj borusu kullanılır. Tek yönlü veri aktarımı için bir akış borusu kullanılır.

Ana bilgisayar tüm veri aktarımlarını başlatır, dolayısıyla girdi ve çıktı terimleri ana bilgisayara göre ifade edilir. Bir giriş işlemi, verileri çevre biriminden ana bilgisayara aktarırken, bir çıkış işlemi ana bilgisayardan çevre birimine veri aktarır.

Üç ana veri aktarım modu vardır: kesme , toplu ve eşzamanlı . Eşzamanlı mod, ses bağlamında daha fazla tartışılacaktır.

Çevre birimi, çevre biriminin kendisinin ötesinde dış dünyaya bağlanan terminallere sahip olabilir. Bu şekilde, çevre birimi, USB protokolü ile "gerçek dünya" sinyalleri arasında çeviri yapmaya hizmet eder. Terminaller, fonksiyonun mantıksal nesneleridir.

Android USB modları

Geliştirme Modu

Geliştirme modu , Android'in ilk sürümünden bu yana mevcuttur. Android cihazı, Linux, Mac OS X veya Windows gibi bir masaüstü işletim sistemini çalıştıran ana bilgisayarda bir USB çevre birimi olarak görünür. Görünen tek çevre birimi işlevi, Android fastboot veya Android Debug Bridge (adb) işlevidir. Fastboot ve adb protokolleri, USB toplu veri aktarım modu üzerinden katmanlanmıştır.

ana bilgisayar modu

Ana bilgisayar modu , Android 3.1'de (API düzeyi 12) tanıtılmıştır.

Android cihazının ana bilgisayar olarak hareket etmesi gerektiğinden ve çoğu Android cihazında, ana bilgisayar çalışmasına doğrudan izin vermeyen bir mikro USB konektörü bulunduğundan, genellikle bunun gibi bir hareket halinde ( OTG ) adaptör gerekir:

OTG

Şekil 1. Hareket halindeyken (OTG) adaptör

Bir Android cihazı, çevre biriminin ne kadar güç ihtiyacı olduğuna ve Android cihazının ne kadar sağlayabildiğine bağlı olarak belirli bir çevre birimini çalıştırmak için yeterli gücü sağlamayabilir. Yeterli güç mevcut olsa bile, Android cihazının pil şarjı önemli ölçüde kısalabilir. Bu durumlar için aşağıdaki gibi güçlendirilmiş bir hub kullanın:

Güçlendirilmiş hub

Şekil 2. Güçlendirilmiş hub

aksesuar modu

Aksesuar modu , Android 3.1'de (API düzeyi 12) tanıtıldı ve Android 2.3.4'e geri taşındı. Bu modda, Android cihazı, ana bilgisayar olarak hizmet veren dock gibi başka bir cihazın kontrolü altında bir USB çevre birimi olarak çalışır. Geliştirme modu ve aksesuar modu arasındaki fark, ek USB işlevlerinin ana bilgisayar tarafından adb'nin ötesinde görünür olmasıdır. Android cihaz geliştirme modunda başlar ve ardından yeniden anlaşma süreciyle aksesuar moduna geçer.

Aksesuar modu, özellikle aşağıda açıklanan ses olmak üzere Android 4.1'deki ek özelliklerle genişletildi.

USB ses

USB sınıfları

Her çevre birimi işlevinin, o işlev için standart protokolü belirten ilişkili bir aygıt sınıfı belgesi vardır. Bu, sınıf uyumlu ana bilgisayarların ve çevre birimlerinin, birbirlerinin çalışmaları hakkında ayrıntılı bilgi sahibi olmadan birlikte çalışmasını sağlar. Ana bilgisayar ve çevre birimi farklı kuruluşlar tarafından sağlanıyorsa, sınıf uyumluluğu çok önemlidir.

Sürücüsüz terimi, sınıf uyumlu ile ortak bir eşanlamlıdır ve bu tür bir çevre biriminin standart özelliklerinin, işletim sistemine özel bir sürücünün yüklenmesini gerektirmeden kullanılmasının mümkün olduğunu gösterir. Ana masaüstü işletim sistemleri için "sürücüye gerek yok" olarak tanıtılan bir çevre biriminin, istisnalar olsa da, sınıf uyumlu olacağı varsayılabilir.

USB ses sınıfı

Burada yalnızca ses işlevlerini uygulayan çevre birimleriyle ilgileniyoruz ve bu nedenle ses aygıtı sınıfına bağlı kalıyoruz. USB ses sınıfı belirtiminin iki sürümü vardır: sınıf 1 (UAC1) ve 2 (UAC2).

Diğer sınıflarla karşılaştırma

USB, bazıları ses sınıfıyla karıştırılabilecek birçok başka aygıt sınıfını içerir. Medyaya sektör odaklı erişim için yığın depolama sınıfı (MSC) kullanılırken, Medya Aktarım Protokolü (MTP) medyaya tam dosya erişimi içindir. Ses dosyalarını aktarmak için hem MSC hem de MTP kullanılabilir, ancak gerçek zamanlı akış için yalnızca USB ses sınıfı uygundur.

Ses terminalleri

Bir ses çevre biriminin terminalleri tipik olarak analogdur. Çevre biriminin giriş terminalinde sunulan analog sinyal, bir analogdan dijitale dönüştürücü (ADC) tarafından dijitale dönüştürülür ve ana bilgisayar tarafından tüketilmek üzere USB protokolü üzerinden taşınır. ADC, ana bilgisayar için bir veri kaynağıdır . Benzer şekilde, ana bilgisayar, bir dijital-analog dönüştürücünün (DAC) dönüştürüp bir analog çıkış terminaline sunduğu çevre birimine USB protokolü üzerinden bir dijital ses sinyali gönderir. DAC, ana bilgisayar için bir havuzdur .

Kanallar

Ses işlevine sahip bir çevre birimi, bir kaynak terminali, alıcı terminali veya her ikisini içerebilir. Her yönde bir kanal ( mono ), iki kanal ( stereo ) veya daha fazlası olabilir. İkiden fazla kanalı olan çevre birimlerine çok kanallı denir. Bir stereo akışının sol ve sağ kanallardan oluştuğu şeklinde yorumlanması ve bunun uzantısı olarak çok kanallı bir akışın her kanala karşılık gelen uzamsal konumlara sahip olduğu şeklinde yorumlanması yaygındır. Bununla birlikte, her kanala belirli bir standart uzamsal anlam atamamak da (özellikle HDMI'dan daha fazla USB ses için) oldukça uygundur. Bu durumda, her bir kanalın nasıl kullanılacağını belirlemek uygulamaya ve kullanıcıya kalmıştır. Örneğin, dört kanallı bir USB giriş akışı, bir oda içindeki çeşitli mikrofonlara bağlı ilk üç kanala ve bir AM radyodan giriş alan son kanala sahip olabilir.

Eşzamanlı aktarım modu

USB ses, hata kurtarma pahasına gerçek zamanlı özellikleri için eş zamanlı aktarım modunu kullanır. Eşzamanlı modda, bant genişliği garanti edilir ve döngüsel artıklık denetimi (CRC) kullanılarak veri iletim hataları algılanır. Ancak hata durumunda paket onayı veya yeniden iletim yoktur.

Eşzamanlı aktarımlar her Çerçeve Başlangıcı (SOF) döneminde gerçekleşir. SOF süresi, tam hız için bir milisaniye ve yüksek hız için 125 mikrosaniyedir. Her tam hızlı çerçeve 1023 bayta kadar yük taşır ve yüksek hızlı çerçeve 1024 bayta kadar yük taşır. Bunları bir araya getirerek maksimum aktarım hızını saniyede 1.023.000 veya 8.192.000 bayt olarak hesaplıyoruz. Bu, birleşik ses örnekleme hızı, kanal sayısı ve bit derinliği için teorik bir üst sınır belirler. Pratik sınır daha düşüktür.

Eşzamanlı modda üç alt mod vardır:

  • uyarlanabilir
  • asenkron
  • Senkron

Uyarlanabilir alt modda, çevresel havuz veya kaynak, ana bilgisayarın potansiyel olarak değişen bir örnekleme hızına uyum sağlar.

Eşzamansız (örtük geri besleme olarak da adlandırılır) alt modunda, havuz veya kaynak örnekleme hızını belirler ve ana bilgisayar uyum sağlar. Asenkron alt modun birincil teorik avantajı, kaynak veya havuz USB saatinin fiziksel ve elektriksel olarak DAC veya ADC'yi çalıştıran saate fiziksel ve elektriksel olarak daha yakın olmasıdır (ve aslında aynı veya ondan türetilmiş olabilir). Bu yakınlık, asenkron alt modun saat titreşimine daha az duyarlı olması gerektiği anlamına gelir. Ek olarak, DAC veya ADC tarafından kullanılan saat, ana bilgisayar saatinden daha yüksek doğruluk ve daha düşük sapma için tasarlanabilir.

Eşzamanlı alt modda, her SOF döneminde sabit sayıda bayt aktarılır. Ses örnekleme hızı etkin bir şekilde USB saatinden türetilir. Eşzamanlı alt mod, ses ile yaygın olarak kullanılmaz çünkü hem ana bilgisayar hem de çevre birimi USB saatinin insafına kalmıştır.

Aşağıdaki tablo eş zamanlı alt modları özetlemektedir:

alt mod bayt sayısı
paket başına
Aynı oran
tarafından karar verildi
Ses için kullanılır
uyarlanabilir değişken ev sahibi evet
asenkron değişken Çevresel evet
senkron sabit USB saati hayır

Pratikte, alt mod elbette önemlidir, ancak diğer faktörler de dikkate alınmalıdır.

USB ses sınıfı için Android desteği

Geliştirme Modu

USB ses geliştirme modunda desteklenmez.

ana bilgisayar modu

Android 5.0 (API seviye 21) ve üzeri, USB ses sınıfı 1 (UAC1) özelliklerinin bir alt kümesini destekler:

  • Android cihaz, ana bilgisayar olarak hareket etmelidir
  • Ses formatı PCM olmalıdır (arayüz tipi I)
  • Bit derinliği 16 bit, 24 bit veya 32 bit olmalıdır; burada 24 bit faydalı ses verisi, 32 bit kelimenin en önemli bitleri içinde sola dayalı olmalıdır.
  • Örnekleme hızı 48, 44.1, 32, 24, 22.05, 16, 12, 11.025 veya 8 kHz olmalıdır
  • Kanal sayısı 1 (mono) veya 2 (stereo) olmalıdır

Android çerçevesi kaynak kodunun incelenmesi, bu özellikleri desteklemek için gereken minimumun ötesinde ek kod gösterebilir. Ancak bu kod doğrulanmadı, bu nedenle daha gelişmiş özellikler henüz talep edilmedi.

aksesuar modu

Android 4.1 (API seviyesi 16), ana bilgisayara ses çalma için sınırlı destek ekledi. Aksesuar modundayken Android, ses çıkışını otomatik olarak USB'ye yönlendirir. Yani Android cihazı, örneğin bir dock gibi ana bilgisayara bir veri kaynağı olarak hizmet eder.

Aksesuar modu ses şu özelliklere sahiptir:

  • Android cihazı, önce Android cihazını geliştirme modundan aksesuar moduna geçirebilen bilgili bir ana bilgisayar tarafından kontrol edilmeli ve ardından ana bilgisayar uygun uç noktadan ses verilerini aktarmalıdır. Böylece Android cihaz, ana bilgisayara "sürücüsüz" görünmez.
  • Yön, ana bilgisayara göre ifade edilen girilmelidir .
  • Ses formatı 16 bit PCM olmalıdır
  • Örnekleme hızı 44,1 kHz olmalıdır
  • Kanal sayısı 2 (stereo) olmalıdır

Aksesuar modu sesi yaygın olarak benimsenmemiştir ve şu anda yeni tasarımlar için önerilmemektedir.

USB dijital ses uygulamaları

Adından da anlaşılacağı gibi, USB dijital ses sinyali, ortak TRS mini kulaklık konektörü tarafından kullanılan analog sinyal yerine bir dijital veri akışıyla temsil edilir. Sonunda, herhangi bir dijital sinyal, duyulabilmesi için analoga dönüştürülmelidir. Bu dönüşümün nereye yerleştirileceğini seçmenin bazı dezavantajları vardır.

İki DAC'nin hikayesi

Aşağıdaki örnek şemada iki tasarımı karşılaştırıyoruz. Öncelikle Uygulama İşlemcisi (AP), yerleşik DAC, amplifikatör ve kulaklıklara bağlı analog TRS konektörü olan bir mobil cihazımız var. Ayrıca, harici USB DAC'ye ve amplifikatöre bağlı USB'li ve ayrıca kulaklıklı bir mobil cihazı da düşünüyoruz.

DAC karşılaştırması

Şekil 3. İki DAC'nin Karşılaştırılması

Hangi tasarım daha iyi? Cevap ihtiyaçlarınıza bağlıdır. Her birinin avantajları ve dezavantajları vardır.

Not: Gerçek bir Android cihaz muhtemelen her iki seçeneğe de sahip olacağından, bu yapay bir karşılaştırmadır.

İlk tasarım A daha basittir, daha ucuzdur, daha az güç kullanır ve aksi takdirde eşit derecede güvenilir bileşenler varsayıldığında daha güvenilir bir tasarım olacaktır. Ancak, genellikle diğer gereksinimlere karşı ses kalitesi değiş tokuşları vardır. Örneğin, bu bir kitlesel pazar cihazıysa, müzik tutkunları için değil genel tüketicinin ihtiyaçlarına uyacak şekilde tasarlanabilir.

İkinci tasarımda, harici ses çevre birimi C, temel kitle pazarı Android cihazı B'nin maliyetini etkilemeden daha yüksek ses kalitesi ve daha fazla güç çıkışı için tasarlanabilir. Evet, daha pahalı bir tasarımdır, ancak maliyeti yalnızca isteyenler.

Mobil cihazlar, yüksek yoğunluklu devre kartlarına sahip olmakla ünlüdür; bu, bitişik analog sinyalleri bozan karışma için daha fazla fırsata neden olabilir. Dijital iletişim gürültüye daha az duyarlıdır, bu nedenle DAC'yi Android cihaz A'dan harici bir devre kartı C'ye taşımak, son analog aşamaların yoğun ve gürültülü devre kartından fiziksel ve elektriksel olarak izole edilmesini sağlayarak daha yüksek kalitede ses elde edilmesini sağlar.

Öte yandan, ikinci tasarım daha karmaşıktır ve ilave karmaşıklık, işlerin başarısız olması için daha fazla fırsat sunar. USB denetleyicilerinden ek gecikme de vardır.

Ana bilgisayar modu uygulamaları

Tipik USB ana bilgisayar modu ses uygulamaları şunları içerir:

  • müzik dinleme
  • telefon
  • anlık mesajlaşma ve sesli sohbet
  • kayıt

Tüm bu uygulamalar için Android, uyumlu bir USB dijital ses çevre birimini algılar ve ses ilkesi kurallarına göre ses çalma ve yakalamayı uygun şekilde otomatik olarak yönlendirir. Stereo içerik, çevre biriminin ilk iki kanalında oynatılır.

USB dijital sese özel API yoktur. Gelişmiş kullanım için, otomatik yönlendirme, USB'yi tanıyan uygulamaları etkileyebilir. Bu tür uygulamalar için, Ayarlar / Geliştirici Seçenekleri'nin Medya bölümündeki ilgili kontrol aracılığıyla otomatik yönlendirmeyi devre dışı bırakın.

Ana bilgisayar modundayken hata ayıklama

USB ana bilgisayar modundayken, USB üzerinden adb hata ayıklama kullanılamaz. Bir alternatif için Android Debug Bridge'in kablosuz kullanımı bölümüne bakın.

USB ses uygulama

Ses çevre birimi satıcıları için öneriler

Android cihazlarla birlikte çalışabilmek için ses çevre birimi satıcıları şunları yapmalıdır:

  • ses sınıfı uyumluluğu için tasarım; şu anda Android 1. sınıfı hedefliyor, ancak 2. sınıf için planlama yapmak akıllıca olacaktır.
  • tuhaflıklardan kaçının
  • referans ve popüler Android cihazlarla birlikte çalışabilirliği test edin
  • Tüketicilerin bilinçli kararlar verebilmeleri için desteklenen özellikleri, ses sınıfı uyumluluğunu, güç gereksinimlerini vb. açıkça belgeleyin

Android cihaz OEM'leri ve SoC satıcıları için öneriler

USB dijital sesi desteklemek için cihaz OEM'leri ve SoC satıcıları şunları yapmalıdır:

  • USB ana bilgisayar modunu desteklemek için donanım tasarlayın
  • android.hardware.usb.host.xml özellik bayrağı aracılığıyla çerçeve düzeyinde genel USB ana bilgisayar desteğini etkinleştirin
  • gereken tüm çekirdek özelliklerini etkinleştirin: USB ana bilgisayar modu, USB ses, eşzamanlı aktarım modu; bkz. Android Çekirdek Yapılandırması
  • en son çekirdek sürümleri ve yamaları ile güncel kalın; asil sınıf uyumluluğu hedefine rağmen, tuhaflıklara sahip mevcut ses çevre birimleri var ve son çekirdeklerin bu tür tuhaflıklar için geçici çözümleri var
  • aşağıda açıklandığı gibi USB ses politikasını etkinleştirin
  • device.mk içindeki PRODUCT_PACKAGES dosyasına audio.usb.default ekleyin
  • ortak USB ses çevre birimleriyle birlikte çalışabilirliği test edin

USB ses politikası nasıl etkinleştirilir

USB sesini etkinleştirmek için ses ilkesi yapılandırma dosyasına bir giriş ekleyin. Bu genellikle burada bulunur:

device/oem/codename/audio_policy.conf

Yol adı bileşeni "oem", Android cihazını üreten OEM'in adıyla değiştirilmelidir ve "kod adı", cihazın kod adıyla değiştirilmelidir.

Örnek bir giriş burada gösterilmektedir:

audio_hw_modules {
  ...
  usb {
    outputs {
      usb_accessory {
        sampling_rates 44100
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_USB_ACCESSORY
      }
      usb_device {
        sampling_rates dynamic
        channel_masks dynamic
        formats dynamic
        devices AUDIO_DEVICE_OUT_USB_DEVICE
      }
    }
    inputs {
      usb_device {
        sampling_rates dynamic
        channel_masks AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_USB_DEVICE
      }
    }
  }
  ...
}

Kaynak kodu

USB ses için ses Donanım Soyutlama Katmanı (HAL) uygulaması burada bulunur:

hardware/libhardware/modules/usbaudio/

USB audio HAL, büyük ölçüde Audio Terminology'de açıklanan tinyalsa'ya dayanır. USB ses eşzamanlı aktarımlara dayansa da, bu ALSA uygulaması tarafından soyutlanır. Böylece USB audio HAL ve tinyalsa'nın USB protokolünün bu kısmıyla ilgilenmelerine gerek yoktur.

USB sesini test etme

USB ses için CTS testi hakkında bilgi için bkz. USB Ses CTS Doğrulayıcı Testleri .