无损音乐下载器 Delphi版

先上图

完整版源码下载地址:

http://download.csdn.net/detail/guoxuepeng123/9376720

searchMusic.pas 搜索界面

unit searchMusic;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdHTTP, StdCtrls,msxml,ExtCtrls,IdURI,Httpapp,UrlMon,ShellAPI,sLabel, xmldom, XMLIntf, msxmldom, XMLDoc,StrUtils;typeTsearchForm = class(TForm)edt1: TEdit;lbl2: TLabel;lv1: TListView;slb1: TsLabel;xmldcmnt1: TXMLDocument;btn1: TButton;btn2: TButton;btn3: TButton;btn4: TButton;btn5: TButton;btn6: TButton;btn7: TButton;btn8: TButton;slb2: TsLabel;lbl1: TLabel;procedure lv1DblClick(Sender: TObject);procedure btn1Click(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure btn2Click(Sender: TObject);procedure btn3Click(Sender: TObject);procedure phbMusicList();procedure btn4Click(Sender: TObject);procedure btn5Click(Sender: TObject);procedure btn6Click(Sender: TObject);procedure btn7Click(Sender: TObject);procedure btn8Click(Sender: TObject);private{ Private declarations }public{ Public declarations }    HttpReq: IXMLHttpRequest;end;varsearchForm: TsearchForm;phbType:string;implementationuses superobject,download,Constant;
{$R *.dfm}//文件下载
function DownloadFile(Source, Dest: string): Boolean;
begin   try   Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;   except   Result := False;   end;   end;  procedure TsearchForm.lv1DblClick(Sender: TObject);
varsongid:string;
begintrysongid:=lv1.Items.Item[lv1.Selected.Index].Caption;Constant.download_songid:=songid;if dlForm<>nil thendlForm.hide;application.CreateForm(TdlForm, dlForm);dlForm.Show;exceptShowMessage('请选择要下载的歌曲!');end;
end;
function ReversePos(SubStr, S: String): Integer;
vari : Integer;
begini := Pos(SubStr, ReverseString(S));if i > 0 then i := Length(S) - i - Length(SubStr) + 2;Result := i;
end;procedure TsearchForm.btn1Click(Sender: TObject);
vari,count,EndPos,len: Integer;url,content,musicName,p,m,path,param: string;WItem:TListItem;jo: ISuperObject;songList:TSuperArray;
beginif edt1.Text<>'' thenbeginlv1.Clear;slb2.Caption:='';musicName:=HTTPEncode(UTF8Encode(edt1.Text));HttpReq:=CoXMLHTTPRequest.Create;url := 'http://sug.music.baidu.com/info/suggestion?word='+musicName+'&format=json&version=2&from=0';HttpReq.open('get', Url, False, EmptyParam, EmptyParam);HttpReq.send(EmptyParam);//开始搜索content := HttpReq.responseText;jo := SO(content);songList := jo['data'].o['song'].AsArray; if songList.Length=0 thenbeginShowMessage('未找到歌曲【'+edt1.Text+'】');lv1.Clear;end;if songList.Length>0 thenbeginfor i := 0 to songList.Length-1 dobegin   WItem:=lv1.Items.Add;WItem.Caption:=songList[i].O['songid'].AsString;WItem.SubItems.Add(songList[i].O['songname'].AsString);WItem.SubItems.Add(songList[i].O['artistname'].AsString);end;end;endelsebeginShowMessage('请输入歌曲名称!');end;
end;procedure TsearchForm.FormClose(Sender: TObject; var Action: TCloseAction);
beginif dlForm<>nil thendlForm.Hide;
end;procedure TsearchForm.phbMusicList();vari,count,EndPos,len: Integer;url,content,musicName,p,m,path,param: string;WItem:TListItem;jo: ISuperObject;songList:TSuperArray;
beginlv1.Clear;musicName:=HTTPEncode(UTF8Encode(edt1.Text));HttpReq:=CoXMLHTTPRequest.Create;url := 'http://tingapi.ting.baidu.com/v1/restserver/ting?size=100&type='+phbType+'&format=json&method=baidu.ting.billboard.billList';HttpReq.open('get', Url, False, EmptyParam, EmptyParam);HttpReq.send(EmptyParam);//开始搜索content := HttpReq.responseText;jo := SO(content);slb2.Caption:= '更新时间:'+jo['billboard'].o['update_date'].AsString;songList := jo['song_list'].AsArray;if songList.Length=0 thenbeginShowMessage('未找到歌曲【'+edt1.Text+'】');lv1.Clear;end;if songList.Length>0 thenbeginfor i := 0 to songList.Length-1 dobeginWItem:=lv1.Items.Add;WItem.Caption:=songList[i].O['song_id'].AsString;WItem.SubItems.Add(songList[i].O['title'].AsString);WItem.SubItems.Add(songList[i].O['artist_name'].AsString);end;end;
end;
procedure TsearchForm.btn2Click(Sender: TObject);
beginphbType:='1';searchForm.phbMusicList();
end;procedure TsearchForm.btn3Click(Sender: TObject);
beginphbType:='2';searchForm.phbMusicList();
end;
procedure TsearchForm.btn4Click(Sender: TObject);
beginphbType:='21';searchForm.phbMusicList();
end;procedure TsearchForm.btn5Click(Sender: TObject);
beginphbType:='22';searchForm.phbMusicList();
end;procedure TsearchForm.btn6Click(Sender: TObject);
beginphbType:='23';searchForm.phbMusicList();
end;procedure TsearchForm.btn7Click(Sender: TObject);
beginphbType:='24';searchForm.phbMusicList();
end;procedure TsearchForm.btn8Click(Sender: TObject);
beginphbType:='25';searchForm.phbMusicList();
end;end.

download.pas 下载界面

unit download;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdHTTP, StdCtrls,msxml,ExtCtrls,IdURI,Httpapp,UrlMon,ShellAPI,sLabel, xmldom, XMLIntf, msxmldom, XMLDoc,StrUtils, sEdit, sGroupBox,sButton, acImage,Jpeg;typeTdlForm = class(TForm)slb1: TsLabel;slb3: TsLabel;grp1: TsGroupBox;edt1: TsEdit;btn1: TsButton;grp2: TsGroupBox;edt2: TsEdit;btn2: TsButton;grp3: TsGroupBox;btn3: TsButton;btn4: TsButton;btn5: TsButton;img1: TsImage;idhtp1: TIdHTTP;slb2: TsLabel;btn6: TsButton;procedure FormCreate(Sender: TObject);procedure btn1Click(Sender: TObject);procedure btn2Click(Sender: TObject);procedure getMusicInfo();procedure btn3Click(Sender: TObject);procedure btn4Click(Sender: TObject);procedure btn5Click(Sender: TObject);procedure btn6Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;vardlForm: TdlForm;musicPath,lyPath:string;HttpReq: IXMLHttpRequest;rate:string;musicType:string;
implementationuses Constant,superobject;
{$R *.dfm}//文件下载
function DownloadFile(Source, Dest: string): Boolean;
begin   tryResult := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;   except   Result := False;end;   end;
function change_length(songlength: integer): string;//将单位为秒的时间长度转化
var                                                        //为00:00:00的时间格式的字符串
s:string; //定义S为字符串变量
hours,minutes,seconds:integer;//定义hours,minutes,seconds为整形变量
beginsonglength:=songlength div 1000;seconds:= songlength mod 60;songlength:=songlength div 60;minutes:=songlength mod 60;hours:=songlength div 60;if strlen(pchar(inttostr(hours)))=1 then   //若小时数为个位数s:='0'+inttostr(hours)                   //则在前面补0,即0X形式elses:=inttostr(hours);                     //不然,为xx形式s:=s+':';if strlen(pchar(inttostr(minutes)))=1 thens:=s+'0'+inttostr(minutes)elses:=s+inttostr(minutes);s:=s+':';if strlen(pchar(inttostr(seconds)))=1 thens:=s+'0'+inttostr(seconds)elses:=s+inttostr(seconds);change_length:=s;
end;
procedure TdlForm.getMusicInfo();
vari,count,EndPos,size: Integer;url,content,sizeStr,p,m,path,param,songid,downloadurl,timeStr: string;jo: ISuperObject;songList:TSuperArray;imagestream:TMemoryStream;jpg:TJpegImage;
beginsongid:=Constant.download_songid;      HttpReq:=CoXMLHTTPRequest.Create;url := 'http://music.baidu.com/data/music/fmlink?songIds='+songid+'&rate='+rate+'&format=json&type='+musicType;HttpReq.open('get', Url, False, EmptyParam, EmptyParam);HttpReq.send(EmptyParam);//开始搜索content := HttpReq.responseText;jo := SO(content);if jo['errorCode'].AsString='22000' thenbeginsongList := jo['data'].o['songList'].AsArray;if songList.Length=0 thenbeginShowMessage('未找下载链接!');end;if songList.Length>0 thenbeginfor i := 0 to songList.Length-1 dobeginslb1.Caption:=songList[i].O['songName'].AsString;if songList[i].O['size'].AsString<>'' thenbegin                                    size:= strtoint(songList[i].O['size'].AsString);sizeStr:=formatfloat('0.00',size*100/(1024*1024)/100);endelsebeginsizeStr:='0';end;timeStr:='0';if songList[i].O['time'].AsString<>'' thenbegintimeStr:=change_length(strtoint(songList[i].O['time'].AsString)*1000);end;slb2.Caption:=' 时长:'+timeStr;slb3.Caption:=songList[i].O['artistName'].AsString+'  '+sizeStr+'MB / '+songList[i].O['format'].AsString+' / '+songList[i].O['rate'].AsString+'kbps';m:=songList[i].O['songName'].AsString+'-'+songList[i].O['artistName'].AsString+'.'+songList[i].O['format'].AsString;path:=songList[i].O['songName'].AsString+'-'+songList[i].O['artistName'].AsString+'.lrc';musicPath:=ExtractFilePath(Application.Exename)+'Songs\'+m;lyPath:=ExtractFilePath(Application.Exename)+'Lyrics\'+path;edt1.Text:= songList[i].O['songLink'].AsString;edt2.Text:= 'http://music.baidu.com'+songList[i].O['lrcLink'].AsString;btn1.Enabled:=true;btn2.Enabled:=true;if songList[i].O['songLink'].AsString='' thenbeginedt1.Text:= '未找到歌曲下载链接,请尝试其他音质。';btn1.Enabled:=false;end;if songList[i].O['lrcLink'].AsString='' thenbeginedt2.Text:= '未找到歌词下载链接,请尝试其他音质。';btn2.Enabled:=false;end;      //显示歌曲图片if songList[i].O['songPicBig'].AsString<>'' thenbeginimagestream := TMemoryStream.Create();jpg:=TJpegImage.Create;idhtp1.Get(songList[i].O['songPicBig'].AsString,imagestream);imagestream.Position:=0;jpg.LoadFromStream(imagestream);img1.Picture.Assign(jpg);end;end;end;endelsebeginShowMessage('下载失败!');end;
end;
procedure TdlForm.FormCreate(Sender: TObject);
beginrate:='320';musicType:='flac';dlForm.getMusicInfo();
end;procedure TdlForm.btn1Click(Sender: TObject);
beginShellExecute(Handle, 'open', 'IExplore.exe', PAnsiChar(edt1.Text), nil, SW_SHOWNORMAL);
end;procedure TdlForm.btn2Click(Sender: TObject);
beginShellExecute(Handle, 'open', 'IExplore.exe', PAnsiChar(edt2.Text), nil, SW_SHOWNORMAL);
end;procedure TdlForm.btn3Click(Sender: TObject);
beginrate:='128';         musicType:='mp3';dlForm.getMusicInfo();
end;procedure TdlForm.btn4Click(Sender: TObject);
beginrate:='192';             musicType:='mp3';dlForm.getMusicInfo();
end;procedure TdlForm.btn5Click(Sender: TObject);
beginrate:='320';musicType:='mp3';dlForm.getMusicInfo();
end;procedure TdlForm.btn6Click(Sender: TObject);
begin  rate:='320';musicType:='flac';dlForm.getMusicInfo();
end;end.

调用插件superobject.pas、superxmlparser.pas

无损音乐下载器 Delphi版相关推荐

  1. [工具]再更新音乐下载软件,MP3音乐无损音乐下载器

    昨天发的音乐下载软件我没有多做几次测试,导致误导大家了,昨天分享的那个只能听音乐不能下载,知道后我又赶紧为大家找了一款(一个网站),不知道什么情况链接不能发自动回复里,我也不敢直接放文章里,大家回复转 ...

  2. MusicTools下载 v3.4.0 全网免费无损音乐下载器

    下载地址:点我 随着音乐版权越来越受到重视,我们在线听歌的限制也越来越大.在一个音乐平台上,我们无法听到所有歌手的作品,因为该平台可能没有某个歌手的版权.而且,由于很多内容都需要付费,我们也无法随心所 ...

  3. [工具]更新音乐下载软件工具音乐下载网站,MP3音乐无损音乐下载器

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天推荐几个音乐下载的网站,想当年音乐随便下,这几年因为版权神马问题下个歌都费尽,今天 ...

  4. [工具]更新音乐下载网站,MP3音乐无损音乐下载器

    分享两个音乐下载网站,都是今天测试过可以正常使用的.这种网站不知道会存在多久,老样子不放文章里,回复关键字 1.疯狂音乐搜索(直接下载) 这是一个音乐聚集平台,支持国内大部分音乐平台. 我们可以通过音 ...

  5. 无损音乐下载器 MusicTools单文件免安装-v1.9.3.1

    MusicTools,无损音乐下载神器. 本文资源下载:MusicTools

  6. [Android工具]更新音乐下载软件,MP3音乐无损音乐下载器

    更新音乐下载软件,前两次发的安卓软件又不能用了,虽然是正常情况,之前也早有心里准备,但一发现不能用还是十分不爽的!没办法,盼望着哪天能把他们服务器里所有音乐都下载下来... 不能让大家没得用,我又找了 ...

  7. [Android工具]安卓音乐下载软件,无损音乐FLAC音乐下载器

    功能:免费好用的无损音乐下载器. 音乐格式:APE.FLAC和MP3 下载:后台发送"FLAC"获取下载地址 不需要注册登录直接进入搜索界面: 点击输入框右侧的放大镜开始搜索: 下 ...

  8. [PC工具]音乐下载软件,MP3音乐下载器

    绿色软件,简单粗暴. 我搜索了几个歌名,好像没有APE.FLAC无损格式,都是MP3的音乐. 1搜索,2试听,3下载 ▼ 下载连接 ▼ 关注公众号[DLGG创客DIY] 后台发送"MP3&q ...

  9. android 取色器_音乐剪辑器手机版下载-音乐剪辑器app下载v9.10.15 安卓免费版

    音乐剪辑器app是非常棒的剪辑软件,大家可以使用它对各种彩铃铃声,原版音乐进行剪辑编辑处理,功能强大完全免费,而且操作非常简单,有需要的朋友赶快下载试试吧! 音乐剪辑器手机版介绍 有时候想把多首歌曲合 ...

  10. 【趣味编程】第1期。用python做简易版音乐下载器

    目录 前言 爬虫部分 完整代码 前言 那废话不多说,先了解准备工作. 1.先下载python,可以搜索python官网,到官网里面下载 2.下载外置模块 第一种方法,按win+R,输入cmd,然后输入 ...

最新文章

  1. 大数据在统计中的应用初探
  2. oracle prvg 1901,12c 打补丁analyze时报错
  3. Mongodb在使用过程中有什么问题
  4. python获取键盘输入能不能不按回车键_Github获8300星!用Python开发的一个命令行的网易云音乐...
  5. android页面布局更改,使用setContentView的方式更换布局文件从而更换界面
  6. 【GO】golang 的new 和 make
  7. 支付宝一键清除首页各种广告
  8. python爬虫哪个选择器好用_Python爬虫学习8-css选择器使用
  9. java程序设计之学生选课管理系统_课内资源 - 基于JAVA面向对象的学生选课管理系统...
  10. 关于C语言的字符常量和符号常量
  11. bzoj3332: 旧试题
  12. word如何在任意页开始添加页码
  13. 智能语音识别--方案实现--具体过程
  14. JAVA、android常用时间处理方法及类似微信微博发表时间显示
  15. cmt obm odm 代工模式oem_OEM、ODM、OBM、OPM概念,作用与区别
  16. Struts2检测工具
  17. 【ORM】TypeORM 与 Prisma 的详细对比
  18. 钒酸钠的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. python英文词频统计-Python实现统计英文文章词频的方法分析
  20. 键盘 部分 按键 ~ 需要长按才能打出来

热门文章

  1. 由JavaScript版迷宫游戏引出Java版迷宫地图生成器
  2. html5的canvas绘制迷宫地图
  3. Docker一探究竟
  4. python 爬取12306验证码
  5. 高数笔记(二):极限的运算法则,极限存在准则,两个重要极限,无穷小的比较
  6. 你有梦想吗?华为云学院助你实现梦想
  7. unity reflect_使用Unity Reflect的不同方法
  8. Python openpyxl 删除excel有删除线的文字
  9. 大事务的处理方式对比
  10. 【Windows 10 更新失败】Windows10 升级提示错误代码:0x80070020解决方案