通过LRC文件分析出一首歌曲的速度
// 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一段声音信号直观地看起来是时间和能量的关系,在语音识别,音乐信息检索中常常关注的是声音中频率和能量的关系,即声谱图描述的就是频率和能量的关系.所以我们 ...
- Mac上如何显示本地lrc文件歌词——lrc播放器——《Super LRC Player》
前不久,用QQ音乐背单词,背了一阵子,很郁闷,因为:1.长的歌词行显示不全:2.歌词自动从网上抓取,不是自己想要的本地lrc文件内容: 于是,有了想法:自己开发一款能够播放本地mp3和lrc的mp3播 ...
- 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)
http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...
- MFC 文件分析工具,弹出“遇到不适当的参数”对话框
做文件分析工具,自己电脑上好的,别人电脑上一直有问题.弹出"遇到不适当的参数"的对话框,跟踪之后发现. 存在数组越界.我的代码是从文件中取出一行数据之后,按照",&quo ...
- 播放器03:以文件夹的形式添加整个文件夹里面的文件到播放列表,播放刚加进来的第一首歌曲,默认顺序播放...
初学C#记录历程,记录心情. 添加FolderBrowserDialog: folderBrowserDialog, 属性RootFolder 为Desktop,ShowNewFolderButton ...
- 李宇春的歌用计算机弹,计算器当钢琴玉米弹出李宇春5首歌曲(组图)
微博爆红的计算器弹琴视频截图. 计算器也能当钢琴弹 计算器可以用来做什么?当然是计算数据.如果实在结实,也许能用来砸核桃.但网友"玉米葱花粥"手中的计算器,还可以当钢琴用.近日,& ...
- java解析lrc_java中用正则表达式解析LRC文件
跟着Mars老师 一起写android中的Mp3播放器 真是受益匪浅 再次感谢老师的无私奉献 不过其中问题也确实不少 感觉老师的代码重构做的不够 其中对LRC文件的解析也弄的比较马虎 今天特意花了一天 ...
- 爬取网易云音乐50000+首歌曲
用python写的一个爬虫程序,可以实现歌曲的下载功能,大约有50000多首歌曲可以下载(本文仅供学习使用) 1.爬虫程序,请求网页,解析网页,储存所需要的信息(wangyi.py) from url ...
- python+jieba分析唐诗三百首
python+jieba分析唐诗三百首 代码及源文件地址:poem_300 代码保证符合命名规范.遵循PEP8规则.导包顺序清晰.尽量做到复用性和不罗嗦 记得修改文件路径哟(^U^)ノ~YO 如果有帮 ...
最新文章
- 兄弟,用大白话给你讲小白都能看懂的分布式系统容错架构
- 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem
- 0913作业(冒泡排序、二分查找法、模拟摇乐游戏)
- android 获取元素的下标_Appium中定位方式by_android_uiautomator
- clone-graph
- linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...
- 【Spring源码】Spring Transactional事务:传播机制(Propagation) 介绍 和 源码剖析
- beautifulsoup解析动态页面div未展开_Python爬虫 | 0xb 数据解析:PyQuery库
- 我是如何在六个月内学会 Python 的?
- 服务器IO测试(Iozone使用)
- matlab 一榀框架,一榀框架(一榀框架的选取依据)
- 计算机理论高考知识点总结,计算机技能高考基础知识(常考知识点记忆)
- SuperMemo导出html,使用思维导图和SuperMemo一起来快速复习(1)
- 微信JS-SDK录音的speex音频文件转换为wav
- React 父子组件的生命周期关系(16.4版本及以后)
- 谈谈能带来高薪报酬的软件技术有哪些?
- Android安全测试神器大全
- LiveRTMP内置IPCamera实现RTMP直播摄像机功能
- 氨氮废水吸附处理工艺——树脂吸附
- python 使用excel画图
热门文章
- 除了年夜饭,这些举动能够让老人暖心
- 必须要知道的股票基础知识
- Deploy Linux Kernel on CRUX using VMware
- GCC 编译 C(C++)静态链接库(gcc -L、gcc -l)和动态链接库(gcc -fPIC -shared)的创建和使用
- 经典Hadoop书籍介绍
- 就这样,我走完了程序员的前五年。一路风雨泥泞,前方阳光正好。
- 涉嫌行贿 三星掌门人等韩企大佬将首次集体接受质询
- 《HTML5 Canvas学习笔记(10)》数钱数到手抽筋
- 电脑小问题不求人--鼠标.软驱.打印机.硬盘.风扇.常见事故处理
- FDTD Solutions时域有限差分法仿真学习相关操作(二)——圆偏振光和椭圆偏振光光源