m36'da Web Audio değişiklikleri

Cem Yılmaz
Chris Wilson

Web Sesi değişiklikleri

Google'da standartları çok seviyoruz. Standartlara uygun bir web platformu oluşturmayı misyon edindik. Bir süredir bu hatalardan biri, Web Audio API'sinin (özellikle webkitAudioContext nesnesi) webkit- önekli uygulaması ve desteklemeye devam ettiğimiz Web Audio'nun desteği sonlandırılmış bitlerinden bazılarıdır.

Ön eki olmayan AudioBağlam nesnesini desteklemeye başladığımız için başlangıçta Chrome 36'nın, önek eklenmiş webkitAudioContext'e ilişkin desteği kaldırması planlanmıştı. Bunun beklenenden daha zor olduğu ortaya çıktı. Bu nedenle Chrome 36, hem öneksiz hem de önek içeren yöntemleri destekliyor. Ancak, yeniden kullanıma sunulan webkitAudioContext'te bile, createGainNode ve createJavaScriptNode gibi bazı eski yöntemler ve özellikler kaldırıldı. Kısacası, Chrome 36'da webkitAudioContext ve AudioContext birbirlerinin takma adlarıdır; işlevler arasında herhangi bir fark yoktur.

Chrome 36'dan sonra, muhtemelen birkaç sürümde bu ön ek desteğini tamamen kaldıracağız. Yakında değişiklik yapılacağı zaman burada bir duyuru yapacağız ve Web Audio uygulamalarını düzeltmeleri için yazarlarla iletişim kurmaya devam ediyoruz.

Önceki uygulama yöntemine geri dönmek yerine neden bu işlemi gerçekleştirdik? Kısmen geriye gitme konusunda çekingen davrandık. Bu API'leri zaten kaldırdık. Bu takma ad belirlemenin güzel bir yan etkisi olarak uygulamalar, geçen sonbaharda Web Audio desteğinde ön ekli AudioBağlam nesnesini hiçbir zaman desteklememiş (ve doğru da!) Firefox'ta sorunsuz bir şekilde çalışabiliyor.

Bu güncellemenin geri kalanında, bu değişiklik nedeniyle kodunuzda bozulabilecek noktaları düzeltmeye yönelik bir kılavuz bulunmaktadır. Bu sorunları çözmenin en iyi yanı, kodunuzun büyük olasılıkla Firefox'ta da çalışacak olmasıdır! (Uzun süredir Vocoder uygulamamın Firefox uygulaması nedeniyle bozulduğunu düşünmüştüm ancak yine de bu sorunlardan birinin olduğu ortaya çıktı.)

Yalnızca çalışır duruma gelmek istiyorsanız eski Web Audio koduna yazılan uygulamalar için yazdığım bir maymun-patch kitaplığına göz atmak isteyebilirsiniz. Bu, nesnelere ve yöntemlere takma adlar olarak uygun adlar verdiğinden, en kısa sürede çalışmaya başlamanıza yardımcı olabilir. Kitaplıkta bulunan yamalar gerçekten de değişiklikler için iyi bir kılavuzdur.

Her şeyden önce

Bunun yerine, tüm window.webkitAudioContext referansları window.AudioContext yapılmalıdır. Bu sorun çoğu zaman basit bir şu şekilde düzeltilir:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

Uygulamanız "Maalesef tarayıcınız Web Sesi'ni desteklemiyor. Lütfen Chrome veya Safari kullanın." - Büyük olasılıkla açık bir şekilde webkitAudioContext aranıyor. Kötü geliştirici! Firefox'u aylardır destekliyor olabilirsiniz!

Ancak, bazıları daha az bariz olabilecek, daha incelikli birkaç kod kaldırma işlemi daha vardır.

  • .type özelliğinin (artık dize olan) BiquadFilter numaralandırılmış tür sabitleri artık BiquadFilterNode nesnesinde görünmez ve .type özelliğinde desteklenmemektedir. Dolayısıyla artık .LOWPASS (veya 0) değerini kullanmıyorsunuz, bunu "alt geçiş" olarak ayarlıyorsunuz.
  • Ayrıca, Oscillator.type özelliği de benzer şekilde artık bir dize numaralandırma türüne sahip (artık .SAWTOOTH değil).
  • PannerNode.type artık dize numaralandırmalı bir türdür.
  • PannerNode.distanceModel artık dize numaralandırmalı bir türdür.
  • createGainNode, createGain olarak yeniden adlandırıldı
  • createDelayNode, createDelay olarak yeniden adlandırıldı
  • createJavaScriptNode, createScriptProcessor olarak yeniden adlandırıldı
  • AudioBufferSourceNode.noteOn() artık start() ile değiştiriliyor
  • AudioBufferSourceNode.noteGrainOn() de artık start() ile değiştiriliyor
  • AudioBufferSourceNode.noteOff(), stop() olarak yeniden adlandırıldı
  • OscillatorNode.noteOn(), start() olarak yeniden adlandırıldı
  • OscillatorNode.noteOff(), stop() olarak yeniden adlandırıldı
  • AudioParam.setTargetValueAtTime(), setTargetAtTime() olarak yeniden adlandırıldı
  • AudioContext.createWaveTable() ve OscillatorNode.setWaveTable() artık createPeriodicWave() andsetPeriodicWave()` olarak yeniden adlandırıldı.
  • .loop adına AudioBufferSourceNode.looping kaldırıldı
  • Kodlanmış ses verileri blob'unun eşzamanlı olarak kodunu çözmek için AudioContext.createBuffer(ArrayBuffer, boolean) kaldırıldı. Tamamlanması uzun süren eşzamanlı çağrılar kötü kodlama uygulamasıdır. Bunun yerine eşzamansız decodeAudioData çağrısını kullanın. Bu, en zor değişikliklerden biri. Mantık akışını gerçekten değiştirmelisiniz. Ancak bunu yapmanız çok daha iyi bir uygulamadır. Mozilla'dan Ehsan Angkari, standart Web Sesi'ne dönüştürme hakkındaki yayınında bunun nasıl yapılacağına ilişkin güzel bir örnek yazdı.

Bunların birçoğu (createGainNode'un yeniden adlandırılması ve createBuffer'da eşzamanlı kod çözmenin kaldırılması gibi) açıkça geliştirici araçları konsolunda hata olarak görünecektir, ancak aşağıdakiler de aşağıdaki kullanımlar gibi bazılarına benzer:

MULTI_LINE_CODE_PLACEHOLDER_1

hiç görünmez ve sessizce başarısız olur (myFilterNode.BANDPASS artık tanımsız olarak çözümlenir ve .type'ı undefined olarak ayarlamak herhangi bir sonuç vermez. Bu arada, Vocoder'un başarısız olmasının nedeni de buydu.) Benzer şekilde, filter.type öğesi işe yarayan bir sayıya da atanır:

myFilterNode.type = 2;

Ancak şimdi dize numaralandırmasını kullanmanız gerekir:

myFilterNode.type = “bandpass”;

Dolayısıyla, kodunuzu aşağıdaki terimler için kullanabilirsiniz:

  • webkitAudioContext
  • .LOWPASS
  • .HIGHPASS
  • .BANDPASS
  • .LOWSHELF
  • .HIGHSHELF
  • .PEAKING
  • .NOTCH
  • .ALLPASS
  • .SINE
  • .SQUARE
  • .SAWTOOTH
  • .TRIANGLE
  • .noteOn
  • .noteGrainOn
  • .noteOff
  • .setWaveTable
  • .createWaveTable
  • .looping
  • .EQUALPOWER
  • .HRTF
  • .LINEAR
  • .INVERSE
  • .EXPONENTIAL
  • createGainNode
  • createDelayNode
  • .type (Evet, çok sayıda yanlış pozitif sonuç verecektir. Ancak yukarıdaki son örneği yakalamanın tek yolu budur!)

Bir kez daha, acele etmenizin yanı sıra çalışmaya devam etmek istiyorsanız my monkeypatch webkitAudioContext kitaplığım'ın bir kopyasını alıp uygulamanıza eklemeniz yeterli. Ses Bilgisayar Korsanlığı Keyfi!