Página 1 de 1

Sounddd

Publicado: 28 Nov 2010, 21:48
por gna08
HOla tengo la isguiente situacion.. y keria ver si alguno se le ocurre alguna ideaa
Abro con _soundopen() X archivo..

Mas tarde lo llamo a reproducir. con _soundplay.. digamos k tarda 10 seg y yo antes de k akabe.. digamos por los 4 segundos deseo volver a reproducirlo SIN que se apague o pausee o deje de escucharse el primeroo.. y asii. tantas veces lo fuera necesario...
Pense.. hacer...
If _SoundStatus($sonido) Playing Then
_soundplay($sonido2) ..
Else
_soundplay($sonido1)
endfi

pero en no iria abrir miles de copias :O

alguna idea?? :smt017

Salu2 :smt006

Re: Sounddd

Publicado: 29 Nov 2010, 02:01
por Chefito
Para hacer eso tienes que sacar primero la duración del archivo de sonido con _SoundLength.

Una vez que sabes esto, compara en un bucle o un AdlibRegister, etc cada poco tiempo la posición actual del sonido que se está reproduciendo (_SoundPos) con la duración total del sonido que has sacado al principio menos 4 segundos. Cuando se cumpla esta condición (que la posición de la canción que se está reproduciendo es mayor o igual que la duración total de la canción menos 4 sg.), le dices que reproduzca el segundo archivo de sonido y ya está :smt002 .

Si quieres que esto se haga continuamente entre dos archivos de sonido, pues antes de cualquier cosa cargas los dos archivos con _soundopen.
Dentro de la última condición que te dije antes, la que se cumple cuando faltan 4 segundos, pones otra condición comparando el estado con _SoundStatus de las dos canciones (puedes comparar o que está parada (stopped) o que se está reproduciendo (playing)....a elegir). Sabiendo cual está parada.....ya sabes que esa es la siguiente que debes reproducir :smt002 . Lo mismo si lo haces con la que se está reproduciendo. También puedes hacerlo comparando la posición de la canción. Si una está en la posición 0, pues ya sabes que esta es la que se tiene que reproducir.

Saludos.

Re: Sounddd

Publicado: 29 Nov 2010, 05:18
por gna08
Chefito escribió:Si quieres que esto se haga continuamente entre dos archivos de sonido, pues antes de cualquier cosa cargas los dos archivos con _soundopen.
Dentro de la última condición que te dije antes, la que se cumple cuando faltan 4 segundos, pones otra condición comparando el estado con _SoundStatus de las dos canciones (puedes comparar o que está parada (stopped) o que se está reproduciendo (playing)....a elegir). Sabiendo cual está parada.....ya sabes que esa es la siguiente que debes reproducir :smt002 . Lo mismo si lo haces con la que se está reproduciendo. También puedes hacerlo comparando la posición de la canción. Si una está en la posición 0, pues ya sabes que esta es la que se tiene que reproducir.
Saludos.
Claroo. es lo k hice.. el tema es k tengo un solo sonido... pero yo no kiero k se pare.. kiero k el mismo se escuche y a los 4 seg otra ves sin k el primero s e pare.. PERO siempre y cuando sea el mismo...
osea.. tenia algo con

$sonido1 = _soundopen("sonido1")
$sonido2 = _soundopen("sonido1")
$sonido3 = _soundopen("sonido1")

osea. es el mismo el sonido.. solo k habierto multiples veces.. el tema es k digamos k es impredecible la cantidad de veces k llamaria al sonido a reproducir... osea. k no puedo determinar. X cantidad de soundopen para un solo sonido..
a lo mejor pense llamarlo y k se reprodusca ilimitada mente.. pero parece k nose puede :smt013 :O

:smt022

Re: Sounddd

Publicado: 29 Nov 2010, 11:04
por Chefito
Hombre, el método que te explico al principio vale igual para un mismo sonido que para dos sonidos distintos.
No tienes que abrir el sonido muchas veces, con que solo la abras dos y luego trabajes con los IDs que te devuelve la función _soundopen te sirve.
Si no sabes lo que te estoy diciendo dimelo y te pongo un ejemplo de lo que quieres.

Saludos.

Re: Sounddd

Publicado: 29 Nov 2010, 11:13
por gna08
sii haber.. lo del tiempo es lo de menos. pork mi idea es pasar esto al teclado.. osea.. cuando presione X empieza a reproducir.. y bueno pasa un tiempo y aun no se detuvo el anterior. vuelvo a presionar X y el mismo sonido. solamente k desde el principio.. y siguen ambos escuchandose. solo k en distinta posicion.. y asi tantas veces kisiera. (no demasiadas k digamos )

Ok ponme un ejemplo xq kreo k no cazo tu idea.. :smt017

Re: Sounddd

Publicado: 30 Nov 2010, 20:14
por Chefito
Marchando un ejemplillo:

Código: Seleccionar todo

#include <sound.au3>

$sonido1=_SoundOpen(@scriptdir & "\b.mp3")	;cargamos el sonido para que nos de un identificador.
$sonido2=_SoundOpen(@scriptdir & "\b.mp3")	;cargamos el mismo sonido para que nos de un identificador distinto.
$duracion=_SoundLength($sonido1,2)-4000		;almacenamos la duración del sonido en milisg. menos 4 sg.
$sonidoActual=$sonido1[0]
_SoundPlay($sonido1)
While 1
	Sleep(10)
	If $sonidoActual=$sonido1[0] Then	;si el id del sonido es el que se está ejecutando, almacenado en $sonidoActual, entra en la condición.	
		If _SoundPos($sonido1,2)>=$duracion Then	;si la posición actual del sonido en milisegundos es mayor o igual a la duración del sonido menos 4 sg. entra aquí.
			$sonidoActual=$sonido2[0]		;asignamos el 2º id del sonido a $sonidoActual para que entre en el else.
			_SoundPlay($sonido2)
		EndIf
	Else
		If _SoundPos($sonido2,2)>=$duracion Then
			$sonidoActual=$sonido1[0]
			_SoundPlay($sonido1)
		EndIf
	EndIf
WEnd
He cambiado lo de la segunda condición y he utilizado una variable auxiliar ($sonidoActual) para saber cual se está reproduciendo actualmente.
Lo he dejado más o menos comentado.
El código reproduce una misma canción continuamente. Se van alternando 4 sg. antes de que se acabe la que se está reproduciendo actualmente. Y así de continuo.
Se pueden solapar las canciones sin problemas. También se puede hacer con dos canciones diferentes, cargandolas.

Saludos.

Re: Sounddd

Publicado: 30 Nov 2010, 22:28
por gna08
emmm. yesss funciona perfectoo.. y eslo k probe antes :O.. pero entonces para ver si me kedo claro tu idea.. habria k abrir tantas veces ccon SundOpen para obtener otros ID como sean necesario??? :smt017
pork ahi esta the problem :O ,m porque hasta kisas necesite k en lugar de 2 a la ves en algun momento vallan 3, o cuatro, y si kisas se mezclee pero eso no seria nada.. :smt009

P/D: creo k no se puede como digo. tendra un limite con tantos SounOpen k le ponga... pork en flash vi se podia :O

Saludooos

Re: Sounddd

Publicado: 01 Dic 2010, 01:07
por Chefito
gna08 escribió:habria k abrir tantas veces ccon SundOpen para obtener otros ID como sean necesario???
Sí, si quieres manejar independientemente esos ficheros de sonido tienes que abrirlos con soundopen cada uno. Pero no hay ningún problema con esto. Incluso si no sabes exactamente cuantos sonidos tienes que reproducir en tiempo de diseño, puedes hacer una función que los haga en tiempo de ejecución, asignando el valor de los soundopen a una variable tipo matriz que se vaya redimensionando según vayas necesitando abrir archivos de sonido. Eso sí, el nombre y ubicación del fichero se lo tendrías que pasar de alguna forma.
gna08 escribió:pork ahi esta the problem :O ,m porque hasta kisas necesite k en lugar de 2 a la ves en algun momento vallan 3, o cuatro, y si kisas se mezclee pero eso no seria nada..
Pues no se cual será el límite de sonidos que se pueden reproducir al mismo tiempo, pero supongo que sean muchos (hasta que pete el ordenata :smt005 ). Yo para probar, he reproducido 8 al mismo tiempo y parece que ha ido bien. Eso sí, no se entendia nada de la mezcla de canciones que había :smt005 .
gna08 escribió:P/D: creo k no se puede como digo. tendra un limite con tantos SounOpen k le ponga... pork en flash vi se podia :O
Se puede hacer casi todo, y yo creo que el caso que espones se podría hacer perfectamente. Supongo que el límite siempre lo ponga los componentes del ordenador (micro, memoria, tarjeta de sonido). Yo he probado los 8 en un p4 a 1600 mhz con 768 mb de memoria ram (sdram creo :smt001 ). Como ves bastante bastante antiguo :smt002 .
Yo creo que se podría hacer un pequeño programa editor y creador de sonido pudiendo añadir bastantes pistas :smt002 . Aunque si quieres hacer cosas más serias, recomiendo mirar alguna librería para esto, como por ejemplo directx (directsound, directmusic, directshow). Hay otras librerías y otros componentes para estas cosas. Ejemplo: Simple DirectMedia Layer (libSDL) puede que se pueda utilizar en AutoIt :smt017 . Un control con el que yo hice algo en vb6 (año 2002 o por ahí) un poco antiguo (no se si habrán sacado alguna versión más) pero que estaba chulo y creo que era gratuíto es el DMC2. Puedes mirar en la red que seguro que lo encuentras.
Y seguro que hay muchas más librería y controles para el manejo de sonido. Es cuestión de buscar y probar.

Saludos.