加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 系统 > 正文

怎么编写 C 程序在 Linux 上创建音乐播放列表

发布时间:2022-07-30 16:05:02 所属栏目:系统 来源:互联网
导读:我最近在 Linux 中编写了一个 C 程序,从我广泛的 MP3 库中创建一个较小的随机 MP3 文件选集。该程序会遍历一个包含我的 MP3 库的目录,然后创建一个包含随机的、较小的歌曲选集的目录。然后我将这些 MP3 文件复制到我的智能手机上,以便随时随地收听。 瑞典
  我最近在 Linux 中编写了一个 C 程序,从我广泛的 MP3 库中创建一个较小的随机 MP3 文件选集。该程序会遍历一个包含我的 MP3 库的目录,然后创建一个包含随机的、较小的歌曲选集的目录。然后我将这些 MP3 文件复制到我的智能手机上,以便随时随地收听。
 
  瑞典是一个人口稀少的国家,有许多农村地区没有完整的手机覆盖。这就是在智能手机上拥有 MP3 文件的原因之一。另一个原因是我并不总是有钱购买流媒体服务,所以我喜欢拥有自己喜欢的歌曲的副本。
 
  该程序的工作方式如下所述:
 
  询问源目录和目标目录。
  询问存放 MP3 文件的目录下的文件个数。
  搜索你希望复制的收藏的百分比(从 1.0% 到 88.0%)。如果你有 1000 个文件的集合,并希望从你的集合中复制 125 个文件而不是 120 个文件,你也可以输入 12.5% 之类的数字。我将上限设置为 88%,因为复制超过 88% 的库将基本生成与你的基础库相似的库。当然,代码是开源的,因此你可以根据自己的喜好自由修改。
  使用指针和malloc 分配内存。一些操作需要内存,包括代表音乐收藏中文件的字符串列表。还有一个列表来保存随机生成的数字。
  生成所有文件范围内的随机数列表(例如,如果集合有 1000 个文件,则为 1 到 1000)。
  复制文件。
  其中一些部分比其他部分更简单,但代码只有大约 100 行:
 
  复制
      #include <dirent.h>
      #include <stdio.h>
      #include <string.h>
      #include <sys/types.h> /* include necessary header files */
      #include <fcntl.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <time.h>
      #define BUF_SIZE 4096 /* use buffer of 4096 bytes */
      #define OUTPUT_MODE 0700 /*protect output file */
      #define MAX_STR_LEN 256
      int main(void) {
        DIR *d;
        struct dirent *dir;
        char strTemp[256], srcFile[256],
        dstFile[256], srcDir[256], dstDir[256];
         float procFilesCopy;
        printf("Enter name of source Directoryn");
        scanf("%s", srcDir);
        printf("Enter name of destionation Directoryn");
        scanf("%s", dstDir);
        printf("How many files does the directory with mp3 files contain?n");
        scanf("%d", &numFiles);
        printf("What percent of the files do you wish to make a random selection ofn");
        printf("enter a number between 1 and 88n");
        scanf("%f", &procFilesCopy);
        // allocate memory for filesList, list of random numbers
        ptrFileLst= (char**) malloc(numFiles * sizeof(char*));
        for (i = 0; i < numFiles; i++) {
          ptrFileLst[i] = (char*)malloc(MAX_STR_LEN * sizeof(char));
        }
        
        largNumRange = numFiles;
        nrFilesCopy = (procFilesCopy / 100) * numFiles;
        numsToGen = (int)((procFilesCopy / 100) * numFiles);
        printf("nrFilesCopy=%f", nrFilesCopy);
        printf("NumsToGen=%d", numsToGen);
        numLst = malloc(numsToGen * sizeof(int));
        srand(time(0));
        numLst[0] = rand() % largNumRange + 1;
        numFound=0;
        do {
          curRanNum = (int)rand() % largNumRange + 1;
          if (numLst[0] == curRanNum) {
            numFound=1;
          }

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读