Diğer sesleri kullanma

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

  • Tasarım parametrelerini (durdurma bandı) hesaplamak kolaydır. dalga, geçiş bant genişliği, kesme frekansı, filtre uzunluğu).
  • Genele kıyasla durdurulan bant enerjisinin azaltılması açısından neredeyse optimum enerji.

Bkz. P.P. Vaidyanathan, Çoklu Sistemler ve Filtre Bankaları, s. Kaiser Penceresi, optimumluğu ve Prolate Spheroidal ile ilişkisi Windows'a dokunun.

Tasarım parametreleri dahili modele göre otomatik olarak hesaplanır kalite belirleme ve istenen örnekleme oranları. Referans olarak pencereli sinc filtresi oluşturulur. Müzik kullanımı için örnekleyici, 44,1 ila 48 kHz için, tersi de daha yüksek bir daha kaliteli bir sonuç elde edersiniz.

Ses yeniden örnekleyiciler, daha yüksek kalite ve hız sunar. teslim etmeye odaklanıyor. Ancak yeniden örnekleyiciler sayesinde geçiş bandı dalgası dalgası ve örtüşme harmonik gürültüsü nedeniyle yüksek Geçiş bandında frekans kaybı olduğundan bunları gereksiz yere kullanmaktan kaçının.

Örnekleme ve yeniden örnekleme için en iyi uygulamalar

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

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

Genel olarak cihaza uygun örnekleme hızını seçmek en iyisidir. genellikle 44,1 kHz veya 48 kHz'dir. Şundan yüksek bir örnek hızı kullanımı: 48 kHz genelde kalitenin düşmesine neden olur. Bunun nedeni, yeniden örnekleyicinin kullanılır.

Basit yeniden örnekleme kullanma oranlar (sabit ve interpolasyonlu polifazlar)

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

  • Sabit polifaz modu. Her polifaz için filtre katsayıları önceden hesaplanmıştır.
  • İnterpole edilmiş polifaz modu. Her polifaz için filtre katsayıları en yakın iki önceden hesaplanmış polifazdan interpolasyon elde edilir.

Yeniden örnekleyici, sabit polifaz modunda en hızlıdır. Burada giriş oranı L/M'ye göre çıkış oranı (en büyük ortak bölen alınır) M'nin 256'dan küçük olması gerekir. Örneğin, 44.100 ila 48.000 dönüşüm için L = 147, E = 160.

Sabit polifaz modunda, örnekleme hızı kilitlenir ve değişmez. İnterpolasyonlu çok fazlı modda ise, örnekleme hızı yaklaşık bir değerdir. 48 kHz'lik bir cihazda oynatırken örnekleme hızı kayma genellikle birkaç saatlik tek bir örnektir. Bu genellikle bir sorun değildir çünkü yaklaşım hatası, dahili kuvars tarafından sağlanan frekans hatasından çok daha düşüktür osilatörler, termal kayma veya ses dalgalanması (tipik olarak onlarca ppm).

Oynatma sırasında 24 kHz (1:2) ve 32 kHz (2:3) gibi basit oranlı örnekleme hızlarını seçin olsa bile, 48 kHz'lik bir cihazda oranlar ve oranlar AudioTrack üzerinden izin verilebilir.

Bunun yerine, örnekleme tekniğini kullanın. örnek hızlarını değiştirmek için aşağı örnekleme yapmaya

Örnekleme hızları anında değiştirilebilir. öğe kapsamı seviyesi dahili arabelleğe alma (genellikle birkaç yüz örnek bazında değil) gerekir. Bu, efektler için kullanılabilir.

Aşağıdaki durumlarda örnekleme hızlarını dinamik olarak değiştirmeyin: aşağı örnekleme. Ses parçası gerçekleştikten sonra örnek hızlarını değiştirirken: orijinal orana göre yaklaşık yüzde 5 ila 10 arasında bir oranda fark örnekleme sırasında bir filtre yeniden hesaplama takma ad oluşturma). Bu durum, bilgi işlem kaynaklarını tüketebilir ve sesli tıklamaya neden olabilir. gerçek zamanlı olarak değiştirilir.

Aşağı örneklemeyi en fazla 6:1 olacak şekilde sınırlayın

Aşağı örnekleme, genellikle donanım cihazı gereksinimleriyle tetiklenir. Örnek Oranı dönüştürücü, aşağı örnekleme için kullanılır. iyi bir örtüşme olması için örnekleme oranını 6:1'in üzerinde sınırlamaya çalışın. daha büyük bir alt örneklem sayısı (ör. 48.000 ila 8.000'den büyük olamaz). Filtre uzunluklar aşağı örnekleme oranına uyacak şekilde ayarlanır, ancak Aşırı örnekleme önlemek için bant genişliğini daha yüksek aşağı örnekleme oranlarında ve filtre uzunluğunu artırmak. için benzer bir rumuz belirleme sorunu yükseltmeye yardımcı olur. Ses ardışık düzeninin bazı bölümlerinin 2:1'den yüksek oranda aşağı örnekleme yapılmasını engelleyebilir.

Gecikme hakkında endişeleriniz varsa yeniden örnekleme yapmayın.

Yeniden örnekleme, parçanın FastMixer'e yerleştirilmesini engeller anlamına gelir. Gecikmenin neden olduğu ek, daha büyük bir tampon oluşturur. Ayrıca, örnekleyicinin filtre uzunluğunda dolaylı bir gecikme vardır. Ancak bu süre genelde bir milisaniye veya daha kısadır. Bu, normal Mixer yolu için ek arabelleğe alma kadar büyük değildir (genellikle 20 milisaniye).

Kayan nokta sesi kullanımı

Ses verilerini temsil eden kayan noktalı sayılar kullanmak sesi önemli ölçüde iyileştirebilir yüksek performanslı ses uygulamalarındaki çözümlerden bahsedeceğiz. Kayan nokta, aşağıdakileri sunar: avantajları:

  • Daha geniş dinamik aralık.
  • Dinamik aralıkta tutarlı doğruluk.
  • Ara hesaplamalar ve geçiciler sırasında kırpmayı önlemek 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şkili değildir.
  • Kayan nokta hesaplamalarında, bazen yuvarlama veya kararsız algoritmalara dayanıyor.
  • Kayan noktanın etkili bir şekilde kullanılması, doğru sonuçlar elde etmek için daha iyi anlamayı gerektirir ve tekrarlanabilir sonuçlar elde etmek anlamına gelir.

Daha önce, kayan nokta mevcut olmaması veya yavaş olması nedeniyle biliniyordu. Bu yerleşik işlemciler için de geçerlidir. Ancak modern cihazlardaki işlemciler mobil cihazlarda artık en az 100 üzerinden eşit performansa sahip tamsayıya benzer (veya bazı durumlarda daha hızlıdır). Modern CPU'lar şunları da destekler: SIMD (Tek talimat, birden çok veri) kullanıldığında performansı daha da artırabilir.

Kayan nokta sesi için en iyi uygulamalar

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

  • Nadir hesaplamalar için çift duyarlıklı kayan nokta kullanmak örneğin filtre katsayılarını hesaplama gibi.
  • İşlemlerin sırasına dikkat edin.
  • Ara değerler için açık değişkenleri bildirin.
  • Parantezleri serbest şekilde kullanın.
  • NaN veya sonsuzluk sonucu alırsanız aşağıdakileri keşfetmek için ikili aramayı kullanın önemli bir rol oynamıştır.

Kayan nokta sesi için ses biçimi kodlaması, AudioFormat.ENCODING_PCM_FLOAT, şuna benzer şekilde kullanılır: Belirtmek için ENCODING_PCM_16_BIT veya ENCODING_PCM_8_BIT Ses Parçası verileri biçimlerinden biridir. İlgili aşırı yükleme yöntemi AudioTrack.write() verileri sunmak için bir kayan dizi 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ı

Yeniden örnekleme

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

Kayan nokta

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

Aşağıdaki makalede, kayan noktanın üç boyutlu bilgisayar sistemi tasarımcıları üzerindeki doğrudan etkisi: