This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
es:orx:tutorials:sound [2012/03/01 20:02 (14 years ago)] – [Detalles] zera | es:orx:tutorials:sound [2020/08/20 04:13 (5 years ago)] (current) – Old content sausage | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tutorial de Sonido ====== | ||
- | |||
- | |||
- | ===== Sumario ===== | ||
- | |||
- | Ver los anteriores [[main# | ||
- | |||
- | Este tutorial muestra como reproducir sonidos(muestras) y músicas(streams). | ||
- | Como con otras características de comportamientos anteriores, solo se requiere, la mayoría de las veces, una sola linea de código, para empezar a manejar todos los datos. | ||
- | Este tutorial también demuestra como alterar las configuraciones del sonido en tiempo real, usando el gráfico del soldado como retroalimentación visual. | ||
- | |||
- | Si tu presionas las flechas arriba & abajo, el volumen de la música cambiará acordemente. El soldado se escalará como consecuencia. | ||
- | Por presionar las flechas izquierda & derecha, el tono de la música(frecuencia) cambiará. El soldado rotara como una perilla. La tecla Control Izquierda reproducirá la música(y activará el soldado) si la música fue pausada, de otra manera pausará la música(y desactivará el soldado). | ||
- | El efecto de sonido de la tecla Espacio presionada es la misma que Enter, excepto, de que su volumen y tono son aleatoriamente definidos en fichero de configuración por defecto. | ||
- | |||
- | Esta aleatoriedad de la frecuencia controlada en la configuración permite fácilmente generar de paso o golpeo de sonido con ligeras variaciones con ninguna linea adicional de código. | ||
- | Cambiamos aleatoriamente el color del soldado para ilustrar esto. | ||
- | El efecto de sonido solo se añadirá y reproducirá con el soldado activo. | ||
- | Si tu quieres reproducir un efecto de sonido sin ningun objeto como soporte, tu lo puedes hacer de la misma manera que creamos la música en este tutorial. | ||
- | Sin embargo, reproduciendo un sonido en un objecto permitiría posicionar el sonido espacialmente(no cubierto en este tutorial). | ||
- | |||
- | Muchos efectos de sonido pueden ser reproducidos al mismo tiempo en un solo objeto. | ||
- | |||
- | El atributo KeepDataInCache de configuración del sonido permite mantener la muestra de sonido en la memoria en vez de releerlo del fichero constantemente. Esto solo funciona para datos no-stream(ej. No para música). | ||
- | Si esto fuera falso, la muestra será recargada desde fichero, a menos que no haya otro efecto de sonido del mismo tipo que esté siendo reproducido. | ||
- | |||
- | También registramos los eventos de sonidos para mostrar cuando los efectos de sonidos son reproducidos y detenidos. | ||
- | Estos eventos son solo enviados por efectos de sonido reproducidos en objetos. | ||
- | |||
- | ===== Detalles ===== | ||
- | |||
- | Como es usual, comenzaremos por cargar nuestro fichero de configuración, | ||
- | Por favor, diríjase a los [[main# | ||
- | |||
- | Creamos entonces una música y la reproducimos. | ||
- | |||
- | <code c> | ||
- | pstMusic = orxSound_CreateFromConfig(" | ||
- | |||
- | orxSound_Play(pstMusic);</ | ||
- | |||
- | Como podemos ver, música y sonido son de tipo '' | ||
- | |||
- | El último paso de nuestra función '' | ||
- | |||
- | <code c> | ||
- | |||
- | Solo registramos cuando los sonidos son iniciados/ | ||
- | |||
- | <code c> | ||
- | |||
- | pstPayload = (orxSOUND_EVENT_PAYLOAD *)_pstEvent-> | ||
- | |||
- | switch(_pstEvent-> | ||
- | { | ||
- | case orxSOUND_EVENT_START: | ||
- | orxLOG(" | ||
- | break; | ||
- | |||
- | case orxSOUND_EVENT_STOP: | ||
- | orxLOG(" | ||
- | break; | ||
- | } | ||
- | |||
- | return orxSTATUS_SUCCESS;</ | ||
- | |||
- | Nada realmente nuevo como puedes ver. | ||
- | |||
- | Veamos como añadimos sonidos a nuestro soldado. | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxObject_AddSound(pstSoldier, | ||
- | orxObject_SetColor(pstSoldier, | ||
- | } | ||
- | |||
- | if(orxInput_IsActive(" | ||
- | { | ||
- | orxObject_AddSound(pstSoldier, | ||
- | orxObject_SetColor(pstSoldier, | ||
- | }</ | ||
- | |||
- | Como podemos ver, añadir un sonido a un objeto solo requiere una única linea de código y, más importante, se hace de la misma manera para nuestro sonido aleatorio y nuestra única frecuencia fija. Como veremos después, la diferencia esta solamente expresada en el fichero de configuración.\\ | ||
- | Cuando añadimos sonido '' | ||
- | |||
- | //PD: Un sonido será reproducido en el soldado siempre y cuando la correspondiente entrada sea activada.\\ | ||
- | Hasta ahora solo importaba si una entrada estaba activa o no, aquí queremos hacer algún tipo de acción en el preciso momento que la entrada es activada.\\ | ||
- | Para hacer eso, usaremos la función '' | ||
- | Utilizando el resultado de esta función a lo largo de la que obtenemos de '' | ||
- | |||
- | Ahora juguemos con la activación de la música. | ||
- | |||
- | <code c> | ||
- | { | ||
- | if(orxSound_GetStatus(pstMusic) != orxSOUND_STATUS_PLAY) | ||
- | { | ||
- | orxSound_Play(pstMusic); | ||
- | orxObject_Enable(pstSoldier, | ||
- | } | ||
- | else | ||
- | { | ||
- | orxSound_Pause(pstMusic); | ||
- | orxObject_Enable(pstSoldier, | ||
- | } | ||
- | }</ | ||
- | |||
- | Este código simple, cuando activando la entrada '' | ||
- | |||
- | Ahora, vamos a cambiar el terreno de juego. | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxSound_SetPitch(pstMusic, | ||
- | orxObject_SetRotation(pstSoldier, | ||
- | }</ | ||
- | |||
- | Nada realmente sorprendente aquí. Haremos lo mismo con valores opuestos para la entrada '' | ||
- | |||
- | Por último cambiemos el volumen. | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxSound_SetVolume(pstMusic, | ||
- | orxObject_SetScale(pstSoldier, | ||
- | }</ | ||
- | |||
- | Lo mismo, nada inusual. | ||
- | |||
- | //PD: Podemos notar que la rotación de nuestro único objeto será consistente en el tiempo ([[clock|tutorial del reloj]]).\\ | ||
- | El tono de la música y el volumen, así como la escala del objeto serán dependientes de las imagenes por segundo, lo cual es una mala idea.\\ | ||
- | Para arreglar esto solo necesitamos usar el reloj DT para ponderar los valores dados.// | ||
- | |||
- | Hemos terminado con el código. Miremos entonces hacia los datos! | ||
- | |||
- | Primero, definimos nuestra música. | ||
- | |||
- | <code ini> | ||
- | Music = ../ | ||
- | Loop = true</ | ||
- | |||
- | Bastante fácil! Si no tuviéramos que preguntarle explícitamente, | ||
- | |||
- | Miremos ahora nuestro '' | ||
- | |||
- | <code ini> | ||
- | Sound = ../ | ||
- | KeepInCache = true; | ||
- | Pitch = 1.0 | ||
- | Volume | ||
- | |||
- | Como dijimos anteriormente, | ||
- | |||
- | El tono y el volumen están explícitamente definidos a su valor por defecto que no se necesita realmente. | ||
- | |||
- | Por último, veamos nuestro '' | ||
- | |||
- | <code ini> | ||
- | Pitch = 0.1 ~ 3.0 | ||
- | Volume | ||
- | |||
- | Como podemos ver, nuestro '' | ||
- | Ademas de eso, solo preguntamos por valores aleatorios para el Tono('' | ||
- | Esto significa que el '' | ||
- | ===== Recursos ===== | ||