Para obter a visualização de áudio e alguns efeitos interessantes, você precisa usar alguns métodos AudioContext fornecidos pela API de áudio da Web:
A interface AudioContext
representa um gráfico de processamento de áudio construído a partir de módulos de áudio interligados, cada módulo representado por um AudioNode
. O contexto de áudio controla a criação dos nós que contém e a execução do processamento ou decodificação de áudio. Antes de fazer qualquer outra coisa, você precisa criar um objeto AudioContext
porque tudo acontece dentro de um contexto. É recomendado criar um objeto AudioContext
e reutilizá-lo, em vez de inicializar um novo objeto AudioContext a cada vez, e usar um objeto AudioContext
para múltiplas fontes de áudio e pipes diferentes ao mesmo tempo.
<audio class="audio" ref='audio' :src='tune' @ended='ended'></audio> <canvas ref='canvas' width='300px' height='300px'></canvas>
const ctx = new AudioContext();
createMediaElementSource()
da interface AudioContext
é usado para criar um novo objeto MediaElementAudioSourceNode
, inserir um elemento HTML<audio>ou<video>` existente e o áudio correspondente pode ser reproduzido ou modificado.
const audioSrc = ctx.createMediaElementSource(this.audioElement);
createAnalyser()
de AudioContext
pode criar um AnalyserNode
, que pode ser usado para obter dados de tempo e frequência de áudio e implementar a visualização de dados.
analisador const = ctx.createAnalyser();
O valor do atributo fftSize da interface AnalyserNode
é um valor inteiro longo sem sinal, que representa o tamanho da janela da amostra (sinal). Essas amostras (de sinal) são usadas para obter dados no domínio da frequência ao realizar uma Transformada Rápida de Fourier (FFT). O valor do atributo fftSize
deve ser uma potência diferente de zero de 2 no intervalo de 32 a 32768;
analisador.fftSize = 512;
O método connect()
da interface AudioNode
permite conectar a saída de um nó a um destino especificado. Este destino especificado pode ser outro AudioNode (direcionando assim os dados de áudio para o próximo nó especificado) ou um AudioParam para que o nó anterior. Os dados de saída podem alterar automaticamente o próximo valor do parâmetro com o passar do tempo.
audioSrc.connect(analisador);
destination
de AudioContext
retorna um AudioDestinationNode
que representa o nó de destino final de todo o áudio (nós) no context
, que geralmente é um dispositivo de renderização de áudio, como um alto-falante.
analisador.connect(ctx.destination)
O tipo de matriz Uint8Array
representa uma matriz inteira não assinada de 8 bits e o conteúdo é inicializado como 0 quando criado. Após a criação, os elementos do array podem ser referenciados como objetos ou usando indexação de subscritos do array.
getByteFrequencyData() 方
da interface AnalyserNode
copia os dados de frequência atuais para o Uint8Array
de entrada (matriz de bytes não assinados).
Se o comprimento da matriz for menor que AnalyserNode.frequencyBinCount
, os elementos extras do Analyser
serão excluídos. Se for maior, os elementos extras da matriz serão ignorados.
visualização() { const arr = novo Uint8Array(this.analyser.frequencyBinCount); this.analyser.getByteFrequencyData(arr); this.draw(arr); },
HTMLCanvasElement.getContext()
retorna o contexto canvas
ou null se o contexto não estiver definido 2d cria um contexto de renderização bidimensional CanvasRenderingContext2D.
this.canvas = this.$refs.canvas.getContext('2d');draw(arr) { canvas.clearRect(0, 0, document.body.clientWidth, this.canvasHeight const start = ((document.body); .clientWidth / 2) - ((arr.length / 2) * 3)); arr.forEach((item, índice) => { this.canvas.beginPath(); this.canvas.strokeStyle = '#B2AFF4'; this.canvas.lineWidth = 3; lineTo(start + (índice * 4), this.canvasHeight - item / 2); this.canvas.stroke() });}
Exibição de efeito:
Isso conclui este artigo sobre AudioContext
para visualização de áudio (compartilhamento de tecnologia da web). Para obter mais informações sobre AudioContext para visualização de áudio, pesquise os artigos anteriores em downcodes.com ou continue navegando nos artigos relacionados abaixo. . Suporte downcodes.com!