亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【SDK編程】LRC歌詞制作工具V1.0

系統(tǒng) 1964 0

今天晚上下載了幾個英語聽力拷貝到了MP3上聽,可是只聽看不到原文真是蛋疼,所以想把聽力原文做成lrc文件,這樣MP3就能顯示歌詞了。本來想上網(wǎng)上下載個,突然一想這程序也不難,就動手自己寫了個,曬下..有BUG,今后會不斷改進并添加新功能~

【SDK編程】LRC歌詞制作工具V1.0 【SDK編程】LRC歌詞制作工具V1.0 【SDK編程】LRC歌詞制作工具V1.0 【SDK編程】LRC歌詞制作工具V1.0

使用方法:
先在your name里輸入你的名字,程序會自動在生成的lrc里添加你的信息~
去網(wǎng)上把歌詞copy到下面的文本框內(nèi),
點openfile找個mp3,然后Current time里顯示的就是當前時間,精確到毫秒。
等聽到歌唱到那句話的時間,把光標放到那句的前邊,點InsertPoint就行啦~
最后別忘了點SaveLRC!


主要代碼:

main.cpp

    #ifndef INCLUDE_H_H_H_H
#define INCLUDE_H_H_H_H
#include <windows.h>
#include <stdio.h>
#endif

#include "resource.h"
#include "music.h"
#pragma comment(lib,"Winmm.lib")

long MilliSecond_Count=0;
int MilliSecond=0;
int Second=0;
int Minute=0;
bool IsPlaying=false;
TCHAR szTemp[MAX_PATH];
INT_PTR ExitCode;

int WINAPI WinMain(HINSTANCE hIns,HINSTANCE hPre,LPSTR lpCmd,int nShow)
{
	LoadLibrary("Riched20.dll");
	ZeroMemory(szTemp,MAX_PATH);
	ExitCode=DialogBox(hIns,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
	return 0;
}
//窗口過程函數(shù)
INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		InitDialog(hwndDlg);
		break;
	case WM_COMMAND:
		if(IDC_OPEN==wParam)
		{
			OpenFile(hwndDlg);
		}
		if(IDC_INSERT==wParam)
		{
			char ch[11];
			memset(ch,0,11);
			Convent(ch);

			HWND hText=GetDlgItem(hwndDlg,IDC_TEXT);
			SendMessage(hText,EM_REPLACESEL,FALSE,(WPARAM)ch);
		}
		if(IDC_STOP==wParam)
		{
			StopMusic(szTemp,hwndDlg);
			if(IDYES==MessageBox(hwndDlg,"Do you want to clean the text ?","Warming",MB_YESNO | MB_ICONQUESTION))
			{
				SetDlgItemText(hwndDlg,IDC_TEXT,"");
			}
		}
		if(IDC_SAVE==wParam)
		{
			if(!SaveLRC(hwndDlg))
			{
				MessageBox(hwndDlg,"Save LRC failed !","Warming",0);
			}
		}
		break;
	case WM_CLOSE:
		EndDialog(hwndDlg,ExitCode);
		break;
	default:
		break;
	}
	return FALSE;
}


  


music.cpp

    #include "music.h"
#include "resource.h"

extern long MilliSecond_Count;
extern int MilliSecond;
extern int Second;
extern int Minute;
extern bool IsPlaying;
extern TCHAR szTemp[MAX_PATH];
extern INT_PTR ExitCode;

//顯示打開文件對話框
void OpenFile(HWND hwndDlg)
{
	OPENFILENAME fn;
	ZeroMemory(&fn,sizeof(fn));
	TCHAR szPath[MAX_PATH];
	ZeroMemory(szPath,MAX_PATH);
	TCHAR szTitle[MAX_PATH];
	ZeroMemory(szTitle,MAX_PATH);

	fn.lStructSize=sizeof(fn);
	fn.hwndOwner=hwndDlg;
	fn.lpstrFilter="MP3音樂文件(*.mp3)\0*.mp3\0";
	fn.lpstrFile=szPath;
	fn.nMaxFile=MAX_PATH;
	fn.lpstrFileTitle=szTitle;
	fn.nMaxFileTitle=MAX_PATH;
	fn.lpstrInitialDir=NULL;
	fn.lpstrTitle="Choose a MP3 file :";
	fn.Flags=OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;

	if(GetOpenFileName(&fn))
	{
		TCHAR szShortPath[MAX_PATH];
		TCHAR szCommand[MAX_PATH+30];
		ZeroMemory(szShortPath,MAX_PATH);
		ZeroMemory(szCommand,MAX_PATH+30);
		GetShortPathName(szPath,szShortPath,MAX_PATH);
		
		//如果正在播放,那么就先停止播放,并清空EDIT中的內(nèi)容
		if(IsPlaying)
		{
			StopMusic(szShortPath,hwndDlg);
			SetDlgItemText(hwndDlg,IDC_TEXT,"");
		}
		sprintf(szCommand,"play %s",szShortPath);
		mciSendString(szCommand,NULL,0,NULL);

		SetTimer(hwndDlg,1,1,TimerProc);

		IsPlaying=true;
		strcpy(szTemp,szShortPath);

		AddInfo(hwndDlg,szTitle);

	}
}
//Timer的回調(diào)函數(shù)
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
	++MilliSecond;
	++MilliSecond_Count;

	if(MilliSecond_Count>=GetMusicLength(szTemp)/10)
	{
		StopMusic(szTemp,hwnd);
	}
	if(100==MilliSecond)
	{
		MilliSecond=0;
		++Second;
	}
	if(60==Second)
	{
		Second=0;
		++Minute;
	}
	char ch[11];
	memset(ch,0,11);
	Convent(ch);
	SetDlgItemText(hwnd,IDC_TIME,ch);
	
}
//把當前時間轉(zhuǎn)換成 [xx:xx.xx]格式
void Convent(char *pResult)
{
	char bufMinute[3];
	char bufSecond[3];
	char bufMilli[3];
	
	if(Minute<10)
	{
		bufMinute[0]='0';
		itoa(Minute,&bufMinute[1],10);
	}
	else if(Minute>=10)
	{
		itoa(Minute,bufMinute,10);
	}
	if(Second<10)
	{
		bufSecond[0]='0';
		itoa(Second,&bufSecond[1],10);
	}
	else if(Second>=10)
	{
		itoa(Second,bufSecond,10);
	}
	if(MilliSecond<10)
	{
		bufMilli[0]='0';
		itoa(MilliSecond,&bufMilli[1],10);
	}
	else if(MilliSecond>=10)
	{
		itoa(MilliSecond,bufMilli,10);
	}
	sprintf(pResult,"[%s:%s.%s]",bufMinute,bufSecond,bufMilli);
}
void InitDialog(HWND hwndDlg)
{
//	HWND hText=GetDlgItem(hwndDlg,IDC_TEXT);
//	SendMessage(hText,WM_USER + 72,(WPARAM)GetDC(hText),64);
}
//自動添加作者的名字,歌曲的標題
void AddInfo(HWND hwndDlg,char *pName)
{
	int Length_Title=GetLength(pName);
	int Length_Name=GetWindowTextLength(GetDlgItem(hwndDlg,IDC_NAME));
	int Length_Text=GetWindowTextLength(GetDlgItem(hwndDlg,IDC_TEXT));
	int Length_All=Length_Title + Length_Name + Length_Text;

	char *pBuf=new char[Length_All + 1 + 20];
	pBuf[Length_All + 20]='\0';
	char *pTitle=new char[Length_Title + 1];
	char *pMyName=new char[Length_Name + 1];
	char *pText=new char[Length_Text + 1];
	pTitle[Length_Title]='\0';
	pMyName[Length_Name]='\0';
	pText[Length_Text]='\0';

	GetDlgItemText(hwndDlg,IDC_NAME,pMyName,Length_Name + 1);
	GetDlgItemText(hwndDlg,IDC_TEXT,pText,Length_Text + 1);
	strcpy(pTitle,pName);

	sprintf(pBuf,"[ti]%s\r\n[00:01.15]【%s】制作\r\n%s",pTitle,pMyName,pText);
	SetDlgItemText(hwndDlg,IDC_TEXT,pBuf);

}
int GetLength(char *pCh)
{
	int ix=0;
	while(pCh[ix]!='\0')
	{
		++ix;
	}
	return ix;
}
//顯示保存對話框
bool SaveLRC(HWND hwndDlg)
{
	OPENFILENAME fn;
	char szPath[MAX_PATH];
	char szTitle[MAX_PATH];
	ZeroMemory(szTitle,MAX_PATH);
	ZeroMemory(szPath,MAX_PATH);
	ZeroMemory(&fn,sizeof(fn));

	fn.lStructSize=sizeof(fn);
	fn.hwndOwner=hwndDlg;
	fn.lpstrFilter="LRC歌詞文件(*.lrc)\0*.lrc\0";
	fn.lpstrFile=szPath;
	fn.nMaxFile=MAX_PATH;
	fn.lpstrFileTitle=szTitle;
	fn.nMaxFileTitle=MAX_PATH;
	fn.lpstrInitialDir=NULL;
	fn.lpstrTitle="Save LRC :";
	fn.Flags=OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;

	if(GetSaveFileName(&fn))
	{
		int len=GetWindowTextLength(GetDlgItem(hwndDlg,IDC_TEXT));
		char *pBuf=new char[len + 1];
		GetDlgItemText(hwndDlg,IDC_TEXT,pBuf,len + 1);

		char szFileName[MAX_PATH + 30];
		sprintf(szFileName,"%s.lrc",szPath);

		FILE *f=NULL;
		f=fopen(szFileName,"w");
		if(NULL==f)
		{
			return false;
		}
		fwrite(pBuf,1,len,f);
		fclose(f);
	}
	return true;
}
//得到音樂的長度
long GetMusicLength(char *pPath)
{
	long len=0;
	char szLen[256];
	memset(szLen,0,256);
	char Com[256];
	sprintf(Com,"status %s length",szTemp);
	mciSendString(Com,szLen,256,NULL);
	return strtol(szLen,NULL,10);
}
//停止播放音樂
void StopMusic(char *pPath,HWND hwndDlg)
{
	TCHAR szCmd[50];
	ZeroMemory(szCmd,50);
	sprintf(szCmd,"close  %s",szTemp);
	mciSendString(szCmd,NULL,0,NULL);
	KillTimer(hwndDlg,1);
	IsPlaying=false;

	InitVar();
}
//變量初始化
void InitVar()
{
	MilliSecond_Count=0;
	MilliSecond=0;
	Second=0;
	Minute=0;
}
  


【SDK編程】LRC歌詞制作工具V1.0


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美激情视频二区 | 波多野结衣精品一区二区三区 | 最新久久精品 | 国产成人久久精品 | 日本成人久久 | 高清在线一区二区三区亚洲综合 | 久久免费资源 | 五月中文字幕 | 欧美一级夜夜爽 视频 | 国产成人91| 免费一级欧美大片视频在线 | 国产日韩精品一区在线观看播放 | 在线视频一二三区 | 亚洲第一黄色网址 | 九操网 | 色噜噜五月综合激情久久爱 | 青青青久在线视频免费观看 | 国产成人久久精品区一区二区 | 国产成人青草视频 | 99热这里只有精品一区二 | 在线精品中文字幕福利视频 | 狠狠色成人综合首页 | 在线观看亚洲免费视频 | 欧美国产成人一区二区三区 | 99精品欧美一区二区三区美图 | 国产日韩精品一区二区 | 中文亚洲欧美 | 国产欧美中文字幕 | 日韩久久精品 | 亚洲欧美精品一中文字幕 | 国内精品久久久久影院蜜芽 | 日日操狠狠操 | 亚洲国产精品悠悠久久琪琪 | 国产国产人免费人成成免视频 | 国产女人久久精品 | 色综合久久一区二区三区 | 色综合久久综精品 | 天天色天天 | dxj久久成国产精品 dxj伊人 | 国产精品亚洲欧美一级久久精品 | 久久国产亚洲高清观看5388 |