Título: Generador de musica Publicado por: Julia13 en 24 Junio 2022, 07:09 am Hola, yo tengo una consulta mi generador de música si reproduce, el problema esta en cuando yo quiero agregarle una opción mas al programa que trata de:
La música que ya tenga generarla aleatoriamente si quiero 5 músicas que solo me reproduzca 5, si deseo 8 que solo me reproduzca 8 músicas aleatorias Título: Re: Generador de musica Publicado por: Serapis en 24 Junio 2022, 17:53 pm ...y hay que adivinar las líneas de código que necesitan ser cambiadas o añadidas a tu programa?.
Si llamas a un taller (mecánico) por teléfono porque necesitas cambiar una rueda pinchada, lo primero que te van a preguntar es de qué vehículo se trata... una bici, una moto, un tractor, un autobús, un patinete eléctrico... cada uno calza ruedas distintas al margen de la marca, pues aún siendo de igual tamaño pueden tener diferente sección del eje o diseño de sujección. Si no lo hay en el almacén tendrán que mandarlo pedir... pero ¿qué van a pedir si faltan los datos de lo que hay que pedir??? Título: Re: Generador de musica Publicado por: Julia13 en 25 Junio 2022, 04:31 am void Datasetcancion(vector<string>& listMusic)
{ int i; if (i == 1) { for (unsigned int i = 1; i < 2; i++) { wstring temp = wstring(listMusic.begin(), listMusic.end()); LPCWSTR wideString = temp.c_str(); cout << "Pista actual: "; cout.put(14); cout << " " << listMusic << endl; PlaySound(wideString, NULL, SND_FILENAME | SND_ASYNC); cout << "\t>>>Siguiente cancion, pulse cualquier tecla" << endl; cout << "\t "; system("Pause"); } if (listMusic.size() == 0) cout << "\n\tNo hay canciones en la lista de reproduccion" << endl; else PlaySound(NULL, 0, 0); } else if (i == 2) { for (unsigned int i = 0; i < 3; i++) { wstring temp = wstring(listMusic.begin(), listMusic.end()); LPCWSTR wideString = temp.c_str(); cout << "Pista actual: "; cout.put(14); cout << " " << listMusic << endl; PlaySound(wideString, NULL, SND_FILENAME | SND_ASYNC); cout << "\t>>>Siguiente cancion, pulse cualquier tecla" << endl; cout << "\t "; system("Pause"); } if (listMusic.size() == 0) cout << "\n\tNo hay canciones en la lista de reproduccion" << endl; else PlaySound(NULL, 0, 0); } Título: Re: Generador de musica Publicado por: Serapis en 26 Junio 2022, 02:16 am Supongmaos que tenemos una lista de 100 canciones (la cantidad es irrelevante ahora mismo)...
Es ideal tenerlos indexados de alguna manera, supongamos que mantienes las rutas en un array... 0) ruta a la canción 0.mp3 1) ruta a la canción 1.mp3 ... 99) ruta a la canción 99.mp3 Bien pués la idea es tener una función que primero recoja el número de canciones solicitadas al azar... Código: entero IndexOrden, IndexAzar ...y eso es todo... Si lo revisas bien... verás que la lista no se toca, lo que se hace es usar un array adicional del mismo tamaño que el array de canciones... que se inicializa después de tomar el array de canciones, pués el tamaño de este array es el parámetro que se precisa para inicializar dicho array temporal. Inicialmente dicho array se mantiene en orden, pero luego se barajará.... desordenando los índices. Cuando se invoque la función 'GetListaReproduccion', se la pasan 3 parámetros... - La cantidad de canciones que se quiere reproducir... - Si se desea reproducir al azar, o en el orden en que aparecen. - La cantidad total de canciones que tiene la lista de canciones (en el ejemplo sería 100). Lo primero que hace la función es retomar un 'index' que puede tener un valor previo y que se va actualizando... Cada 'modo de reproducción' mantiene su propio index, para no interferir... es decir es posible reproducir las canciones al azar y luego alternar a ordenado, volver a reproducir al azar y luego ordenado , etc... y siempre se estarán reproduciiendo canciones no escuchadas antes... De hecho si revisas a fondo el pseudocódigo, verás que cualquier canción no se volverá a reproducir hasta que no se hayan escuchado las otras 99... es circular... de modo que si se han pedido 15 canciones y se empieza en la canción 92, tomará las 7 que quedna hasta el 99 y luego tomará las otroas 8 desde el índice 0. En el caso de 'al azar', cuando se han escuchado todas, se vuelven a a barajar, para disponer de otro orden distinto... fíjate que si tras el primer bucle no se han recogido todos los índices, volvemos a barajar antes de retomar las que faltan para devolve rla lista con los índices que se han de reproducir... La función lo que devuelve es un pequeño array de indices, son estos índices los que 'mandan' sobre la lista a reproducir.... La función de reproducción sería tal que así: Código: // Ambas listas se pasan por referencia Si te fijas, tomamos como ruta, no el índice k en el array de canciones, si no que el índice en canciones a reproducir, es el valor que contiene el array lista en el índice k... (que se tomó de la función previa). p.d.: Fíjate que esta función 'Reproducir', recibe como parámetro la lista, de índices que ya se ha obtenido, pero podría modificarse ligeramente la función y recibir otro parámetro, para adquirir la lista desde dentro de dicha función.... se hace el pesudcódigo para este cambio, nota ahora los parámetro de entrada... Código: // La listas se pasan por referencia Cuando salga d ela función 'Reproducir' es ahora cuando puedes indica ral usuario eso de: Código: cout << "\t>>>Siguiente bloque de canciones, pulse cualquier tecla" << endl; |