Bu makalede, USB dijital ses ve ilgili USB tabanlı protokoller için Android desteği incelenmektedir.
Kitle
Bu makalenin hedef kitlesi; Android cihaz OEM'leri, SoC tedarikçileri, USB ses çevre birimi tedarikçileri, gelişmiş ses uygulaması geliştiricileri ve Android'deki USB dijital ses iç işleyişine dair ayrıntılı bilgi edinmek isteyen diğer kişilerdir.
Nexus cihazların son kullanıcıları, Nexus Yardım Merkezi'ndeki USB ana makine modunu kullanarak ses kaydetme ve oynatma makalesini incelemelidir. Bu makale son kullanıcılara yönelik olmasa da belirli ses kalitesine önem veren tüketiciler için ilgi çekici bölümler bulunabilir.
USB'ye genel bakış
Evrensel Seri Yol (USB), USB başlıklı Wikipedia makalesinde gayrı resmi olarak açıklanmakta ve USB Implementers Forum, Inc tarafından yayınlanan standartlarla resmi olarak tanımlanmaktadır. Kolaylık sağlamak için önemli USB kavramlarını burada özetledik ancak standartlar, yetkili referanstır.
Temel kavramlar ve terminoloji
USB, veri aktarım işlemlerini başlatan tek bir ana makine olan bir araçtır. Ana makine, otobüs aracılığıyla çevre birimleriyle iletişim kurar.
Not: Cihaz ve aksesuar terimleri, harici cihaz ile aynı anlama gelir. Android cihaz veya aksesuar modu olarak adlandırılan Android'e özgü kavramla karıştırılabileceği için bu terimleri burada kullanmıyoruz.
Kritik bir ana makine rolü tanımlama işlemidir: Otobüse hangi çevre birimlerinin bağlı olduğunu algılama ve tanımlayıcılar aracılığıyla ifade edilen özelliklerini sorgulama işlemidir.
Bir çevre birimi tek bir fiziksel nesne olabilir ancak aslında birden fazla mantıksal işlevi uygulayabilir. Örneğin, bir web kamerası çevre biriminde hem kamera işlevi hem de mikrofon ses işlevi olabilir.
Her çevre birimi işlevinin, bu işlevle iletişim kuracak protokolü tanımlayan bir arayüzü vardır.
Ana makine, bir boru üzerinden bir uç noktayla (periferik işlevlerinden biri tarafından sağlanan bir veri kaynağı veya alıcı) periferik cihazla iletişim kurar.
İki tür boru vardır: mesaj ve akış. İki yönlü kontrol ve durum için bir mesaj borusu kullanılır. Tek yönlü veri aktarımı için akış borusu kullanılır.
Tüm veri aktarımları ana makine tarafından başlatılır. Bu nedenle, giriş ve çıkış terimleri ana makineye göre ifade edilir. Giriş işlemi, verileri çevre birimden ana makineye aktarırken çıkış işlemi verileri ana makineden çevre birimine aktarır.
Üç ana veri aktarma modu vardır: kesinti, toplu ve eşzamanlı. Senkronize mod, ses bağlamında daha ayrıntılı olarak ele alınacaktır.
Çevresel birimin, çevresel birimin dışında dış dünyaya bağlanan terminalleri olabilir. Bu sayede çevre birimi, USB protokolü ile "gerçek dünya" sinyalleri arasında çeviri yapar. Terminaller, işlevin mantıksal nesneleridir.
Android USB modları
Geliştirme modu
Geliştirme modu, Android'in ilk sürümünden beri mevcuttur. Android cihaz, Linux, Mac OS X veya Windows gibi bir masaüstü işletim sistemi çalıştıran ana bilgisayara USB çevre birimi olarak görünür. Görünen tek çevre birimi işlevi Android hızlı önyükleme veya Android Debug Bridge (adb)'dir. Fastboot ve adb protokolleri, USB toplu veri aktarım modu üzerine yerleştirilir.
Ana makine modu
Ana makine modu, Android 3.1'de (API düzeyi 12) kullanıma sunulmuştur.
Android cihazın ana makine olarak çalışması gerektiğinden ve çoğu Android cihazda doğrudan ana makine çalışmasına izin vermeyen bir mikro USB konnektörü bulunduğundan genellikle aşağıdaki gibi bir hareket halindeyken (OTG) adaptör gerekir:
![OTG](https://source.android.google.cn/static/docs/core/audio/images/otg.jpg?authuser=4&hl=tr)
Şekil 1. Hareket Halinde (OTG) adaptörü
Bir Android cihaz, belirli bir çevre birimini çalıştırmak için yeterli güç sağlamayabilir. Bu durum, çevre biriminin ne kadar güce ihtiyaç duyduğuna ve Android cihazın ne kadar güç sağlayabildiğine bağlıdır. Yeterli güç olsa bile Android cihazın pil şarjı önemli ölçüde kısalabilir. Bu tür durumlarda, aşağıdaki gibi bir güç destekli hub kullanın:
![Güçlendirilmiş merkez](https://source.android.google.cn/static/docs/core/audio/images/hub.jpg?authuser=4&hl=tr)
Şekil 2. Güçlendirilmiş merkez
Aksesuar modu
Aksesuar modu, Android 3.1'de (API düzeyi 12) kullanıma sunuldu ve Android 2.3.4'e geri bağlandı. Bu modda Android cihaz, ana makine görevi gören bir yuva gibi başka bir cihazın kontrolü altında USB çevre birimi olarak çalışır. Geliştirme modu ile aksesuar modu arasındaki fark, adb'nin ötesinde ek USB işlevlerinin ana makineye görünür olmasıdır. Android cihaz, geliştirme modunda başlar ve ardından yeniden pazarlık süreciyle aksesuar moduna geçer.
Android 4.1'de aksesuar modu, özellikle aşağıda açıklanan ses özelliğiyle birlikte ek özelliklerle genişletildi.
USB ses cihazı
USB sınıfları
Her çevre birimi işlevinin, ilgili işlev için standart protokolü belirten ilişkili bir cihaz sınıfı belgesi vardır. Bu sayede, sınıf uyumlu ana makineler ve çevre birimleri, birbirlerinin işleyişine dair ayrıntılı bilgi sahibi olmadan birlikte çalışabilir. Ana makine ve çevre birimi farklı tüzel kişiler tarafından sağlanıyorsa sınıfa uygunluk kritik önem taşır.
Sürücüsüz terimi, sınıf uyumlu terimiyle aynı anlama gelir. Bu terim, bu tür bir çevre biriminin standart özelliklerinin, işletim sistemine özel bir sürücünün yüklenmesi gerekmeden kullanılabileceğini belirtir. Başlıca masaüstü işletim sistemleri için "sürücü gerekmez" şeklinde reklamı yapılan bir çevre biriminin sınıfla uyumlu olduğu varsayılabilir ancak istisnalar olabilir.
USB ses sınıfı
Burada yalnızca ses işlevlerini uygulayan ve bu nedenle ses cihazı sınıfına uyan ç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ının ses sınıfıyla karıştırılabileceği birçok başka cihaz sınıfı içerir. Toplu depolama sınıfı (MSC), medyaya sektöre dayalı erişim için kullanılır. Medya Aktarım Protokolü (MTP) ise medyaya tam dosya erişimi için kullanılır. Ses dosyalarını aktarmak için hem MSC hem de MTP kullanılabilir ancak yalnızca USB ses sınıfı gerçek zamanlı akış için uygundur.
Ses terminalleri
Ses çevre biriminin terminalleri genellikle analogdur. Çevresel birimin giriş terminalinde sunulan analog sinyal, bir analog-dijital dönüştürücü (ADC) tarafından dijitale dönüştürülür ve ana makine tarafından kullanılmak üzere USB protokolü üzerinden taşınır. ADC, ana makine için bir veri kaynağıdır. Benzer şekilde, ana makine USB protokolü üzerinden dijital ses sinyali gönderir. Bu sinyal, dijital-analog dönüştürücü (DAC) tarafından dönüştürülüp analog çıkış terminaline sunulur. DAC, ana makine için bir toplayıcı işlevi görür.
Kanallar
Ses işlevine sahip bir çevre birimi, kaynak terminali, alıcı terminali veya her ikisini birden içerebilir. Her yönde bir kanal (mono), iki kanal (stereo) veya daha fazla kanal olabilir. İkiden fazla kanala sahip çevre birimlerine çok kanallı denir. Stereo akışların sol ve sağ kanallardan oluştuğu, çok kanallı akışların ise her kanala karşılık gelen uzamsal konumlara sahip olduğu yaygın olarak kabul edilir. Ancak her kanala belirli bir standart uzamsal anlam atamamak da oldukça uygundur (özellikle HDMI'den daha çok USB ses için). Bu durumda, her kanalın nasıl kullanılacağını uygulama ve kullanıcı belirler. Ö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 radyosundan giriş alabilir.
Senkronize aktarım modu
USB ses, gerçek zamanlı özellikleri için hata kurtarma pahasına senkronize aktarım modunu kullanır. Senkron modda bant genişliği garanti edilir ve veri aktarım hataları döngüsel artıklık kontrolü (CRC) kullanılarak tespit edilir. Ancak hata durumunda paket onaylaması veya yeniden iletimi yoktur.
Senkronize yayınlar her kare başlangıcı (SOF) döneminde gerçekleşir. SOF dönemi, tam hız için bir milisaniye, yüksek hız için 125 mikrosaniyedir. Her tam hız karesi en fazla 1.023 bayt faydalı yük taşır ve yüksek hızlı kare en fazla 1.024 bayt taşır. Bunları bir araya getirdiğimizde, maksimum aktarım hızını saniye başına 1.023.000 veya 8.192.000 bayt olarak hesaplıyoruz. Bu, birleştirilmiş 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.
Senkron modunda üç alt mod vardır:
- Uyarlanan
- Eşzamansız
- Eşzamanlı
Uyarlanabilir alt modda, çevre birimi alıcı veya kaynak, ana makinenin değişken örnekleme hızına uyum sağlar.
Asenkron (örtülü geri bildirim olarak da bilinir) alt modunda, örnekleme hızını alıcı veya kaynak belirler ve ana makine buna uyum sağlar. Asenkron alt modun temel 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 aslında aynı veya türetilmiş olabilir). Bu yakınlık, asenkron alt modun saat jitter'ine daha az duyarlı olması gerektiği anlamına gelir. Ayrıca DAC veya ADC tarafından kullanılan saat, ana saatten daha yüksek doğruluk ve daha düşük kayma için tasarlanabilir.
Eşzamanlı alt modda, her SOF döneminde sabit sayıda bayt aktarılır. Ses örnek hızı, USB saatinden türetilir. Hem ana makine hem de çevre birimi USB saatine bağlı olduğundan senkronize alt mod genellikle sesle birlikte kullanılmaz.
Aşağıdaki tabloda senkronize alt modlar özetlenmiştir:
Alt mod | Paket başına bayt sayısı |
Örnek hızı |
Ses için kullanılır |
---|---|---|---|
uyarlanabilir | değişken | düzenleyen : canlı yayın sahibi : sunucu | evet |
eşzamansız | değişken | çevre birimi | evet |
eşzamanlı | sabit | USB saat | no |
Uygulamada, alt modun elbette önemi vardır 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 makine modu
Android 5.0 (API düzeyi 21) ve sonraki sürümler, USB ses sınıfı 1 (UAC1) özelliklerinin bir alt kümesini destekler:
- Android cihaz ana bilgisayar görevi görmelidir
- Ses biçimi PCM (arayüz türü I) olmalıdır.
- Bit derinliği 16 bit, 24 bit veya 32 bit olmalıdır. Bu durumda, 24 bitlik yararlı ses verileri 32 bitlik kelimenin en önemli bitleri içinde soldan hizalanır.
- Örnek 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çevesinin kaynak koduna bakıldığında, bu özellikleri desteklemek için gereken minimum koddan daha fazla kod görülebilir. Ancak bu kod doğrulanmadığı için daha gelişmiş özellikler için henüz hak talebinde bulunulmamıştır.
Aksesuar modu
Android 4.1 (API düzeyi 16), ana makineye ses oynatma için sınırlı destek ekledi. Android, aksesuar modundayken ses çıkışını otomatik olarak USB'ye yönlendirir. Yani Android cihaz, ana makine (ör. yuva) için veri kaynağı görevi görür.
Aksesuar modu sesinde şu özellikler bulunur:
- Android cihaz, önce Android cihazı geliştirme modundan aksesuar moduna geçirebilecek bilgili bir ana makine tarafından kontrol edilmeli, ardından ana makine uygun uç noktadan ses verilerini aktarmalıdır. Bu nedenle, Android cihaz ana makineye "sürücüsüz" olarak görünmez.
- Yön, ana makineye göre ifade edilen giriş olmalıdır.
- Ses biçimi 16 bit PCM olmalıdır.
- Örnek hızı 44,1 kHz olmalıdır.
- Kanal sayısı 2 (stereo) olmalıdır.
Aksesuar modu sesi yaygın olarak kullanılmadığı için şu anda yeni tasarımlar için önerilmez.
USB dijital sesin uygulamaları
Adından da anlaşılacağı gibi, USB dijital ses sinyali, yaygın TRS mini kulaklık konnektörü tarafından kullanılan analog sinyal yerine dijital veri akışıyla temsil edilir. Herhangi bir dijital sinyalin duyulabilmesi için analoga dönüştürülmesi gerekir. Bu dönüşümün nereye yerleştirileceğini seçerken bazı avantajlar ve dezavantajlar vardır.
İki DAC'nin hikayesi
Aşağıdaki örnek şemada iki tasarımı karşılaştırıyoruz. Öncelikle, uygulama işlemcisi (AP), yerleşik DAC, amplifikatör ve kulaklığa bağlı analog TRS konnektörü bulunan bir mobil cihazımız var. USB'si harici USB DAC'ye ve amplifikatöre bağlı olan, kulaklık takılı mobil cihazlar da bu kapsamdadır.
![DAC karşılaştırması](https://source.android.google.cn/static/docs/core/audio/images/dac.png?authuser=4&hl=tr)
Şekil 3. İki DAC'nin karşılaştırması
Hangi tasarım daha iyi? Bu sorunun cevabı ihtiyaçlarınıza bağlıdır. Her birinin avantajları ve dezavantajları vardır.
Not: Gerçek bir Android cihazda muhtemelen her iki seçenek de mevcut olacağından bu karşılaştırma yapaydır.
İlk tasarım A daha basit, daha ucuz, daha az güç kullanır ve bileşenlerin eşit derecede güvenilir olduğu varsayıldığında daha güvenilir bir tasarım olur. Ancak genellikle diğer koşullarla ilgili ses kalitesinde bazı ödünler verilir. Örneğin, bu cihaz kitlesel pazara yönelikse ses kalitesine önem veren kullanıcılar için değil, genel tüketicinin ihtiyaçlarına uygun olacak şekilde tasarlanmış olabilir.
İ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 yüksek güç çıkışı için tasarlanabilir. Evet, daha pahalı bir tasarımdır ancak maliyeti yalnızca bunu isteyenler karşılar.
Mobil cihazlar, yüksek yoğunluklu devre kartlarına sahip oldukları için kötü bir üne sahiptir. Bu durum, bitişik analog sinyalleri bozan geçiş konuşması fırsatlarının artmasına neden olabilir. Dijital iletişim gürültüye daha az duyarlıdır. Bu nedenle, DAC'yi A Android cihazından harici bir C devre kartına taşımak, son analog aşamaların yoğun ve gürültülü devre kartından fiziksel ve elektriksel olarak izole edilmesine olanak tanır. Bu da daha yüksek kaliteli ses elde edilmesini sağlar.
Öte yandan, ikinci tasarım daha karmaşıktır ve karmaşıklığın artmasıyla birlikte hataların ortaya çıkma olasılığı da artar. USB denetleyicilerden de ek gecikme yaşanır.
Ana makine modu uygulamaları
USB ana makine modu ses uygulamalarına örnek olarak şunlar verilebilir:
- müzik dinleme
- telefon
- anlık mesajlaşma ve sesli sohbet
- kayıt
Android, bu uygulamaların tümünde uyumlu bir USB dijital ses çevre birimini algılar ve ses politikası kurallarına göre ses oynatma ve yakalamayı otomatik olarak 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ımda otomatik yönlendirme, USB'den haberdar olan uygulamaları etkileyebilir. Bu tür uygulamalarda, Ayarlar / Geliştirici Seçenekleri'nin Medya bölümündeki ilgili denetimi kullanarak otomatik yönlendirmeyi devre dışı bırakın.
Ana makine modundayken hata ayıklama
USB ana makine modundayken USB üzerinden adb hata ayıklama kullanılamaz. Alternatif olarak Android Debug Bridge'in Kablosuz kullanım bölümüne bakın.
USB ses özelliğini uygulama
Ses çevre birimi tedarikçileri için öneriler
Android cihazlarla birlikte çalışabilmek için ses çevre birimi tedarikçileri:
- Ses sınıfı uygunluğu için tasarım yapın; şu anda Android 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ışabilirlik testi
- Tüketicilerin bilinçli kararlar verebilmesi için desteklenen özellikleri, ses sınıfı uygunluğunu, güç gereksinimlerini vb. açıkça belirtme
Android cihaz OEM'leri ve SoC tedarikçileri için öneriler
USB dijital ses desteği için cihaz OEM'leri ve SoC tedarikçileri:
- USB ana makine modunu destekleyen donanım tasarlama
android.hardware.usb.host.xml
özellik işareti aracılığıyla genel USB ana makine desteğini çerçeve düzeyinde etkinleştirme- Gerekli tüm çekirdek özelliklerini etkinleştirin: USB ana makine modu, USB ses, senkronize aktarım modu
- En son çekirdek sürümlerini ve yamalarını takip edin. Sınıf uyumluluğuyla ilgili iyi niyetli bir hedef olmasına rağmen, gariplikleri olan mevcut ses çevre birimleri vardır ve en son çekirdeklerde bu tür gariplikler için geçici çözümler vardır.
- USB ses politikasını aşağıda açıklandığı şekilde etkinleştirin
- device.mk dosyasında PRODUCT_PACKAGES'e audio.usb.default ekleyin
- Yaygın USB ses çevre birimleriyle birlikte çalışabilirliği test etme
USB ses politikasını etkinleştirme
USB sesini etkinleştirmek için ses politikası yapılandırma dosyasına bir giriş ekleyin. Bu genellikle şurada bulunur:
device/oem/codename/audio_policy.conf
"oem" yol adı bileşeni, Android cihazı üreten OEM'nin adıyla, "codename" ise cihazın kod adıyla değiştirilmelidir.
Örnek girişi aşağıda görebilirsiniz:
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ını burada bulabilirsiniz:
hardware/libhardware/modules/usbaudio/
USB ses HAL'i, Ses terminolojisi bölümünde açıklanan tinyalsa'ya büyük ölçüde dayanır. USB ses, senkronize aktarımlara dayansa da bu, ALSA uygulaması tarafından soyutlanır. Bu nedenle, USB ses HAL'i ve tinyalsa'nın USB protokolünün bu kısmıyla ilgilenmesi gerekmez.
USB ses cihazını test etme
USB ses için CTS testi hakkında bilgi edinmek istiyorsanız USB Ses CTS Doğrulayıcı Testleri başlıklı makaleyi inceleyin.