Untuk mencapai visualisasi audio dan mendapatkan beberapa efek keren, Anda perlu menggunakan beberapa metode AudioContext yang disediakan oleh Web Audio API:
Antarmuka AudioContext
mewakili grafik pemrosesan audio yang dibuat dari modul audio yang dihubungkan bersama, setiap modul diwakili oleh AudioNode
. Konteks audio mengontrol pembuatan node yang dikandungnya dan pelaksanaan pemrosesan atau penguraian audio. Sebelum melakukan hal lain, Anda perlu membuat objek AudioContext
karena semuanya terjadi dalam konteks. Disarankan untuk membuat objek AudioContext
dan menggunakannya kembali, daripada menginisialisasi objek AudioContext baru setiap kali, dan menggunakan satu objek AudioContext
untuk beberapa sumber audio dan pipa yang berbeda secara bersamaan.
<audio class="audio" ref='audio' :src='tune' @ended='ended'></audio> <kanvas ref='kanvas' lebar='300px' tinggi='300px'></kanvas>
const ctx = AudioContext baru();
Metode createMediaElementSource()
antarmuka AudioContext
digunakan untuk membuat objek MediaElementAudioSourceNode
baru, memasukkan elemen HTML<audio>atau<video>` yang ada, dan audio yang sesuai dapat diputar atau dimodifikasi.
const audioSrc = ctx.createMediaElementSource(ini.audioElement);
Metode createAnalyser()
AudioContext
dapat membuat AnalyserNode
, yang dapat digunakan untuk memperoleh data waktu dan frekuensi audio serta mengimplementasikan visualisasi data.
const analisa = ctx.createAnalyser();
Nilai atribut fftSize antarmuka AnalyserNode
adalah nilai bilangan bulat panjang yang tidak ditandatangani, yang mewakili ukuran jendela sampel (sinyal). Sampel (sinyal) ini digunakan untuk memperoleh data domain frekuensi saat melakukan Fast Fourier Transform (FFT). Nilai atribut fftSize
harus berupa pangkat 2 bukan nol dalam rentang 32 hingga 32768; nilai defaultnya adalah 2048.
penganalisis.fftSize = 512;
Metode connect()
dari antarmuka AudioNode
memungkinkan Anda untuk menghubungkan output dari sebuah node ke target yang ditentukan. Target yang ditentukan ini dapat berupa AudioNode lain (sehingga mengarahkan data audio ke node yang ditentukan berikutnya) atau AudioParam sehingga node sebelumnya Data keluaran dapat secara otomatis mengubah nilai parameter berikutnya seiring berjalannya waktu.
audioSrc.connect(penganalisa);
Properti destination
AudioContext
mengembalikan AudioDestinationNode
yang mewakili node tujuan akhir dari semua audio (node) dalam context
, yang umumnya merupakan perangkat rendering audio, seperti speaker.
penganalisis.connect(ctx.destinasi)
Tipe array Uint8Array
mewakili array integer 8-bit yang tidak ditandatangani, dan kontennya diinisialisasi ke 0 saat dibuat. Setelah pembuatan, elemen dalam array dapat direferensikan sebagai objek atau menggunakan pengindeksan subskrip array.
getByteFrequencyData() 方
pada antarmuka AnalyserNode
menyalin data frekuensi saat ini ke Uint8Array
yang masuk (array byte yang tidak ditandatangani).
Jika panjang array kurang dari AnalyserNode.frequencyBinCount
, maka elemen tambahan dari Analyser
akan dihapus. Jika lebih besar, maka elemen tambahan dari array akan diabaikan.
visualisasi() { const arr = Uint8Array baru(ini.analyser.frekuensiBinCount); this.analyser.getByteFrequencyData(arr); ini.draw(arr); },
Metode HTMLCanvasElement.getContext()
mengembalikan konteks canvas
, atau null jika konteksnya tidak ditentukan. Membuat konteks rendering dua dimensi CanvasRenderingContext2D.
this.canvas = this.$refs.canvas.getContext('2d');draw(arr) { canvas.clearRect(0, 0, document.body.clientWidth, this.canvasHeight); .clientWidth / 2) - ((arr.length / 2) * 3)); arr.forEach((item, indeks) => { this.canvas.beginPath(); this.canvas.strokeStyle = '#B2AFF4'; this.canvas.lineWidth = 3; this.canvas.moveTo(mulai + (indeks * 4), this.canvasHeight); lineTo(mulai + (indeks * 4), this.canvasHeight - item / 2); this.canvas.stroke();
Tampilan efek:
Demikianlah artikel tentang AudioContext
untuk visualisasi audio (berbagi teknologi web) ini. Untuk informasi lebih lanjut tentang AudioContext untuk visualisasi audio, silakan cari artikel sebelumnya di downcodes.com atau lanjutkan menelusuri artikel terkait di bawah ini .Dukung downcodes.com!