USB dijital ses

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

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 USB dijital ses dahili bileşenleri hakkında ayrıntılı bilgi edinmek isteyen diğerleridir.

Nexus cihazlarının son kullanıcıları bunun yerine Nexus Yardım Merkezi'ndeki USB ana makine modunu kullanarak ses kaydetme ve oynatma makalesini görmelidir. Bu makale son kullanıcılara yönelik olmasa da, bazı odyofil tüketicilerinin ilgisini çekecek kısımlar bulunabilir.

USB'ye genel bakış

Evrensel Seri Veri Yolu (USB), USB adlı Vikipedi makalesinde gayri resmi olarak açıklanmıştır ve USB Equipments Forum, Inc. tarafından yayınlanan standartlar tarafından resmi olarak tanımlanmıştır. Kolaylık olması açısından temel USB kavramlarını burada özetledik ancak standartlar geçerli referanslardır.

Temel kavramlar ve terminoloji

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

Not: Cihaz ve aksesuar terimleri, çevre birimi kelimesinin yaygın eşanlamlılarıdır. Android cihazla veya Android'e özgü aksesuar modu adı verilen kavramla karıştırılabileceğinden burada bu terimlerden 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 işlemi.

Bir çevre birimi tek bir fiziksel nesne olabilir ancak aslında birden fazla 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 fonksiyon, o fonksiyonla iletişim kurmak için protokolü tanımlayan bir arayüze sahiptir.

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

İki tür kanal vardır: mesaj ve akış . Çift yönlü kontrol ve durum için bir mesaj kanalı 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 giriş ve çıkış terimleri ana bilgisayara göre ifade edilir. Bir giriş işlemi, verileri çevre biriminden ana bilgisayara aktarırken, bir çıkış işlemi, verileri ana bilgisayardan çevre birimine aktarır.

Üç ana veri aktarım modu vardır: kesme , toplu ve eş zamanlı . Eşzamanlı mod, ses bağlamında daha ayrıntılı olarak ele alınacaktır.

Çevre biriminin, çevre biriminin ötesinde dış dünyaya bağlanan terminalleri 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 bilgisayara USB çevre birimi olarak görünür. Görünür tek çevresel işlev Android fastboot veya Android Debug Bridge (adb) işlevidir. Fastboot ve adb protokolleri, USB toplu veri aktarım modu üzerinde katmanlıdır.

Ana bilgisayar modu

Ana bilgisayar modu Android 3.1'de (API düzeyi 12) tanıtıldı.

Android cihazının ana bilgisayar görevi görmesi gerektiğinden ve çoğu Android cihazı, ana bilgisayarın çalışmasına doğrudan izin vermeyen bir mikro USB konektörü içerdiğinden, genellikle bunun gibi bir hareket halindeyken ( OTG ) adaptör gerekir:

OTG

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

Bir Android cihazı, çevre biriminin ne kadar güce ihtiyaç duyduğuna ve Android cihazının ne kadar sağlama kapasitesine bağlı olarak belirli bir çevre birimini çalıştırmak için yeterli gücü sağlayamayabilir. Yeterli güç mevcut olsa bile Android cihazının pil şarjı önemli ölçüde kısalabilir. Bu durumlar için aşağıdaki gibi elektrikli bir hub kullanın:

Güçlendirilmiş merkez

Şekil 2. Elektrikli hub

Aksesuar modu

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

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

USB ses

USB sınıfları

Her çevre birimi işlevi, o işlev için standart protokolü belirten ilişkili bir cihaz sınıfı belgesine sahiptir. Bu, sınıf uyumlu ana bilgisayarların ve çevre birimi işlevlerinin, birbirlerinin çalışmalarına ilişkin ayrıntılı bilgi gerektirmeden birlikte çalışmasına olanak tanır. Ana bilgisayar ve çevre birimi farklı kuruluşlar tarafından sağlanıyorsa sınıf uyumluluğu kritik öneme sahiptir.

Sürücüsüz terimi, sınıf uyumlu kelimesinin yaygın eşanlamlısıdır ve bu tür bir çevre biriminin standart özelliklerini, işletim sistemine özel bir sürücünün kurulmasına gerek kalmadan kullanmanın mümkün olduğunu belirtir. İstisnalar olabilmesine rağmen, büyük masaüstü işletim sistemleri için "sürücüye gerek yok" olarak tanıtılan bir çevre biriminin sınıfla uyumlu olacağı varsayılabilir.

USB ses sınıfı

Burada yalnızca ses işlevlerini uygulayan ve dolayısıyla ses cihazı sınıfına bağlı kalan çevre birimleriyle ilgileniyoruz. USB ses sınıfı spesifikasyonunun 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 cihaz sınıfını içerir. Yığın depolama sınıfı (MSC), medyaya sektör odaklı erişim için kullanılırken Medya Aktarım Protokolü (MTP), medyaya tam dosya erişimi için kullanılır. 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 , 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, USB protokolü üzerinden çevre birimine bir dijital ses sinyali gönderir; burada bir dijital-analog dönüştürücü (DAC), dönüştürülür ve bir analog çıkış terminaline sunulur. DAC, ana bilgisayar için bir lavabodur .

Kanallar

Ses işlevine sahip bir çevre birimi, bir kaynak terminali, havuz terminali veya her ikisini birden içerebilir. Her yönde bir kanal ( mono ), iki kanal ( stereo ) veya daha fazla 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 buna ek 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 mekansal anlam atamamak da oldukça uygundur (özellikle HDMI'dan ziyade USB ses için). Bu durumda her kanalın nasıl kullanılacağını tanımlamak uygulamaya ve kullanıcıya kalmıştır. Örneğin, dört kanallı bir USB giriş akışında ilk üç kanal bir odadaki çeşitli mikrofonlara bağlı olabilir ve son kanal bir AM radyodan girdi alabilir.

Eşzamanlı aktarım modu

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

Her Çerçeve Başlangıcı (SOF) döneminde izokron iletimler meydana gelir. SOF periyodu tam hız için bir milisaniye, yüksek hız için ise 125 mikrosaniyedir. Her bir tam hızlı çerçeve 1023 bayta kadar veri yükü taşır ve yüksek hızlı bir ç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 üzerinde 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 örnekleme hızına uyum sağlar.

Eşzamansız (örtük geri bildirim olarak da bilinir) alt modunda, havuz veya kaynak örnekleme hızını belirler ve ana bilgisayar buna uyum sağlar. Eşzamansız alt modun birincil teorik avantajı, kaynak veya havuz USB saatinin DAC veya ADC'yi çalıştıran saate fiziksel ve elektriksel olarak daha yakın olmasıdır (ve aslında aynı olabilir veya ondan türetilmiş olabilir). Bu yakınlık, asenkron alt modun saat titreşiminden daha az etkilenmesi gerektiği anlamına gelir. Ayrıca DAC veya ADC tarafından kullanılan saat, ana bilgisayar saatine göre daha yüksek doğruluk ve daha düşük sapma sağlayacak şekilde tasarlanabilir.

Senkronize alt modda, her SOF periyodunda sabit sayıda bayt aktarılır. Ses örnekleme hızı etkili bir şekilde USB saatinden elde edilir. Senkron 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 HAYIR

Uygulamada 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 düzeyi 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 bitlik yararlı ses verileri, 32 bitlik kelimenin en önemli bitleri içinde sola dayalı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çeve kaynak kodunun incelenmesi, bu özellikleri desteklemek için gereken minimum kodun ötesinde ek kod gösterebilir. Ancak bu kod doğrulanmadığından daha gelişmiş özellikler henüz talep edilmemektedir.

Aksesuar modu

Android 4.1 (API düzeyi 16), ana bilgisayara ses oynatma için sınırlı destek ekledi. Aksesuar modundayken Android, ses çıkışını otomatik olarak USB'ye yönlendirir. Yani, Android cihazı ana bilgisayara (örneğin bir dock) veri kaynağı görevi görür.

Aksesuar modu ses şu özelliklere sahiptir:

  • Android cihazı, öncelikle Android cihazını geliştirme modundan aksesuar moduna geçirebilecek bilgili bir ana bilgisayar tarafından kontrol edilmeli ve ardından ana bilgisayar, ses verilerini uygun uç noktadan aktarmalıdır. Böylece Android cihazı ana bilgisayara "sürücüsüz" görünmüyor.
  • Yön , ana bilgisayara göre ifade edilerek 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 geniş çapta 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 dijital bir veri akışıyla temsil edilir. Sonuçta herhangi bir dijital sinyalin duyulmadan önce analoga dönüştürülmesi gerekir. Bu dönüşümün nereye yerleştirileceğinin seçilmesinde bazı ödünler vardır.

İki DAC'nin hikayesi

Aşağıdaki örnek diyagramda iki tasarımı karşılaştırıyoruz. Öncelikle Uygulama İşlemcisi (AP), yerleşik DAC, amplifikatör ve kulaklıklara takılı analog TRS konektörüne sahip bir mobil cihazımız var. Ayrıca harici USB DAC'ye bağlı USB'li ve amplifikatörlü, 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: Bu yapay bir karşılaştırmadır, çünkü gerçek bir Android cihazında muhtemelen her iki seçenek de mevcut olacaktır.

İlk tasarım A daha basit, 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. Bununla birlikte, genellikle ses kalitesi ile diğer gereksinimler arasında ödünleşimler vardır. Örneğin, eğer bu kitlesel pazara yönelik bir cihazsa, müzik tutkunlarının değil genel tüketicinin ihtiyaçlarına uyacak şekilde tasarlanmış olabilir.

İkinci tasarımda, harici ses çevre birimi C, temel kitlesel 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 maliyet yalnızca bunu isteyenler.

Mobil cihazlar, yüksek yoğunluklu devre kartlarına sahip olmalarıyla ünlüdür; bu da, bitişik analog sinyalleri bozan çapraz karışma için daha fazla fırsata yol açabilir. Dijital iletişim gürültüye karşı daha az duyarlıdır, dolayısıyla DAC'yi Android cihaz A'dan harici 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 yalıtılmasına olanak tanır ve bu da daha yüksek kalitede ses sağlar.

Öte yandan, ikinci tasarım daha karmaşıktır ve karmaşıklığın artmasıyla birlikte işlerin başarısız olması için daha fazla fırsat ortaya çıkar. Ayrıca USB denetleyicilerinden kaynaklanan 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

Android, tüm bu uygulamalar için uyumlu bir USB dijital ses çevre birimini algılar ve ses politikası kurallarına göre ses oynatmayı ve yakalamayı otomatik olarak yönlendirir. Stereo içerik çevre birimin ilk iki kanalında oynatılır.

USB dijital sese özel API yoktur. Gelişmiş kullanım için otomatik yönlendirme, USB uyumlu uygulamalara müdahale edebilir. Bu tür uygulamalar için, Ayarlar / Geliştirici Seçenekleri'nin Medya bölümündeki ilgili kontrolü kullanarak otomatik yönlendirmeyi devre dışı bırakın.

Ana makine modundayken hata ayıklama

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

USB sesini uygulayın

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ğuna yönelik tasarım; Android şu anda Sınıf 1'i hedefliyor ancak Sınıf 2 için plan yapmak akıllıca olacaktır.
  • tuhaflıklardan kaçının
  • Referans ve popüler Android cihazlarla birlikte çalışabilirlik testi
  • Tüketicilerin bilinçli kararlar alabilmesi 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 destekleyecek donanım tasarımı
  • android.hardware.usb.host.xml özellik işareti aracılığıyla genel USB ana bilgisayar desteğini çerçeve düzeyinde etkinleştirin
  • gereken tüm çekirdek özelliklerini etkinleştirin: USB ana bilgisayar modu, USB ses, sabit aralıklı aktarım modu; bkz. Android Çekirdek Yapılandırması
  • en yeni çekirdek sürümleri ve yamalarla güncel kalın; Asil sınıf uyumluluğu hedefine rağmen, tuhaflıkları olan mevcut ses çevre birimleri vardır ve yeni çekirdekler bu tür tuhaflıklar için geçici çözümlere sahiptir
  • USB ses politikasını aşağıda açıklandığı gibi etkinleştirin
  • audio.usb.default'u Device.mk'deki product_PACKAGES dosyasına ekleyin
  • Ortak USB ses çevre birimleriyle birlikte çalışabilirlik testi

USB ses politikasını etkinleştir

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, "kod adı" ise 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 ses HAL'si büyük ölçüde Ses terminolojisinde açıklanan Tinyalsa'ya dayanır. Her ne kadar USB sesi eş zamanlı aktarımlara dayansa da, ALSA uygulaması bu durumu ortadan kaldırıyor. Yani USB ses HAL ve Tinyalsa'nın USB protokolünün bu kısmıyla ilgilenmesine gerek yok.

USB sesini test edin

USB sese yönelik CTS testi hakkında bilgi için bkz. USB Ses CTS Doğrulayıcı Testleri .