// try1.cpp : 定义控制台应用程序的入口点。
//
#include "StdAfx.h"
#include <stdio.h>  //for printf,fgets...
#include <stdlib.h>  //for exit
#include <vector>  //for vector
#include <string.h>  //for strlen
#include <string>  //for string
#include <algorithm> //for sort
#include<io.h>
#include<fstream>
#define MAXLINE 256   using namespace std;typedef struct Number{int time;//歌词时间int line;//所在行
};
static int counter=0,counter2=0,n=0;
static int LINE = 0;//记录歌词所在的行int LRCPrase(char *str, vector<string> &sentences, vector<Number> &songTime);
int strtoint(char *str);
int operator<(Number x,Number y);
int it3=0,it4,wordnum;int main(int argc, char *argv[]){char buf[MAXLINE];vector<string> sentences, finalSentence;vector<Number> songTime;FILE *fd;char data[50],t1[50]; strcpy(data,".\\LRC\\"); strcpy(t1,".\\LRC\\周杰伦 - 麦芽糖.lrc");struct _finddata_t fa;long fHandle;if( (fHandle=_findfirst( ".\\LRC\\*.lrc", &fa ))==-1L )//这里可以改成需要的目录 {printf( "当前目录下没有txt文件\n");return 0;}elsedo{    strcat(data,fa.name);printf( "找到文件:%s\n", fa.name );fd=fopen(data,"r");strcpy(data,".\\LRC\\"); if(fd == NULL){perror("open file");exit(1);}//处理歌词while(fgets(buf, sizeof(buf), fd) != NULL){LRCPrase(buf, sentences, songTime);}sort(songTime.begin(), songTime.end());//按照时间排序//printf("%d\n", sentences.size());/*vector<string>::iterator it = sentences.begin();for(; it != sentences.end(); it++){//printf("%d\t,%d\t", (*it).time, (*it).line);printf("%s", (*it).c_str());}*///按时间顺序排序歌词vector<Number>::iterator it1 = songTime.begin();for(; it1 != songTime.end(); it1++){//printf("%d\t,%d\n", (*it1).time, (*it1).line);finalSentence.push_back(sentences[(*it1).line]);}int st=0;it1 = songTime.begin();st=(*it1).time;vector<string>::iterator it = finalSentence.begin();for(; it1 != songTime.end() && it != finalSentence.end(); it1++, it++){//printf("%d\t %d\t%s", (*it1).time, (*it1).line, (*it).c_str());}it1--;int fi;fi=(*it1).time;//printf("歌词滚动部分总时间:%d\n",fi-st); //没用了//printf("总字数:%d\n",counter);printf("平均速度:%d\n",(counter2/n));counter=0;n=0;counter2=0;it3=0;it4=0;wordnum=0;fclose(fd);}while( _findnext(fHandle,&fa)==0 );_findclose( fHandle );//fd = fopen("李慧珍 - 爱死了昨天.lrc", "r");//fd = fopen("周杰伦 - 麦芽糖.lrc", "r");//fd = fopen("周杰伦 - 七里香.lrc", "r");//fd = fopen(t1, "r");return 0;
}int LRCPrase(char *str, vector<string> &sentences, vector<Number> &songTime){if(strlen(str) == 1){//空行return 0;}else{char *p, *q, *temp;q = str;//处理时间的while((p = strchr(q, '[')) != NULL && (temp = strchr(q, ']')) != NULL){//printf("\n");q = p + 1;q[temp - q] = '\0';//printf("%s ", q);     //打印这行时间struct Number number;if((number.time = strtoint(q)) < 0){return 0;}it4=number.time-it3;//换算成微妙://printf("微:%d ",number.time);it3=number.time;//printf("差值:%d ",it4);    number.line = LINE;songTime.push_back(number);q = temp + 1;}//printf("%s", temp + 1);//截取歌词p = ++temp;while(*temp != NULL){temp++;}p[temp - p] = '\0';counter+=(temp-p-1)/2;if(wordnum!=0){//printf("速度:%d ",(it4/wordnum));if((it4/wordnum)<1000){  //大于1000很有可能是非歌词部分导致,可不进行统计counter2+=(it4/wordnum);n++;}}wordnum=(temp-p-1)/2;//printf("字数:%d ",wordnum);//printf("%s", p);string s(p);sentences.push_back(s);LINE++;return 1;}}
//把char转换为int
int chartoint(char ch){return ch - '0';
}int strtoint(char *str){//计算时间,微秒if(isdigit(str[0]) && isdigit(str[1])&& isdigit(str[0]) && isdigit(str[0])&& isdigit(str[0]) && isdigit(str[0])){int mintue = chartoint(str[0]) * 10 + chartoint(str[1]);int second = chartoint(str[3]) * 10 + chartoint(str[4]);int microsecond = chartoint(str[6]) * 10 + chartoint(str[7]);return (mintue * 60 + second) * 1000 + microsecond * 10;}return -1;
}
//重载<操作符,用在sort函数比较中
int operator<(Number x,Number y){return x.time < y.time;
}

通过LRC文件分析出一首歌曲的速度相关推荐

  1. 如何提取出一首歌曲的梅尔频谱

    如何提取出一首歌曲的梅尔频谱 1.声谱图 如下图1一段声音信号直观地看起来是时间和能量的关系,在语音识别,音乐信息检索中常常关注的是声音中频率和能量的关系,即声谱图描述的就是频率和能量的关系.所以我们 ...

  2. Mac上如何显示本地lrc文件歌词——lrc播放器——《Super LRC Player》

    前不久,用QQ音乐背单词,背了一阵子,很郁闷,因为:1.长的歌词行显示不全:2.歌词自动从网上抓取,不是自己想要的本地lrc文件内容: 于是,有了想法:自己开发一款能够播放本地mp3和lrc的mp3播 ...

  3. 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)

    http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...

  4. MFC 文件分析工具,弹出“遇到不适当的参数”对话框

    做文件分析工具,自己电脑上好的,别人电脑上一直有问题.弹出"遇到不适当的参数"的对话框,跟踪之后发现. 存在数组越界.我的代码是从文件中取出一行数据之后,按照",&quo ...

  5. 播放器03:以文件夹的形式添加整个文件夹里面的文件到播放列表,播放刚加进来的第一首歌曲,默认顺序播放...

    初学C#记录历程,记录心情. 添加FolderBrowserDialog: folderBrowserDialog, 属性RootFolder 为Desktop,ShowNewFolderButton ...

  6. 李宇春的歌用计算机弹,计算器当钢琴玉米弹出李宇春5首歌曲(组图)

    微博爆红的计算器弹琴视频截图. 计算器也能当钢琴弹 计算器可以用来做什么?当然是计算数据.如果实在结实,也许能用来砸核桃.但网友"玉米葱花粥"手中的计算器,还可以当钢琴用.近日,& ...

  7. java解析lrc_java中用正则表达式解析LRC文件

    跟着Mars老师 一起写android中的Mp3播放器 真是受益匪浅 再次感谢老师的无私奉献 不过其中问题也确实不少 感觉老师的代码重构做的不够 其中对LRC文件的解析也弄的比较马虎 今天特意花了一天 ...

  8. 爬取网易云音乐50000+首歌曲

    用python写的一个爬虫程序,可以实现歌曲的下载功能,大约有50000多首歌曲可以下载(本文仅供学习使用) 1.爬虫程序,请求网页,解析网页,储存所需要的信息(wangyi.py) from url ...

  9. python+jieba分析唐诗三百首

    python+jieba分析唐诗三百首 代码及源文件地址:poem_300 代码保证符合命名规范.遵循PEP8规则.导包顺序清晰.尽量做到复用性和不罗嗦 记得修改文件路径哟(^U^)ノ~YO 如果有帮 ...

最新文章

  1. 兄弟,用大白话给你讲小白都能看懂的分布式系统容错架构
  2. 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem
  3. 0913作业(冒泡排序、二分查找法、模拟摇乐游戏)
  4. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  5. clone-graph
  6. linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...
  7. 【Spring源码】Spring Transactional事务:传播机制(Propagation) 介绍 和 源码剖析
  8. beautifulsoup解析动态页面div未展开_Python爬虫 | 0xb 数据解析:PyQuery库
  9. 我是如何在六个月内学会 Python 的?
  10. 服务器IO测试(Iozone使用)
  11. matlab 一榀框架,一榀框架(一榀框架的选取依据)
  12. 计算机理论高考知识点总结,计算机技能高考基础知识(常考知识点记忆)
  13. SuperMemo导出html,使用思维导图和SuperMemo一起来快速复习(1)
  14. 微信JS-SDK录音的speex音频文件转换为wav
  15. React 父子组件的生命周期关系(16.4版本及以后)
  16. 谈谈能带来高薪报酬的软件技术有哪些?
  17. Android安全测试神器大全
  18. LiveRTMP内置IPCamera实现RTMP直播摄像机功能
  19. 氨氮废水吸附处理工艺——树脂吸附
  20. python 使用excel画图

热门文章

  1. 除了年夜饭,这些举动能够让老人暖心
  2. 必须要知道的股票基础知识
  3. Deploy Linux Kernel on CRUX using VMware
  4. GCC 编译 C(C++)静态链接库(gcc -L、gcc -l)和动态链接库(gcc -fPIC -shared)的创建和使用
  5. 经典Hadoop书籍介绍
  6. 就这样,我走完了程序员的前五年。一路风雨泥泞,前方阳光正好。
  7. 涉嫌行贿 三星掌门人等韩企大佬将首次集体接受质询
  8. 《HTML5 Canvas学习笔记(10)》数钱数到手抽筋
  9. 电脑小问题不求人--鼠标.软驱.打印机.硬盘.风扇.常见事故处理
  10. FDTD Solutions时域有限差分法仿真学习相关操作(二)——圆偏振光和椭圆偏振光光源