Avatar billede dargny Nybegynder
14. juni 2004 - 10:37 Der er 12 kommentarer og
1 løsning

Randomizer til MP3 afspiller

Jeg har netop købt en Transcend jetflash MP3 afspiller med 256 mb ram.

Problemet er den at jeg nu har plads til 50 sange, og man hører dem fra en ende af, så man får aldrig hørt de sidste sange.

Derfor kunne jeg godt tænke mig et lille program der kunne renumerer mine filer

syntax:

001_xxx.mp3
002_xxy.mp3
003_xyx.mp3

Programmet skal kaldes med programnavn <drev>

Alle mp3 filer uden 000_ skal omdøbes til 000_
Alle mp3 filer med ???_ skal omdøbes til 000_

Derefter skal programmet tage filerne i en tilfældig rækkefølge og nummerer dem med 001_, 002_ o.s.v.

Hver gang programmet køres skal filerne komme i en ny rækkefølge.


Er der nogle der kan klare denne lille opgave? :)
Avatar billede soreno Praktikant
14. juni 2004 - 15:09 #1
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

void printVect(char *title, vector<string> &vect)
{
    cout << "---*** " << title << " ***---" << endl;
    vector<string>::iterator iter = vect.begin();   
    while(iter != vect.end())
    {
        cout << *iter++ << endl;
    }   
}

int main()
{
    vector<string> vect;
    for(int i=0;i<10;i++)
    {
        ostringstream buffer;
        buffer << "Track" << i;
        vect.push_back(buffer.str());
    }
    printVect("Oprindelig vektor", vect);
    random_shuffle(vect.begin(), vect.end());
    cout << endl; 
    printVect("Blandet vektor", vect);

    return 0;
}
Output:

---*** Oprindelig vektor ***---
Track0
Track1
Track2
Track3
Track4
Track5
Track6
Track7
Track8
Track9

---*** Blandet vektor ***---
Track8
Track1
Track9
Track2
Track0
Track5
Track7
Track3
Track4
Track6
Avatar billede soreno Praktikant
14. juni 2004 - 15:09 #2
Så har du i hvertfald blande funktionen.
Avatar billede dilleberg Nybegynder
14. juni 2004 - 16:49 #3
Elegant løsning !

db
Avatar billede soreno Praktikant
14. juni 2004 - 19:06 #4
På en Windows maskine kan filerne i et directory bl.a. findes således:
#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

int dir(string &path)
{
    WIN32_FIND_DATA fd;
    HANDLE handle;   
    int numFiles = 0;
    string tempPath(path);
    tempPath += "\\*.*"; 
    handle = FindFirstFile(tempPath.data(), &fd);
   
    if(handle != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            {
                if(strcmp(fd.cFileName, ".") || strcmp(fd.cFileName, ".."))
                {
                    cout << fd.cFileName << endl;
                    numFiles++;
                }
            }
        }while(FindNextFile(handle, &fd));
    }
    FindClose(handle);
    return numFiles;
}

int main(int argc, char **argv)
{
    string path = "c:\\";
    int numFiles = dir(path);
    cout << "files in " << path << " = " << numFiles << endl;

    return 0;
}
Avatar billede dargny Nybegynder
15. juni 2004 - 08:03 #5
Jeg har ikke adgang til en compiler, så jeg skal bruge et færdigt program.
Avatar billede soreno Praktikant
15. juni 2004 - 08:52 #6
Har du overvejet om din afspiller har en random/shuffle funktion ?

I øvrigt:
http://expfaq.1go.dk/?id=54#programmor_til_gratis_arbejde
Avatar billede dargny Nybegynder
15. juni 2004 - 10:01 #7
Den har desværre ikke sådan en funktion.

Jeg er godt klar over at jeg spørger om meget, og jeg havde heller ikke nogle forhåbninger da jeg spurgte, men den som vover, vinder.
Avatar billede soreno Praktikant
15. juni 2004 - 13:58 #8
http://soreno.dk/shuffle_rename.zip

Put filen i det directory hvor du har din musik.
Kør filen med filefternavn, f.eks.:
shuffle_rename.exe mp3

Så vil alle mp3 blive "blandet" og *kopieret* til output\ directory.

Husk backup osv..
Avatar billede dargny Nybegynder
15. juni 2004 - 14:21 #9
Super Soreno :O)

Du havde vist kaldt den main.exe. ikke at der gør noget. Jeg har dog kun et ønske tilbage.

Du kopiere dem, men jeg har intet plads tilbage på flashkortet. Kunne du lave det sådan at den renamer isteder for kopiere dem til output.

Jeg er sikker på at du kan lægge dit program ud til mp3 walkman brugerne (som ikke har en random funktion) og de vil være glade.
Avatar billede soreno Praktikant
15. juni 2004 - 22:32 #10
Jeg kigger på det i morgen.

Men grunden til at jeg kopierede er at jeg nemt kunne forestille mig at filnavnene blev lidt lange efter et par kørsler med programmet. Programmet sætter altid xxx foran nuværende navn.

Men jeg regnede med at et multirename tool kunne ordne den sag, når navnene bliver for lange. F.eks. kan man markere filerne i Total Commander og trykke ctrl+m (v6.0).
Avatar billede soreno Praktikant
16. juni 2004 - 10:27 #11
Avatar billede dargny Nybegynder
17. juni 2004 - 08:10 #12
Total commander? hvad er det?
Avatar billede soreno Praktikant
17. juni 2004 - 09:54 #13
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester