Perubahan Web Audio
Di Google, kami menyukai standar. Kami memiliki misi untuk membangun platform Web yang ditentukan standar. Salah satu masalah kecil yang selama beberapa waktu ini terjadi adalah implementasi Web Audio API dengan awalan webkit (terutama objek webkitAudioContext), dan beberapa bagian Web Audio yang tidak digunakan lagi yang terus kami dukung.
Awalnya, Chrome 36 akan menghapus dukungan untuk webkitAudioContext yang diawali dengan awalan, karena kami telah mulai mendukung objek AudioContext tanpa awalan. Hal ini ternyata lebih merepotkan dari yang diperkirakan, sehingga Chrome 36 mendukung tanpa awalan dan dengan awalan - namun, bahkan di webkitAudioContext yang diperkenalkan kembali, beberapa metode dan atribut lama seperti createGainNode dan createJavaScriptNode telah dihapus. Singkatnya, di Chrome 36, webkitAudioContext dan AudioContext adalah alias satu sama lain; tidak ada perbedaan fungsi antara keduanya.
Kami akan menghapus dukungan untuk awalan ini sepenuhnya setelah Chrome 36, kemungkinan dalam beberapa rilis. Kami akan membuat pengumuman di sini jika perubahan akan segera dilakukan, dan kami terus menghubungi penulis untuk memperbaiki aplikasi Audio Web mereka.
Mengapa kita melakukan hal ini, bukan kembali ke implementasi sebelumnya? Yah, sebagian, kami enggan untuk mundur terlalu jauh; kami telah menghapus API tersebut, dan sebagai efek samping yang bagus untuk alias ini, aplikasi kemudian dapat berfungsi dengan baik di Firefox, yang belum pernah mendukung objek AudioContext dengan awalan (dan juga benar!) dalam dukungan Audio Web mereka yang awalnya dirilis musim gugur lalu.
Bagian lainnya dari update ini memberikan panduan untuk memperbaiki hal-hal yang mungkin rusak dalam kode Anda karena perubahan ini. Keuntungan dari memperbaiki masalah ini adalah kode Anda kemungkinan besar juga akan berfungsi di Firefox. (Saya sudah lama mengira bahwa aplikasi Vocoder saya rusak karena penerapan Firefox, tetapi ternyata salah satu masalah ini yang menyebabkannya!)
Jika Anda hanya ingin menyiapkan dan menjalankannya, sebaiknya lihat library monkey-patch yang saya tulis untuk aplikasi yang ditulis ke kode Web Audio lama - ini dapat membantu Anda menyiapkan dan menjalankannya dalam waktu minimum, karena akan membuat alias objek dan metode dengan tepat. Memang, patch yang tercantum dalam library adalah panduan yang baik untuk hal-hal yang telah berubah.
Pertama dan terpenting
Setiap referensi ke window.webkitAudioContext
harus dibuat ke window.AudioContext
. Sering kali, masalah ini telah diperbaiki dengan:
window.AudioContext = window.AudioContext || window.webkitAudioContext;
Jika aplikasi Anda merespons dengan sesuatu seperti “Sayangnya, browser Anda tidak mendukung Audio Web. Gunakan Chrome atau Safari.” - kemungkinan besar secara eksplisit mencari webkitAudioContext
. Developer yang buruk! Anda mungkin telah mendukung Firefox selama berbulan-bulan.
Namun, ada beberapa penghapusan kode lain yang lebih halus, beberapa di antaranya mungkin kurang jelas.
- Konstanta jenis yang dihitung BiquadFilter untuk atribut
.type
(yang sekarang berupa string) tidak lagi muncul di objekBiquadFilterNode
, dan kami tidak mendukungnya di atribut.type
. Jadi, Anda tidak lagi menggunakan.LOWPASS
(atau 0) - Anda menyetelnya ke “lowpass”. - Selain itu, atribut
Oscillator.type
kini juga merupakan jenis string yang dienumerasi - tidak ada lagi.SAWTOOTH
. PannerNode.type
kini juga merupakan jenis enumerasi string.PannerNode.distanceModel
kini juga merupakan jenis enumerasi string.createGainNode
diganti namanya menjadicreateGain
createDelayNode
diganti namanya menjadicreateDelay
createJavaScriptNode
diganti namanya menjadicreateScriptProcessor
AudioBufferSourceNode.noteOn()
kini diganti denganstart()
AudioBufferSourceNode.noteGrainOn()
kini juga diganti denganstart()
AudioBufferSourceNode.noteOff()
diganti nama menjadistop()
OscillatorNode.noteOn()
diganti nama menjadistart()
OscillatorNode.noteOff()
diganti nama menjadistop()
AudioParam.setTargetValueAtTime()
diganti nama menjadisetTargetAtTime()
AudioContext.createWaveTable()
danOscillatorNode.setWaveTable()
kini diganti namanya menjadicreatePeriodicWave() and
setPeriodicWave()`.AudioBufferSourceNode.looping
dihapus, diganti dengan.loop
AudioContext.createBuffer(ArrayBuffer, boolean)
untuk mendekode blob data audio yang dienkode secara sinkron telah dihapus. Panggilan sinkron yang memerlukan waktu lama untuk diselesaikan adalah praktik coding yang buruk; gunakan panggilan decodeAudioData asinkron. Ini adalah salah satu perubahan yang lebih menantang - Anda harus benar-benar mengubah alur logika - tetapi merupakan praktik yang jauh lebih baik. Ehsan Angkari dari Mozilla menulis contoh yang bagus tentang cara melakukannya dalam postingannya tentang mengonversi ke Audio Web standar.
Banyak dari perubahan ini (seperti penggantian nama createGainNode, dan penghapusan decoding sinkron di createBuffer) akan muncul di konsol alat developer sebagai error - namun, beberapa lainnya, seperti penggunaan ini:
MULTI_LINE_CODE_PLACEHOLDER_1
tidak akan muncul sama sekali, dan gagal secara diam-diam (myFilterNode.BANDPASS kini akan di-resolve ke undefined, dan upaya untuk menetapkan .type ke undefined hanya akan gagal menghasilkan efek apa pun. Omong-omong, inilah yang menyebabkan vocoder gagal.) Demikian pula, cukup tetapkan filter.type ke angka yang digunakan untuk berfungsi:
myFilterNode.type = 2;
Namun, sekarang Anda perlu menggunakan enumerasi string:
myFilterNode.type = “bandpass”;
Jadi, Anda dapat grep kode untuk istilah berikut:
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
(ya, ini akan menghasilkan banyak positif palsu - tetapi ini adalah satu-satunya cara untuk menangkap contoh terakhir di atas!)
Sekali lagi, jika Anda terburu-buru dan ingin segera memulai, cukup ambil salinan library webkitAudioContext monkeypatch saya dan sertakan dalam aplikasi Anda. Selamat Mencoba Hacking Audio!