手机铃声和图片的详细设计说明

发布时间:20040524  点击数:1579  作者:syy007   转载出处:天堂鸟 录入:web

<script language=javascript src="../Include/ubb.js" type=text/javascript></script> <script language=javascript type=text/javascript> document.write(ubbcode("手机铃声和图片的详细设计说明

这篇文档将前些日子自己测试的过程写下来供大家参考,可能现在这些东西许多人已经不再做了,但为了那些还在为这些东西摸索的朋友提供方便我还是写出来,但因为时间和资料的原因,所涉及到的还不是很全,希望知道更多细节的朋友们能与我分享你们在这方面的经验与知识。我将尽可能详细地写出它们制作的过程,包括测试用的手机型号,使用的工具,相关的算法,SP发送参数的设置等。

一. MOTOROLA普通铃声
1) 测试环境:手机型号--A388、T191;工具--NOK2PHONE;网关--亚信
2) 制作过程:以”999朵玫瑰”为例,首先用NOK2PHONE打开相应的MIDI文件,在NOK2PHONE的输出框中产生MOTOROLA普通铃声所需的字串,如” 2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”,根据算法计算出真正所需发送的铃声,内容是” L35&2 2F2E2C2D4R2A-1G-1F-2G-2C2A-6A-4C2A-2G-6D1D1C2D2E2&&27”,通过SP程序将该字串做为普通的文本消息发送至手机,手机上显示收到铃声。
3) 算法:MOTOROLA的铃声格式如下:
<Header><Tempo Value><Musical Data><Delimiter><Checksum>
-----------------------------------------------------------------------------------------
Header:L35&
Tempo Value:由1或2或3或4加空格构成,缺省为2,如”2 “
Musical Data:将NOK2PHONE中产生的字串去掉空格即可
Delimiter:&&
Checksum:对Musical Data进行的校验和,两个字节。方法为对Musical Data中的数据从前往后对每个字符进行异或运算,运算的结果假设其十六进制的表示为XY,那Checksum的第一个字节的十六进制形式为3Y,第二个字节的十六进制形式为3X。

部分算法:
BYTE a = 0, check1, check2;
CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing;

sRead.Replace(/" /",/"/");
arrayMessage.SetSize(sRead.GetLength() + 1);
strcpy((char *)arrayMessage.GetData(), sRead);
for(int i=0;i<arrayMessage.GetSize()-1;i++)
{
a = a ^ arrayMessage.GetAt(i);
}

check1 = 0x30 + (a & 0xf);
check2 = 0x30 + (a>>4 & 0xf) ;

sRing.Format(/"L35&2 %s&&%c%c/",(char *)arrayMessage.GetData(),check2,check1);
4) 发送参数设置:该消息是以普通文本方式的消息下发,ftm=0,udhi=0,pid=0,如果Checksum不对,则该消息以文本方式显示在手机上,否则显示为铃声。

二. SIEMENS图片(适用于其支持的各种大小的图片)
1) 测试环境:手机型号--3118;网关--亚信
2) 制作过程:首先选择一张101X29的单色BMP图做为源文件,文件名为1.BMP。通过程序的处理源文件被拆成4条连续的消息以二进制的形式存放在文件1.PIC中,发送时依次取出来发送即可。第一条和第四条消息的十六进制内容如下:
第一条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 01 00 04 00 8E 01 00 00
03 62 6D 70 05 31 2E 62 6D 70 42 4D 8E 01 00 00 00 00 00 00
3E 00 00 00 28 00 00 00 48 00 00 00 1C 00 00 00 01 00 01 00
00 00 00 00 50 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00
02 00 00 00 FF FF FF 00 00 00 00 00 C0 3F 00 00 00 10 EB 00
00 00 00 00 E0 3F 00 FC 00 21 DB 00 00 00 00 00 E0 3E 03 03
00 71 F3 00 00 00 00 00 E0 3E 04 00 80 0D FE 00 00 00 00 00
…….
第四条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 04 00 04 00 8E 01 00 00
03 62 6D 70 05 31 2E 62 6D 70 0E 18 00 DB E0 00 00 00 0F E7
FF FC 1C 10 00 71 C0 00 00 00 07 FF BE 00 3C 70 00 00 00 00
00 00 07 EF FC 00 DF E0 00 00 00 00 00 00 05 EC FF 00 FB C0
00 00 00 00 00 00 02 66 DF 00 BF 30 00 00 00 00 00 00
3) 算法:其图片格式如下:
<Identifier><Version><DataSize><ReferenceID><ActPacketNumber><NumberOfPackets><ObjectSize> <ObjectType><ObjectName><Data>
-----------------------------------------------------------------------------
Identifier:标识。5字节。设为”//SEO”(注意大小写)
Version:版本号。1字节。设为1
DataSize:数据大小。2字节。每个包里可图片数据的大小,对于同一图片的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
ReferenceID:序列号。4字节。可自行设定,对同一图片的不同包的该值相同
ActPacketNumber:当前包是第几包。2字节。从1开始计数
NumberOfPackets:总包数。2字节。
ObjectSize:图片的大小。4字节。
ObjectType:类型为图片。4字节。第一字节为长度,因为类型为”bmp”所以第一字节为3,第二至第四字节为”bmp”
ObjectName:图片的名称,包括扩展名。长度不定。第一个字节为长度。如图片为1.bmp,则ObjectName的长度为6,第一个字节为5。第二至六个字节为”1.bmp”
Data:图片数据。从图片文件中拆分出来的数据。
部分算法:
CString sToFile(_T(/".//1.pic/")), sFile(_T(/".//1.bmp/"));
CStdioFile fFromFile, fToFile(sToFile, CFile::modeCreate | CFile::modeReadWrite |CFile::typeBinary);;
char sMessage[256], sRead[8000];
int nFileLen=0;
//头信息
char identifier[5] = {'/','/','S','E','O'};
BYTE version = 1;
short datasize;
int referenzID = 1500 ,len=0;
short actnumber = 0;
short packnumber;
char objectsize[4];
char objecttype[4] = {0x3,'b','m','p'};
char objectname[20];
char data[200];

memset(sMessage,0,sizeof(sMessage));
memset(sRead,0,sizeof(sRead));
memset(objectsize,0,4);

len = sFile.GetLength();
CFileException e;
if(!fFromFile.Open(sFile,CFile::modeRead | CFile::typeBinary,&e))
exit(1);
nFileLen = fFromFile.GetLength();
if(fFromFile.Read(sRead, nFileLen)>0)
{
memcpy(objectsize,sRead+2,2);
objectname[0] = len;
memcpy(objectname+1,sFile, len);
datasize = 140 - 25 - len;
int nSize, nLast;
memcpy(&nSize, objectsize, 4);
nLast = nSize%datasize;
if(nLast)
packnumber = nSize/datasize + 1;
else
packnumber = nSize/datasize;
actnumber = 0;

//设置头信息
memcpy(sMessage, identifier, 5);
memcpy(sMessage+5, &version, 1);
memcpy(sMessage+6, &datasize, 2);
memcpy(sMessage+8, &referenzID, 4);
memcpy(sMessage+14, &packnumber, 2);
memcpy(sMessage+16, objectsize, 4);
memcpy(sMessage+20, objecttype, 4);
memcpy(sMessage+24, objectname, len +1);

for(int i=1; i<=packnumber; i++)
{
actnumber ++;
memcpy(sMessage+12, &actnumber, 2);

if(!nLast || i<packnumber)
{
memcpy(sMessage+25+len,sRead+(i-1)*datasize, datasize);
fToFile.Write(sMessage, 140);
}
else if(i == packnumber)
{
memcpy(sMessage+25+len,sRead+(i-1)*datasize, nLast);
fToFile.Write(sMessage, 25+len+nLast);
}
}
}

fFromFile.Close();
fToFile.Close();

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。
5) 其它说明:在对DataSize说明时,作者提到了当最后一包中实际数据内容不足时要补”0”,这种做法已经网友实验过是可行的,但在我的算法中,我并没有补0,实际发送也成功收到,这点有兴趣的朋友可以两种都试试。另外,对于图片文件名不要取得过长,否则会占用消息的长度,拆出更多的包。

三. SIEMENS铃声
1) 测试环境:手机型号--3118;网关--亚信
2) 制作过程:首先选一首”甜蜜蜜.mid”做为源文件。通过程序的处理源文件被拆成8条连续的消息以二进制的形式存放在文件1.rng中,发送时依次取出来发送即可。第一条和第八条消息的十六进制内容如下:
第一条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 01 00 08 00 F8 02 00 00
03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 4D 54 68 64 00
00 00 06 00 01 00 02 00 78 4D 54 72 6B 00 00 00 19 00 FF 58
04 04 02 18 08 00 FF 59 02 00 00 00 FF 51 03 09 27 C0 00 FF
2F 00 4D 54 72 6B 00 00 02 41 00 FF 21 01 00 00 FF 03 0E C5
4B AE B1 B5 4C BC C4 AD B7 B6 A1 A4 AF 00 90 4C 64 78 4C 00
00 4F 64 3C 4F 00 00 51 64 3C 51 00 00 4C 64 81 34 4C 00 00
…….
第八条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 08 00 08 00 F8 02 00 00
03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 3C 80 4F 64 00
90 51 64 3C 80 51 64 00 90 4F 64 81 34 80 4F 64 00 FF 2F 00
3) 铃声格式如下:(同图片格式)
<Identifier><Version><DataSize><ReferenceID><ActPacketNumber><NumberOfPackets><ObjectSize> <ObjectType><ObjectName><Data>
------------------------------------------------------------------------------
Identifier:标识。5字节。设为”//SEO”(注意大小写)
Version:版本号。1字节。设为1
DataSize:数据大小。2字节。每个包里可mid数据的大小,对于同一mid的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
ReferenceID:序列号。4字节。可自行设定,对同一首mid的不同包的该值相同
ActPacketNumber:当前包是第几包。2字节。从1开始计数
NumberOfPackets:总包数。2字节。
ObjectSize:mid的大小。4字节。
ObjectType:类型为mid。4字节。第一字节为长度,因为类型为”mid”所以第一字节为3,第二至第四字节为”mid”
ObjectName:mid的名称,包括扩展名。长度不定。第一个字节为长度。如歌曲为”甜蜜蜜.mid”,则ObjectName的长度为10,第一个字节为10。第二至十个字节为” 甜蜜蜜.mid”
Data:mid数据。从mid文件中拆分出来的数据。

部分算法同图片的处理,将其中sToFile(_T(/"甜蜜蜜.mid/")), sFile(_T(/".//1.rng”)); char objecttype[4] = {0x3,'m','i','d'};做相应修改即可。

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。
5) 其它说明:所使用的mid文件要是单音轨的,文件长度可长可短,但最好用工具处理到450至700字节之间,否则造成数据拆包过多,对消息的可靠传送及计费带来不便。

")); </script> 手机铃声和图片的详细设计说明

这篇文档将前些日子自己测试的过程写下来供大家参考,可能现在这些东西许多人已经不再做了,但为了那些还在为这些东西摸索的朋友提供方便我还是写出来,但因为时间和资料的原因,所涉及到的还不是很全,希望知道更多细节的朋友们能与我分享你们在这方面的经验与知识。我将尽可能详细地写出它们制作的过程,包括测试用的手机型号,使用的工具,相关的算法,SP发送参数的设置等。

一. MOTOROLA普通铃声
1) 测试环境:手机型号--A388、T191;工具--NOK2PHONE;网关--亚信
2) 制作过程:以”999朵玫瑰”为例,首先用NOK2PHONE打开相应的MIDI文件,在NOK2PHONE的输出框中产生MOTOROLA普通铃声所需的字串,如” 2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”,根据算法计算出真正所需发送的铃声,内容是” L35&2 2F2E2C2D4R2A-1G-1F-2G-2C2A-6A-4C2A-2G-6D1D1C2D2E2&&27”,通过SP程序将该字串做为普通的文本消息发送至手机,手机上显示收到铃声。
3) 算法:MOTOROLA的铃声格式如下:
<Header><Tempo Value><Musical Data><Delimiter><Checksum>
-----------------------------------------------------------------------------------------
Header:L35&
Tempo Value:由1或2或3或4加空格构成,缺省为2,如”2 “
Musical Data:将NOK2PHONE中产生的字串去掉空格即可
Delimiter:&&
Checksum:对Musical Data进行的校验和,两个字节。方法为对Musical Data中的数据从前往后对每个字符进行异或运算,运算的结果假设其十六进制的表示为XY,那Checksum的第一个字节的十六进制形式为3Y,第二个字节的十六进制形式为3X。

部分算法:
BYTE a = 0, check1, check2;
CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing;

sRead.Replace(" ","");
arrayMessage.SetSize(sRead.GetLength() + 1);
strcpy((char *)arrayMessage.GetData(), sRead);
for(int i=0;i<arrayMessage.GetSize()-1;i++)
{
a = a ^ arrayMessage.GetAt(i);
}

check1 = 0x30 + (a & 0xf);
check2 = 0x30 + (a>>4 & 0xf) ;

sRing.Format("L35&2 %s&&%c%c",(char *)arrayMessage.GetData(),check2,check1);
4) 发送参数设置:该消息是以普通文本方式的消息下发,ftm=0,udhi=0,pid=0,如果Checksum不对,则该消息以文本方式显示在手机上,否则显示为铃声。

二. SIEMENS图片(适用于其支持的各种大小的图片)
1) 测试环境:手机型号--3118;网关--亚信
2) 制作过程:首先选择一张101X29的单色BMP图做为源文件,文件名为1.BMP。通过程序的处理源文件被拆成4条连续的消息以二进制的形式存放在文件1.PIC中,发送时依次取出来发送即可。第一条和第四条消息的十六进制内容如下:
第一条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 01 00 04 00 8E 01 00 00
03 62 6D 70 05 31 2E 62 6D 70 42 4D 8E 01 00 00 00 00 00 00
3E 00 00 00 28 00 00 00 48 00 00 00 1C 00 00 00 01 00 01 00
00 00 00 00 50 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00
02 00 00 00 FF FF FF 00 00 00 00 00 C0 3F 00 00 00 10 EB 00
00 00 00 00 E0 3F 00 FC 00 21 DB 00 00 00 00 00 E0 3E 03 03
00 71 F3 00 00 00 00 00 E0 3E 04 00 80 0D FE 00 00 00 00 00
…….
第四条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 04 00 04 00 8E 01 00 00
03 62 6D 70 05 31 2E 62 6D 70 0E 18 00 DB E0 00 00 00 0F E7
FF FC 1C 10 00 71 C0 00 00 00 07 FF BE 00 3C 70 00 00 00 00
00 00 07 EF FC 00 DF E0 00 00 00 00 00 00 05 EC FF 00 FB C0
00 00 00 00 00 00 02 66 DF 00 BF 30 00 00 00 00 00 00
3) 算法:其图片格式如下:
<Identifier><Version><DataSize><ReferenceID><ActPacketNumber><NumberOfPackets><ObjectSize> <ObjectType><ObjectName><Data>
-----------------------------------------------------------------------------
Identifier:标识。5字节。设为”//SEO”(注意大小写)
Version:版本号。1字节。设为1
DataSize:数据大小。2字节。每个包里可图片数据的大小,对于同一图片的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
ReferenceID:序列号。4字节。可自行设定,对同一图片的不同包的该值相同
ActPacketNumber:当前包是第几包。2字节。从1开始计数
NumberOfPackets:总包数。2字节。
ObjectSize:图片的大小。4字节。
ObjectType:类型为图片。4字节。第一字节为长度,因为类型为”bmp”所以第一字节为3,第二至第四字节为”bmp”
ObjectName:图片的名称,包括扩展名。长度不定。第一个字节为长度。如图片为1.bmp,则ObjectName的长度为6,第一个字节为5。第二至六个字节为”1.bmp”
Data:图片数据。从图片文件中拆分出来的数据。
部分算法:
CString sToFile(_T(".//1.pic")), sFile(_T(".//1.bmp"));
CStdioFile fFromFile, fToFile(sToFile, CFile::modeCreate | CFile::modeReadWrite |CFile::typeBinary);;
char sMessage[256], sRead[8000];
int nFileLen=0;
//头信息
char identifier[5] = {'/','/','S','E','O'};
BYTE version = 1;
short datasize;
int referenzID = 1500 ,len=0;
short actnumber = 0;
short packnumber;
char objectsize[4];
char objecttype[4] = {0x3,'b','m','p'};
char objectname[20];
char data[200];

memset(sMessage,0,sizeof(sMessage));
memset(sRead,0,sizeof(sRead));
memset(objectsize,0,4);

len = sFile.GetLength();
CFileException e;
if(!fFromFile.Open(sFile,CFile::modeRead | CFile::typeBinary,&e))
exit(1);
nFileLen = fFromFile.GetLength();
if(fFromFile.Read(sRead, nFileLen)>0)
{
memcpy(objectsize,sRead+2,2);
objectname[0] = len;
memcpy(objectname+1,sFile, len);
datasize = 140 - 25 - len;
int nSize, nLast;
memcpy(&nSize, objectsize, 4);
nLast = nSize%datasize;
if(nLast)
packnumber = nSize/datasize + 1;
else
packnumber = nSize/datasize;
actnumber = 0;

//设置头信息
memcpy(sMessage, identifier, 5);
memcpy(sMessage+5, &version, 1);
memcpy(sMessage+6, &datasize, 2);
memcpy(sMessage+8, &referenzID, 4);
memcpy(sMessage+14, &packnumber, 2);
memcpy(sMessage+16, objectsize, 4);
memcpy(sMessage+20, objecttype, 4);
memcpy(sMessage+24, objectname, len +1);

for(int i=1; i<=packnumber; i++)
{
actnumber ++;
memcpy(sMessage+12, &actnumber, 2);

if(!nLast || i<packnumber)
{
memcpy(sMessage+25+len,sRead+(i-1)*datasize, datasize);
fToFile.Write(sMessage, 140);
}
else if(i == packnumber)
{
memcpy(sMessage+25+len,sRead+(i-1)*datasize, nLast);
fToFile.Write(sMessage, 25+len+nLast);
}
}
}

fFromFile.Close();
fToFile.Close();

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。
5) 其它说明:在对DataSize说明时,作者提到了当最后一包中实际数据内容不足时要补”0”,这种做法已经网友实验过是可行的,但在我的算法中,我并没有补0,实际发送也成功收到,这点有兴趣的朋友可以两种都试试。另外,对于图片文件名不要取得过长,否则会占用消息的长度,拆出更多的包。

三. SIEMENS铃声
1) 测试环境:手机型号--3118;网关--亚信
2) 制作过程:首先选一首”甜蜜蜜.mid”做为源文件。通过程序的处理源文件被拆成8条连续的消息以二进制的形式存放在文件1.rng中,发送时依次取出来发送即可。第一条和第八条消息的十六进制内容如下:
第一条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 01 00 08 00 F8 02 00 00
03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 4D 54 68 64 00
00 00 06 00 01 00 02 00 78 4D 54 72 6B 00 00 00 19 00 FF 58
04 04 02 18 08 00 FF 59 02 00 00 00 FF 51 03 09 27 C0 00 FF
2F 00 4D 54 72 6B 00 00 02 41 00 FF 21 01 00 00 FF 03 0E C5
4B AE B1 B5 4C BC C4 AD B7 B6 A1 A4 AF 00 90 4C 64 78 4C 00
00 4F 64 3C 4F 00 00 51 64 3C 51 00 00 4C 64 81 34 4C 00 00
…….
第八条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 08 00 08 00 F8 02 00 00
03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 3C 80 4F 64 00
90 51 64 3C 80 51 64 00 90 4F 64 81 34 80 4F 64 00 FF 2F 00
3) 铃声格式如下:(同图片格式)
<Identifier><Version><DataSize><ReferenceID><ActPacketNumber><NumberOfPackets><ObjectSize> <ObjectType><ObjectName><Data>
------------------------------------------------------------------------------
Identifier:标识。5字节。设为”//SEO”(注意大小写)
Version:版本号。1字节。设为1
DataSize:数据大小。2字节。每个包里可mid数据的大小,对于同一mid的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
ReferenceID:序列号。4字节。可自行设定,对同一首mid的不同包的该值相同
ActPacketNumber:当前包是第几包。2字节。从1开始计数
NumberOfPackets:总包数。2字节。
ObjectSize:mid的大小。4字节。
ObjectType:类型为mid。4字节。第一字节为长度,因为类型为”mid”所以第一字节为3,第二至第四字节为”mid”
ObjectName:mid的名称,包括扩展名。长度不定。第一个字节为长度。如歌曲为”甜蜜蜜.mid”,则ObjectName的长度为10,第一个字节为10。第二至十个字节为” 甜蜜蜜.mid”
Data:mid数据。从mid文件中拆分出来的数据。

部分算法同图片的处理,将其中sToFile(_T("甜蜜蜜.mid")), sFile(_T(".//1.rng”)); char objecttype[4] = {0x3,'m','i','d'};做相应修改即可。

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。
5) 其它说明:所使用的mid文件要是单音轨的,文件长度可长可短,但最好用工具处理到450至700字节之间,否则造成数据拆包过多,对消息的可靠传送及计费带来不便。

手机铃声和图片的详细设计说明相关推荐

  1. NOKIA、MOTOROLA、SIMENS及ERICCSON铃声和图片格式分析(转)

    NOKIA.MOTOROLA.SIMENS及ERICCSON铃声和图片格式分析 最近一直有些朋友们要求总结一下主流手机铃声和图片的问题,由于本人在这方面基本没有什么尝试,只能将有些朋友们发表过的东西总 ...

  2. 更改iPhone手机铃声详细教程(简单易学,无需付费软件)!

    用iPhone一两年了,一直是默认的手机铃声,听腻了不说,更是不方便.一听到电话铃声就以为是自己的手机,结果是旁边人的. 所以自己研究了一晚,终于搞定了iPhone手机铃声制作的流程,这里整理一下,方 ...

  3. qmc0文件怎么转换mp3_音频转换器哪个好 怎么剪切MP3音频制作手机铃声

    在生活中比较常见的音频格式就是MP3格式了,因为这种格式使用范围广泛,所以我们也会经常需要对其进行编辑,比如说设置手机铃声,大家都知道,手机的自带铃声很少,而且比较单一,如果想要自己制作铃声就需要一款 ...

  4. iphone手机铃声制作(iTunes)

    参考资料:iPhone手机铃声制作 注意: 如果无法正常同步到手机,是因为其中一个步骤, 显示简介–>详细信息里面的资料没有填满,除了 音轨 ,光盘编号 ,选集 ,BPM 可以不填之外,其他的全 ...

  5. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  6. 怎么让抖音视频当做铃声android,把抖音短视频做成手机铃声,原来这么简单!...

    原标题:把抖音短视频做成手机铃声,原来这么简单! "一日不抖,如隔三秋" 相信十个人里面 有九个都中了抖音的毒 刷起来完全控制不住自己 最近大火的抖音短视频炒火了不少民谣音乐人及一 ...

  7. 手机中的图片怎么压缩大小?

    手机中的图片怎么压缩大小?我们的手机中都会保存很多的图片,这些图片有些会很大,怎么将手机中的图片压缩变小呢,下面小编就给大家分享一个将手机中的图片压缩变小的简单方法. 第一种方法:在线压缩 1:(首先 ...

  8. python背景怎么自定义铃声_python爬取手机铃声

    相信每个人都会给自己的手机调一个好听的音乐作为铃声,但是对于iphone用户来说换铃声一般都会去找第三方平台来进行更换,众多平台当中不得不说的就是爱思手机助手,今天我将带你通过python爬虫来批量进 ...

  9. 解决 后台播放音乐时,设置手机铃声,后台音乐不会暂停

    2019独角兽企业重金招聘Python工程师标准>>> 手机后台播放音乐时,设置手机铃声,后台音乐不会暂停,此现象的为设置手机铃声界面,并没要加入播放的foucs机制, 此修改在pa ...

最新文章

  1. mysql seq 重置_需要在Oracle中重置序列的值
  2. MyBatis 缓存详解-cache 缓存
  3. “chaos“的算法--之双向链表
  4. 一个常见的物理现象,直今还是未解之谜!
  5. Ubuntu 9.10 升级到ext4
  6. jQuery中的渐变动画效果
  7. 计算机应用基础基础系统,计算机应用基础试题库系统分析
  8. ithoughts怎么自定义样式_微信小程序自定义导航栏组件封装
  9. CALLING PROCEDURES USING CALL AND RET
  10. 浅谈一下session问题
  11. SWT里Slider和Scale的区别
  12. codeblocks汉化包 可提取
  13. Kelihos荣升恶意软件之王
  14. Linux基本常用命令(大数据开发里也用的到)
  15. 学之思开源代码学习(1)
  16. qpython3.0.0_QPython脚本引擎
  17. The Shapely GEOS version (3.9.1-CAPI-1.14.2) is incompatible with the GEOS version PyGEOS was compil
  18. Mendix装备制造业应用 | 质量统计分析人工智能应用APP
  19. 计算机考证模拟运算表案例解析
  20. 土方工程量计算表格excel_土石方计算电子表格

热门文章

  1. 功能强大的截图软件——Snipaste
  2. 计算机装系统教程网,电脑重装系统教程知识
  3. 管理的本质是协调还是决策?看看孙权是怎么做到的。
  4. vue 引入json地图_在vue2.x中使用echarts,地图或者theme引入js 文件,会有问题,地图的json文件重新注册可以...
  5. CSS设置表格行列,给bootstrap table设置行列单元格样式
  6. 在KubeSphere中部署微服务(阡陌)+ DevOps
  7. 第五章:3ds max UV展开和BP贴图绘制(下)
  8. Matplotlib 绘图 笔记
  9. html页面转成PDF,PDF下载
  10. 校招----深信服测试笔经面经