Ver la versión completa : Necesito ayuda teorica con sonido digital
Puck2099
22/02/2006, 21:23
Hola,
A ver, tengo grandes lagunas conceptuales respecto al sonido digital y no encuentro ninguna web que me ayude, así que recurro a los "gurús" que se pasan por estos foros por si me pueden ayudar :)
Entiendo que el sonido, siendo una onda, se codifica como una serie de valores en un rango determinado que representan la posición en una fracción determinada de segundo (creo que se llaman samples). ¿En qué caso se usarían valores negativos y positivos y en cuales solo enteros?
Una vez con esta idea, me llegan las dudas con las operaciones:
- Para aumentar o disminuir el volumen, ¿bastaría con aplicar una multiplicación o división a cada uno de estos "samples"?
- Por otro lado, si suenan dos ondas a la vez, es suficiente con sumar aritméticamente los valores de cada sample de ambas ondas, ¿verdad? (siempre cuidando el desbordamiento, claro)
- Tenemos una onda que suena a una determinada velocidad. Si queremos que suene más deprisa (por ejemplo, cuando se va agotando el tiempo en un juego), ¿cómo se haría?, ¿bastaría con eliminar la mitad de los samples (bien saltándose por ejemplo los pares, o bien haciendo medias de dos consecutivos)?
- Para hacer un panning, es decir, "mover" el volumen de un altavoz a otro en estéreo, ¿bastaría con sumar una cantidad x al sample de un lado y restárselo al otro, ¿verdad?
Espero haberme explicado :)
Muchas gracias :brindis:
Entiendo que el sonido, siendo una onda, se codifica como una serie de valores en un rango determinado que representan la posición en una fracción determinada de segundo (creo que se llaman samples). ¿En qué caso se usarían valores negativos y positivos y en cuales solo enteros?
Depende de la máquina, en 16 bits los valores pueden ir bien de 0 a 65535 o bien de -32768 a 32767 (mirandolo desde un punto de vista un poco mas abstracto es lo mismo).
- Para aumentar o disminuir el volumen, ¿bastaría con aplicar una multiplicación o división a cada uno de estos "samples"?
Sastamente
- Por otro lado, si suenan dos ondas a la vez, es suficiente con sumar aritméticamente los valores de cada sample de ambas ondas, ¿verdad? (siempre cuidando el desbordamiento, claro)
Sastamente. Normalmente primero divides por lo necesario segun el número de canales para evitar desbordamientos, y luego sumas.
- Tenemos una onda que suena a una determinada velocidad. Si queremos que suene más deprisa (por ejemplo, cuando se va agotando el tiempo en un juego), ¿cómo se haría?, ¿bastaría con eliminar la mitad de los samples (bien saltándose por ejemplo los pares, o bien haciendo medias de dos consecutivos)?
No, eso es algo bastante complejo. Eliminando la mitad de los samples, efectivamente la onda duraria la mitad de tiempo, pero seria lo mismo que si hicieras girar un disco de vinilo al doble de velocidad, el conocido efecto "pitufo" pues en realidad lo que haces es doblar el pitch del audio. Para cambiar la velocidad sin cambiar el pitch necesitas usar algoritmos de procesado de señal relativamente mas complejos.
- Para hacer un panning, es decir, "mover" el volumen de un altavoz a otro en estéreo, ¿bastaría con sumar una cantidad x al sample de un lado y restárselo al otro, ¿verdad?
No. Sumar una cantidad fija no influye en nada. La onda, que es relativa, seguiria siendo la misma. Lo que harias es multipilar un lado y dividir el otro (antes ya has dicho tu mismo que multiplicar y dividir para cambiar volumen).
Seguramente pueda interesarte mucho esta página: http://musicdsp.org/
Entiendo que el sonido, siendo una onda, se codifica como una serie de valores en un rango determinado que representan la posición en una fracción determinada de segundo (creo que se llaman samples). ¿En qué caso se usarían valores negativos y positivos y en cuales solo enteros?
Una vez con esta idea, me llegan las dudas con las operaciones:
- Para aumentar o disminuir el volumen, ¿bastaría con aplicar una multiplicación o división a cada uno de estos "samples"?
- Por otro lado, si suenan dos ondas a la vez, es suficiente con sumar aritméticamente los valores de cada sample de ambas ondas, ¿verdad? (siempre cuidando el desbordamiento, claro)
- Tenemos una onda que suena a una determinada velocidad. Si queremos que suene más deprisa (por ejemplo, cuando se va agotando el tiempo en un juego), ¿cómo se haría?, ¿bastaría con eliminar la mitad de los samples (bien saltándose por ejemplo los pares, o bien haciendo medias de dos consecutivos)?
- Para hacer un panning, es decir, "mover" el volumen de un altavoz a otro en estéreo, ¿bastaría con sumar una cantidad x al sample de un lado y restárselo al otro, ¿verdad?
Espero haberme explicado :)
Muchas gracias :brindis:
En el caso de sonido de 16 bit, las mezclas son arrays de datos de tipo 'short'. Hay formato de sonido 'signed' y 'unsigned'. En la GP2X el formato es 'signed'. Por tanto estamos con arrays de 'signed short'. Lo cual nos viene muy bien para las operaciones que dices a continuación...
Para que no suene nada se rellena el array con ceros, y los datos positivos o negativos dan lugar a la forma de onda...
OJO TODO LO SIGUIENTE SOLO VALE PARA 'SIGNED SHORT':
1. Volumen: Para subir volumen: multiplicar por una constante, y para bajar volumen dividir por constante, teniendo cuidado con los rangos del tipo de dato 'signed short'.
2. Sumar ondas: Tal como dices, teniendo cuidado con los desbordamientos.
3. Para hacer que suene más deprisa: Sáltate los pares o impares (suponiendo sonido mono, si es estereo cada sample son dos elementos del array uno para el canal izquierdo y otro para el derecho...), no hagas medias.
4. Panning: Multiplica o divide.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.