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ıkBiquadFilterNode
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ıkstart()
ile değiştiriliyorAudioBufferSourceNode.noteGrainOn()
de artıkstart()
ile değiştiriliyorAudioBufferSourceNode.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()
veOscillatorNode.setWaveTable()
artıkcreatePeriodicWave() and
setPeriodicWave()` olarak yeniden adlandırıldı..loop
adınaAudioBufferSourceNode.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!