Pregunta

Hace unos días, esta era mi pregunta, y encontré la respuesta. Quizás esto ayude a alguien más.

A. La primera parte del problema: ¿puedes amplificar el sonido usando Flash? La documentación de AS3 para SoundTransform dice esto sobre el atributo de volumen:

" El volumen, que va de 0 (silencioso) a 1 (volumen completo).

A su valor nominal, esto significa que solo puede hacer que los sonidos sean más silenciosos. De hecho, si proporciona un valor mayor que uno (1.0), los sonidos se amplificarán. Corre el riesgo de saturar el sonido y obtener una calidad deficiente, pero puede hacerlo, y para la voz, puede salirse con la suya. (La música es menos indulgente, así que experimente. Este método no hace compresión dinámica, que es más adecuada para la música).

B. La segunda parte del problema: el orden en que haces las cosas.

DERECHA:

soundTransform = new SoundTransform();
soundTransform.volume = volume * volumeAdjustment;
audioChannel.soundTransform = soundTransform;

INCORRECTO:

soundTransform = new SoundTransform();
audioChannel.soundTransform = soundTransform;
soundTransform.volume = volume * volumeAdjustment;

Hice algunas pruebas en CS3 y CS4, y obtuve resultados diferentes. En CS3, podría establecer el volumen en la transformación DESPUÉS de " audioChannel.soundTransform = soundTransform; " y todo estuvo bien. Pero en CS4 no tuvo ningún efecto. Sospecho que CS3 usó pasar por referencia para establecer el soundTransform, mientras que CS4 usa la semántica de pasar por valor y copia el objeto que se le pasa. El enfoque CS4 está mejor diseñado, pero rompió mi código que funcionó bien en CS3.

C. La última pregunta es cómo convertir un valor de decibelios en un factor que puede multiplicarse por el volumen para amplificar (o silenciar) el sonido en la cantidad deseada.

var multiplier:Number = Math.pow(10, decibels / 20); // Power vs. amplitude

Tenga en cuenta que " decibelios " puede ser un número positivo (para amplificar) o un número negativo (para hacer más silencioso). Si los decibelios son cero, no se produce ningún cambio.

Un valor para decibelios de 3 duplicará (en una aproximación cercana) la amplitud. Un valor de 10 decibelios aumentará el volumen diez veces (exactamente).

¿Fue útil?

Solución

Su cálculo de decibelios debería usar 20, no 10:

var multiplier:Number = Math.pow(10, decibels / 20);

El audio digital es amplitud, no potencia (es una representación de la presión del sonido, no poder de sonido).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top