2013-08-19 12 views
5

Per un progetto imminente che utilizza l'API Web Audio mi piacerebbe poter amplificare il volume di alcuni audio.Amplifica audio con l'API Web Audio

Come ho letto nella documentazione, un nodo di guadagno moltiplica il segnale in ingresso per il valore di guadagno. La documentazione afferma che questo valore è nell'intervallo compreso tra 0 e 1, quindi l'amplificazione sembra non essere fattibile con un nodo di guadagno. Ma come altro potrei farlo?

+0

La [specifica API Web] (https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#GainNode) sembra consentire valori> 1, ma le implementazioni possono scegliere di ignora i valori superiori a 1. ("Il valore nominale maxValue' è 1, ma sono consentiti valori più alti.") In particolare, Chrome sembra amplificare> 1 valori. Nota a margine: il motivo per la limitazione nominale> 1 è che la maggior parte degli amplificatori [amplificatori controllati in tensione] fisici (http://electronicmusic.wikia.com/wiki/Voltage_controlled_amplifier) ​​(VCA) non utilizzano un guadagno superiore a uno. – apsillers

+0

Oh, giusto per chiarire: non ho una risposta reale alla tua domanda. Non farei affidamento sul comportamento non definito "guadagno> 1" per browser (o forse anche tra gli aggiornamenti del browser). – apsillers

risposta

3

Per essere più specifici: come ha detto Kevin, il valore "nominale" di uno rappresenta il guadagno unitario, cioè nessun cambiamento. NON è lo stesso di un intervallo. Le implementazioni DEVONO supportare i valori> 1 - in effetti, l'intero intervallo del valore. Esistono molti scenari che utilizzano valori di ridimensionamento del guadagno di grandi dimensioni per fare cose interessanti e sarebbero molto rotti se le implementazioni non lo supportassero.

In breve: utilizzare un guadagno> 1 per amplificare le cose. Se sei preoccupato per il clipping, inserisci un nodo del processore di dinamiche dopo di esso.

1

Non sono a conoscenza di un'implementazione che non aumenta il guadagno superiore a 1. Questo è quello che ho utilizzato in tutti i miei progetti e non ho riscontrato problemi.

Se siete super-interessati a questo proposito, penso che si potrebbe utilizzare un ScriptProcessorNode e fondamentalmente solo moltiplicare tutti i vostri campioni con qualsiasi valore di proporzioni che vuoi, ma le prestazioni saranno un bel po 'peggio di quanto si otterrebbe con un guadagno nodo. E, inoltre, sarebbe semplicemente ridicolo.

Il modo in cui leggo le specifiche non mi dà alcun motivo di credere che valori maggiori di 1 saranno ignorati per il parametro gainGainNode. In pratica è solo dicendo che 1 è il valore nominale. In altre parole, se vuoi che il tuo audio passi inalterato, imposta il valore su 1. Altrimenti, otterrai attenuazione o amplificazione.