[ Foro de C ]

pequeño reproductor de musica

27-Jul-2020 05:10
marcelo Correa (+2)
2 Respuestas

Hola amigos, estoy haciendo un pequeño reproductor de música, algo básico. La funcion que reproduce las canciones es la siguiente


//reproduce la pista seleccionada
void reproduce_pista(short *pista)
{
	system("killall play 2>/dev/null");

	switch(*pista){
		case 0: system("/usr/bin/play -q cancion1&");break;
		case 1: system("/usr/bin/play -q cancion2&");break;
		case 2: system("/usr/bin/play -q cancion3&"); break;
		case 3: system("/usr/bin/play -q cancion4&"); break;
		default: break; 
	}
}


Todo bien hasta aquí, cada vez que presiono enter y llamo a la funcion se reproduce la cancion deseada. Mi problema surge cuando una cancion termina, no puedo hacer que la reproduccion continue en forma ciclica. Alguna sugerencia? Gracias.


27-Jul-2020 10:16
Nacho Cabanes (+62)

En principio, se trataría de esperar a que termine el proceso, con lo que deberías eliminar el "&" que hacer que se lance en segundo plano.


27-Jul-2020 20:26
marcelo Correa (+2)

Hola Nacho, gracias por tu tiempo. Vos sabes que sí. Lo hice así antes, y use fork porque mientras sonaba la cancion vos seguias navegando entre los temas de la lista, me explico? El problema que tuve fue el siguiente: vos estabas escuchando una cancion, y si querias cambiar, cuando dabas enter, no cambiaba, por eso elegí luego esta forma.
Yo le pasaba el numero de pista mediante pipe, pero el proceso que recibia la data, no cambiaba de pista. Mi codigo anterior era este

int main()
{
pid_t pid;
int readbytes, p[2];
char buffer[SIZE];
short pista_rep, pista, enter;
pipe(p);

pid = fork();
if(pid > 0){
// el padre escribe
// cierro el lado de la lectura
close(p[0]);
while(1){
selec_song(&pista_rep, &pista, &enter);
itoa(pista_rep, buffer, 10);

//escribo en el buffer del lado de la escritura del pipe
write(p[1], buffer, strlen(buffer));
}
close(p[1]);
}
else{
//el hijo lee
close(p[1]); // cierro el lado de la escritura

//leo el buffer y reproduzco la pista que me llega por e pipe
while((readbytes = read(p[0], buffer, SIZE)) > 0)
reproduce_pista(atoi(buffer));
close(p[0]);
}
waitpid(pid, NULL, 0);
exit(0);
   return 0;
}






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...