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 uygulama geliştiricileri ve Android'deki USB dijital ses dahili bileşenleri hakkında ayrıntılı bilgi arayan diğer kişilerdir.

Nexus cihazlarının son kullanıcıları bunun yerine Nexus Yardım Merkezi'nde USB ana bilgisayar modunu kullanarak ses kaydetme ve oynatma makalesine bakmalıdır. Bu makale son kullanıcılara yönelik olmasa da, bazı müzik tutkunları ilgi çekici kısımlar bulabilir.

USB'ye Genel Bakış

Evrensel Seri Veri Yolu (USB), USB Wikipedia makalesinde gayri resmi olarak açıklanır ve resmi olarak USB Applyers Forum, Inc. tarafından yayınlanan standartlarla tanımlanır. Kolaylık sağlamak için burada temel USB kavramlarını özetliyoruz, ancak standartlar yetkili 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, veri yolu aracılığıyla çevre birimleri ile iletişim kurar.

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

Kritik bir ana bilgisayar rolü numaralandırmadır : hangi çevre birimlerinin veri yoluna 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 uygular. Örneğin, bir web kamerası çevre birimi hem kamera işlevine hem de mikrofon ses işlevine sahip olabilir.

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

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

İki tür boru 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 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 verileri ana bilgisayardan çevre birimine aktarır.

Üç ana veri aktarım modu vardır: interrupt , toplu ve isochronous . Eşzamanlı mod, ses bağlamında daha ayrıntılı olarak tartışılacaktır.

Çevre birimi, çevre biriminin ö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, işlevin 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 sistemi çalıştıran bir ana bilgisayara bir USB çevre birimi olarak görünür. Görünen tek çevre birimi işlevi, Android fastboot veya Android Debug Bridge'dir (adb) . 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 gibi davranması gerektiğinden ve çoğu Android cihazında ana bilgisayarın çalışmasına doğrudan izin vermeyen bir mikro USB konektörü bulunduğundan, genellikle bunun gibi bir hareket halindeyken ( OTG ) adaptör gereklidir:

otg

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

Bir Android cihazı, çevre biriminin ihtiyaç duyduğu güce ve Android cihazının ne kadarını sağlayabileceğ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, şuna benzer güçlü bir hub kullanın:

Elektrikli hub

Şekil 2. Elektrikli hub

aksesuar modu

Aksesuar modu , Android 3.1'de (API seviye 12) tanıtıldı ve Android 2.3.4'e geri taşındı. Bu modda, Android cihazı, ana bilgisayar olarak hizmet veren bir yuva 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, özellikle aşağıda açıklanan ses olmak üzere Android 4.1'deki ek özelliklerle genişletildi.

USB ses

USB sınıfları

Her çevresel işlevin, 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 çevresel işlevlerin, birbirlerinin işleyişi hakkında ayrıntılı bilgi sahibi olmadan birlikte çalışmasını sağlar. Ana bilgisayar ve çevre birimi farklı varlıklar tarafından sağlanıyorsa, sınıf uyumluluğu kritiktir.

Sürücüsüz terimi, sınıf uyumlu için 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 belirtir. İstisnalar olsa da, büyük masaüstü işletim sistemleri için "sürücüye gerek yok" şeklinde reklamı yapılan bir çevre biriminin sınıf uyumlu olacağı varsayılabilir.

USB ses sınıfı

Burada sadece ses fonksiyonlarını uygulayan çevre birimleri ile ilgileneceğiz ve bu nedenle ses cihazı sınıfına bağlı kalacağız. 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 USB protokolü üzerinden bir dijital ses sinyalini çevre birimine gönderir; burada bir dijitalden analoğa dönüştürücü (DAC) dönüştürür ve bir analog çıkış terminaline sunar. DAC, ana bilgisayar için bir havuzdur .

Kanallar

Ses işlevli bir çevre birimi, bir kaynak terminali, alıcı terminali veya her ikisini içerebilir. Her yönün bir kanalı ( mono ), iki kanalı ( stereo ) veya daha fazlası olabilir. İkiden fazla kanalı olan çevre birimlerine çok kanallı denir. Bir stereo akışını sol ve sağ kanallardan oluştuğu şeklinde yorumlamak ve buna bağlı olarak çok kanallı bir akışı her kanala karşılık gelen uzamsal konumlara sahip olarak yorumlamak yaygındır. Bununla birlikte, her kanala belirli bir standart uzamsal anlam atamamak da (özellikle USB ses için HDMI'dan daha fazla) 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 odadaki çeşitli mikrofonlara bağlı ilk üç kanala ve AM radyodan giriş alan son kanala sahip olabilir.

Eşzamanlı aktarım modu

USB ses, hata düzeltme 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 veri aktarım hataları, bir döngüsel artıklık denetimi (CRC) kullanılarak saptanır. Ancak hata durumunda paket onayı veya yeniden iletim yoktur.

Eşzamanlı iletimler 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 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
  • eşzamansız
  • Senkron

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

Eşzamansız (örtük geri bildirim olarak da adlandırılır) alt modunda, alıcı veya kaynak, örnekleme hızını belirler ve ana bilgisayar uyum sağlar. Eşzamansız alt modun birincil teorik avantajı, kaynak veya alıcı USB saatinin, DAC veya ADC'yi çalıştıran saate fiziksel ve elektriksel olarak daha yakın olmasıdır (ve gerçekten de aynı olabilir veya ondan türetilebilir). Bu yakınlık, eşzamansız alt modun saat titremesine 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 kipte, her SOF periyodunda sabit sayıda bayt aktarılır. Ses örnekleme hızı, USB saatinden etkili bir şekilde türetilir. Hem ana bilgisayar hem de çevre birimi USB saatinin insafına kaldığından, senkron alt mod sesle yaygın olarak kullanılmaz.

Aşağıdaki tablo eşzamanlı alt kipleri ö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
eşzamansız değişken Çevresel evet
senkron sabit USB saat hayır

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

Geliştirme modunda USB sesi desteklenmez.

Ana bilgisayar modu

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

  • Android cihazı ana bilgisayar olarak hareket etmelidir
  • Ses formatı PCM (arayüz tipi I) olmalıdır
  • Bit derinliği 16 bit, 24 bit veya 32 bit olmalıdır; burada 24 bit yararlı ses verisi, 32 bit sözcüğün 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 değerin ö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 seviye 16), ana bilgisayara ses oynatma için sınırlı destek ekledi. Aksesuar modundayken, Android ses çıkışını otomatik olarak USB'ye yönlendirir. Diğer bir deyişle, Android cihazı ana bilgisayar için bir veri kaynağı, örneğin bir yuva görevi görür.

Aksesuar modu sesi şu özelliklere sahiptir:

  • Android cihazı, önce 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ünmez.
  • Yön girilmelidir ve ana bilgisayara göre ifade edilmelidir
  • 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ışı ile temsil edilir. Sonunda, herhangi bir dijital sinyalin duyulabilmesi için önce analoğa dönüştürülmesi gerekir. Bu dönüşümün nereye yerleştirileceğini seçmede ödünler var.

İki DAC'ın 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 bağlı USB'li ve kulaklıklı bir amplifikatöre sahip bir mobil cihazı da ele alı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 muhtemelen her iki seçeneğe de sahip olacaktır.

İlk A tasarımı daha basit, daha ucuz, daha az güç kullanıyor ve aksi takdirde eşit derecede güvenilir bileşenler varsayıldığında daha güvenilir bir tasarım olacaktır. Ancak, genellikle ses kalitesi ile diğer gereksinimler arasında ödünleşimler 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ındaki 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 onu isteyenler

Mobil cihazlar, bitişik analog sinyalleri bozan karışma için daha fazla fırsatla sonuçlanabilecek yüksek yoğunluklu devre kartlarına sahip olmakla ünlüdür. Dijital iletişim parazite karşı daha az hassastır, bu nedenle DAC'yi Android cihaz A'dan harici bir devre kartına C 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 eklenen karmaşıklıkla birlikte işlerin başarısız olması için daha fazla fırsat ortaya çıkar. Ayrıca USB denetleyicilerinde ek gecikme vardır.

Ana bilgisayar modu uygulamaları

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

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

Android, tüm bu uygulamalar için uyumlu bir USB dijital ses çevre birimi algılar ve ses ilkesi kurallarına göre otomatik olarak ses oynatmayı ve yakalamayı uygun şekilde 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 uyumlu uygulamalarla karışabilir. 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ıklaması kullanılamaz. Bir alternatif için Android Debug Bridge'in kablosuz kullanımı bölümüne bakın.

USB sesi 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; Android şu anda 1. sınıfı hedefliyor, ancak 2. sınıf için plan 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 verebilmesi 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 tasarım donanımı
  • 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ı
  • son çekirdek sürümleri ve yamaları ile güncel kalın; asil sınıf uyumluluğu hedefine rağmen, tuhaflıkları olan mevcut ses çevre birimleri var ve yeni çekirdeklerde bu tür tuhaflıklar için geçici çözümler var
  • aşağıda açıklandığı gibi USB ses politikasını etkinleştirin
  • device.mk içindeki PRODUCT_PACKAGES'e audio.usb.default'u ekleyin
  • ortak USB ses çevre birimleriyle birlikte çalışabilirlik testi

USB ses ilkesi 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

"Oem" yol adı bileşeni, Android cihazı üreten OEM'in adıyla ve "kod adı", cihaz 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'ı, Ses terminolojisi'nde açıklanan, büyük ölçüde 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 bölümü ile ilgilenmesine gerek kalmaz.

USB sesini test etme

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