Diğer sesleri kullanma

Android 5.0 (Lollipop) sürümünden itibaren ses örnekleyiciler artık tamamen Kaiser pencereli-sinc işlevinden türetilen FIR filtrelerine dayanmaktadır. Kaiser pencereli-sinc aşağıdaki özellikleri sunar:

  • Tasarım parametreleri (stop bant dalgası, geçiş bant genişliği, kesme frekansı, filtre uzunluğu) için hesaplamak kolaydır.
  • Toplam enerjiyle karşılaştırıldığında, durdurma bant enerjisinin azaltılması için neredeyse optimum düzeydedir.

Kaiser Penceresi, optimumluğu ve Prolate Speroidal Pencereler ile ilişkisi hakkında konuşmak için P.P. Vaidyanathan, Multirate Systems and Filter Banks (Çoklu Ortamlar), s. 50.

Tasarım parametreleri, dahili kalite belirlenirken ve istenen örnekleme oranlarına göre otomatik olarak hesaplanır. Tasarım parametrelerine göre pencereli-sinc filtresi oluşturulur. Müzik kullanımında 44,1-48 kHz arası (veya tersi) için örnekleyici, rastgele frekans dönüşümünden daha yüksek kalitede üretilir.

Ses örnekleyiciler hem yüksek kalite hem de bu kaliteye ulaşma hızı sağlar. Ancak örnekleyiciler az miktarda geçiş bandı dalgası ve örtüşen harmonik gürültü sağlayabilir ve geçiş bandında bir miktar yüksek frekans kaybına neden olabilir. Bu nedenle bunları gereksiz yere kullanmaktan kaçının.

Örnekleme ve yeniden örneklemeyle ilgili en iyi uygulamalar

Bu bölümde, örnekleme oranlarıyla ilgili sorunları önlemenize yardımcı olacak bazı en iyi uygulamalar açıklanmaktadır.

Cihaza uyacak örnekleme hızını seçin

Genel olarak, cihaza uyacak örnekleme hızını seçmeniz önerilir.Bu hız genellikle 44,1 kHz veya 48 kHz'dir. Dosyayı oynatmak için bir örnekleyici kullanılması gerektiğinden, 48 kHz'den yüksek bir örnek hızı kullanmak genellikle kalitenin düşmesine neden olur.

Basit yeniden örnekleme oranlarını kullanın (sabit ve interpolasyonlu polifazlar)

Örnekleyici aşağıdaki modlardan birinde çalışır:

  • Çok fazlı mod düzeltildi. Her polifazın filtre katsayıları önceden hesaplanmıştır.
  • İnterpolasyonlu polifaz modu. Her polifazın filtre katsayıları, önceden hesaplanmış en yakın iki polifazdan elde edilen değerlerden hesaplanmalıdır.

Sabit çok faz modunda giriş hızı, L/M çıkış oranına (en büyük ortak böleni alınır) oranının (M'nin en büyük ortak böleni) 256'dan küçük olduğu durumlarda örnekleyici en hızlıdır. Örneğin, 44.100 ila 48.000 dönüşüm için L = 147, M = 160.

Sabit polifaz modunda, örnekleme hızı kilitlidir ve değişmez. İnterpolasyonlu çok fazlı modda, örnekleme hızı yaklaşıktır. 48 kHz'lik bir cihazda oynarken, örnekleme hızı kayması genellikle birkaç saatte bir örnektir. Bu durum genellikle bir soruna yol açmaz çünkü yaklaşık değer hatası; dahili kuvars osilatörleri, termal kayma veya titremenin (genellikle onlarca ppm) kaynaklı frekans hatasından çok daha azdır.

AudioTrack üzerinden diğer örnekleme hızlarına ve oranlarına izin verilse bile, 48 kHz'lik bir cihazda oynatma yaparken 24 kHz (1:2) ve 32 kHz (2:3) gibi basit oranlı örnekleme hızları seçin.

Örnek hızlarını değiştirmek için aşağı örnekleme yerine yukarı örneklemeyi kullanma

Örnekleme hızları anında değiştirilebilir. Bu tür değişikliklerin ayrıntı düzeyi, örnek bazında değil, dahili arabelleğe alma (genellikle birkaç yüz örnek) temel alınarak belirlenir. Bu, efektler için kullanılabilir.

Aşağı örnekleme yaparken örnekleme hızlarını dinamik olarak değiştirmeyin. Bir ses parçası oluşturulduktan sonra örnek hızları değiştirilirken orijinal hızdan yaklaşık yüzde 5 ila 10 oranındaki fark, aşağı örnekleme sırasında filtrenin yeniden hesaplanmasını tetikleyebilir (takmanın düzgün bir şekilde engellenmesi için). Bu durum bilgi işlem kaynaklarını tüketebilir ve filtre gerçek zamanlı olarak değiştirilirse sesli tıklamaya neden olabilir.

Aşağı örneklemeyi 6:1'i aşmayacak şekilde sınırlandırın

Aşağı örnekleme genellikle donanım cihazı gereksinimleri tarafından tetiklenir. Aşağı örnekleme için Örnek Hızı dönüştürücü kullanıldığında, iyi bir takma adın bastırılması için aşağı örnekleme oranını 6:1'i aşmayacak şekilde sınırlandırmaya çalışın (örneğin, örneklemenin aşağı örnekleminin atlanması için en fazla 48.000 ila 8.000). Filtre uzunlukları, aşağı örnekleme oranına uyacak şekilde ayarlanır, ancak filtre uzunluğunu aşırı artırmaktan kaçınmak için daha yüksek örnekleme oranlarında daha fazla geçiş bant genişliğinden ödün verirsiniz. Örnekleme için de takma adla ilgili benzer bir endişe yoktur. Ses ardışık düzeninin bazı bölümlerinin, 2:1'den daha büyük örneklemeyi engelleyebileceğini unutmayın.

Gecikme hakkında endişeleriniz varsa farklı bir şekilde örnekleme yapmayın.

Yeniden örnekleme, parçanın FastMixer yoluna yerleştirilmesini engeller. Bu da normal Mixer yolundaki ek ve daha büyük arabellek nedeniyle önemli ölçüde daha yüksek gecikme yaşandığı anlamına gelir. Ayrıca örnekleyicinin filtre uzunluğunda dolaylı bir gecikme söz konusudur. Ancak bu gecikme, genelde en fazla bir milisaniye arasındadır. Bu, normal Karıştırıcı yolundaki ek arabelleğe alma kadar büyük değildir (tipik olarak 20 milisaniye).

Kayan nokta sesi kullanımı

Ses verilerini temsil eden kayan nokta sayıların kullanılması, yüksek performanslı ses uygulamalarında ses kalitesini önemli ölçüde artırabilir. Kayan nokta, şu avantajları sunar:

  • Daha geniş dinamik aralık.
  • Dinamik aralıkta tutarlı doğruluk.
  • Ara hesaplamalar ve geçici durumlar sırasında kırpmanın önüne geçmek için daha fazla boşluk.

Kayan nokta, ses kalitesini iyileştirebilir ancak bazı dezavantajlar sunar:

  • Kayan nokta sayıları daha fazla bellek kullanır.
  • Kayan nokta işlemleri, beklenmeyen özellikler kullanır. Örneğin, ekleme ilişkisel değildir.
  • Kayan nokta hesaplamaları, yuvarlama veya sayısal açıdan kararsız algoritmalar nedeniyle bazen aritmetik hassasiyeti kaybedebilir.
  • Kayan noktanın etkili bir şekilde kullanılması, doğru ve tekrarlanabilir sonuçlar elde etmek için daha fazla anlayış gerektirir.

Önceden kayan nokta, kullanılamadığı veya yavaş olduğu için biliniyordu. Bu durum, alt uç ve yerleşik işlemciler için de geçerlidir. Ancak modern mobil cihazlardaki işlemciler artık tam sayıya benzer (veya bazı durumlarda daha hızlı) performansa sahip donanım kayan noktaya sahiptir. Modern CPU'lar, performansı daha da artırabilecek SIMD'yi (Tek talimat, birden fazla veri) de destekler.

Kayan noktalı ses için en iyi uygulamalar

Aşağıdaki en iyi uygulamalar, kayan nokta hesaplamalarıyla ilgili sorunları önlemenize yardımcı olur:

  • Filtre katsayılarının hesaplanması gibi sık olmayan hesaplamalar için çift hassasiyetli kayan nokta kullanın.
  • İşlemlerin sırasına dikkat edin.
  • Ara değerler için açık değişkenleri bildirin.
  • Parantez kullanmayın.
  • Bir NaN veya sonsuzluk sonucu alırsanız bunun nerede sunulduğunu keşfetmek için ikili aramayı kullanın.

Kayan noktalı ses için AudioFormat.ENCODING_PCM_FLOAT ses biçimi kodlaması, AudioTrack veri biçimlerini belirtmek için ENCODING_PCM_16_BIT veya ENCODING_PCM_8_BIT ile benzer şekilde kullanılır. İlgili aşırı yükleme yöntemi AudioTrack.write(), veri yayınlamak için bir kayan diziyi alır.

Kotlin

fun write(
        audioData: FloatArray,
        offsetInFloats: Int,
        sizeInFloats: Int,
        writeMode: Int
): Int

Java

public int write(float[] audioData,
        int offsetInFloats,
        int sizeInFloats,
        int writeMode)

Daha fazla bilgi için

Bu bölümde, örnekleme ve kayan noktayla ilgili bazı ek kaynaklar listelenmektedir.

Test etme

Örnek hızları

Örnekleme

Yüksek bit derinliği ve yüksek kHz uyuşmazlığı

Kayan nokta

Aşağıdaki Wikipedia sayfaları, kayan nokta sesinin anlaşılmasına yardımcı olur:

Aşağıdaki makalede, kayan noktanın bilgisayar sistemleri tasarımcıları üzerinde doğrudan etkisi olan yönleri hakkında bilgi verilmektedir: