在这指出我的小作品的一些不足之处,交流一下,多多指教,希望能得到解决。
#include "stdafx.h"#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
HANDLE hConsole;
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(hConsole, coord);
}
int N;//N为歌曲数目
int j1=1,j2=1,j3=1,j4=1,j5=1,j6=1,j7=1;
void ma1(int n);
void ma2(int n);
void ma3(int n);
void ma4(int n);
void ma5(int n);
void ma6(int n);
void ma7(int n);
void main()
{
system("title 歌曲融合器");
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, 0x000a);
gotoxy(36,0);
printf("使用说明");
SetConsoleTextAttribute(hConsole, 0x000c);
gotoxy(4,2);
printf("本程序可以实现多首歌曲的融合。融合歌曲的顺序和播放顺序一致,而且歌曲音调会有所变化。融合后的歌曲播放时间的显示可能有问题,但并不会对您的使用产生影响。融合的歌曲未进行重命名之前最好都是MP3格式,否则播放时会出现不可预知的错误。");
SetConsoleTextAttribute(hConsole, 0x000a);
gotoxy(4,7);
printf("首先您需要对想要实现融合的歌曲分别从001开始顺序命名。注意,命名时不需要添加扩展名(如.mp3)。融合后的文件需要您自己添加扩展名,当然也可以不添加扩展名,那样的话就不能自动被播放器识别,您就要自己选择打开方式打开。如果要实现三合一,那么就把三首歌分别命名为001、002、003即可。注意,想要进行融合的歌曲需要和本程序置于同一文件夹才有效!而且,融合后的歌曲文件将会在本程序所在的文件夹出现。");
gotoxy(4,13);
printf("然后请输入您所要进行融合的歌曲的数目,按回车键即可。如果您暂时还不想使用本程序,可以单击右上角的关闭按钮退出。\n");
X: {scanf("%d",&N);
if(N==1)
{
fopen("复件","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
}
if(N==2)
{
fopen("2合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
}
if(N==3)
{
fopen("3合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
for(i=0;i<200;i++)
{
ma3(i);
if(j3==0)
break;
}
}
if(N==4)
{
fopen("4合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
for(i=0;i<200;i++)
{
ma3(i);
if(j3==0)
break;
}
for(i=0;i<200;i++)
{
ma4(i);
if(j4==0)
break;
}
}
if(N==5)
{
fopen("5合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
for(i=0;i<200;i++)
{
ma3(i);
if(j3==0)
break;
}
for(i=0;i<200;i++)
{
ma4(i);
if(j4==0)
break;
}
for(i=0;i<200;i++)
{
ma5(i);
if(j5==0)
break;
}
}
if(N==6)
{
fopen("6合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
for(i=0;i<200;i++)
{
ma3(i);
if(j3==0)
break;
}
for(i=0;i<200;i++)
{
ma4(i);
if(j4==0)
break;
}
for(i=0;i<200;i++)
{
ma5(i);
if(j5==0)
break;
}
for(i=0;i<200;i++)
{
ma6(i);
if(j6==0)
break;
}
}
if(N==7)
{
fopen("7合1","wb+");
int i;
for(i=0;i<200;i++)
{
ma1(i);
if(j1==0)
break;
}
for(i=0;i<200;i++)
{
ma2(i);
if(j2==0)
break;
}
for(i=0;i<200;i++)
{
ma3(i);
if(j3==0)
break;
}
for(i=0;i<200;i++)
{
ma4(i);
if(j4==0)
break;
}
for(i=0;i<200;i++)
{
ma5(i);
if(j5==0)
break;
}
for(i=0;i<200;i++)
{
ma6(i);
if(j6==0)
break;
}
for(i=0;i<200;i++)
{
ma7(i);
if(j7==0)
break;
}
}
if(N>7)
{
SetConsoleTextAttribute(hConsole, 0x000d);
gotoxy(4,16);
printf("对不起,由于考虑到很少有人会对7首歌以上的歌曲进行融合,所以本程序至多只支持7首歌曲的融合。由此给您造成的不便,本人深感抱歉。");
gotoxy(4,18);
printf("请重新输入您所要进行融合的歌曲数目。\n");
goto X;
}
}
}
void ma1(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("001","rb");
if(N==1)
{
fp2=fopen("复件","rb+");
}
else if(N==2)
{
fp2=fopen("2合1","rb+");
}
else if(N==3)
{
fp2=fopen("3合1","rb+");
}
else if(N==4)
{
fp2=fopen("4合1","rb+");
}
else if(N==5)
{
fp2=fopen("5合1","rb+");
}
else if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j1=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma2(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("002","rb");
if(N==2)
{
fp2=fopen("2合1","rb+");
}
else if(N==3)
{
fp2=fopen("3合1","rb+");
}
else if(N==4)
{
fp2=fopen("4合1","rb+");
}
else if(N==5)
{
fp2=fopen("5合1","rb+");
}
else if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j2=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma3(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("003","rb");
if(N==3)
{
fp2=fopen("3合1","rb+");
}
else if(N==4)
{
fp2=fopen("4合1","rb+");
}
else if(N==5)
{
fp2=fopen("5合1","rb+");
}
else if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j3=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma4(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("004","rb");
if(N==4)
{
fp2=fopen("4合1","rb+");
}
else if(N==5)
{
fp2=fopen("5合1","rb+");
}
else if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j4=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma5(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("005","rb");
if(N==5)
{
fp2=fopen("5合1","rb+");
}
else if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j5=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma6(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("006","rb");
if(N==6)
{
fp2=fopen("6合1","rb+");
}
else if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j6=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
void ma7(int n)
{
FILE *fp1,*fp2;
long i;
char a[1000000];
fp1=fopen("007","rb");
if(N==7)
{
fp2=fopen("7合1","rb+");
}
fseek(fp1,1000000*n,0);
fseek(fp2,0,2);
for(i=0;i<1000000;i++)
{
fread(&a[i],1,1,fp1);
if(!feof(fp1))
fwrite(&a[i],1,1,fp2);
else
{
j7=0;
break;
}
}
fclose(fp1);
fclose(fp2);
}
我的这个只能实现把完整歌曲连接在一起,但是我想要制作可以把任意多个喜欢的歌曲部分片段进行融合。还望大家多多指教。
[ 本帖最后由 观弈寒儒 于 2011-1-10 10:46 编辑 ]