c语言的MP3播放器_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > c语言的MP3播放器

c语言的MP3播放器

 2010/12/12 14:52:45  cmzx3444  http://cmzx3444.javaeye.com  我要评论(1)
  • 摘要:/**mp3.c**Createdon:2010-12-12*Author:thankyouxue*/#include<stdio.h>#include<time.h>#include<windows.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<mmsystem.h>#include<io.h>#include<
  • 标签:C语言 MP3播放器
/*
 * mp3.c
 *
 *  Created on: 2010-12-12
 *      Author: thankyouxue
 */

#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <mmsystem.h>
#include <io.h>
#include <tcconio.h>

int _chdir(const char *dirname);
int enter_path();
void Usage();
void Play();
void Stop();
void Pause();
void Resume();
void Speed();
void Position(); /* Prototipi na vsichki funkci */
void GetAllSong();
void StatSong();
void CloseSong();
void init();
void AutoP_List();
void p_NextList();
void p_PrevList();
void GetOldColor();
void GetSongLength();
void GetTotalTimeAllSong();
void GetTimeAddSong();
void GetTimeDelSong();
void write_data();
void Quit();

#define max_num 1000
const char file_path[128] = "path.txt";
char old_path[128];

char NextSong[max_num][128];
char ShortPathName[max_num][80];
char LongFileName[max_num][128]; /* Vsichki 2-merni i 3-merni masivi */
char CompareNames[max_num][128];
char p_List[15][10][128];
char p_file[15][10][128];

char Label[128]; /* vischki ednomerni masivi */
char UserName[128];
char speed[128];
char dirname[128];

int i, s, p;
int a, b, v;
int err;
int isPlay; /* Vsichki celochisleni promenlivi */
int Control;
int TotalSong;
int p_count;
int a_uto;
int m_null;
int num;
int MAX;
unsigned getlen;

int number[max_num];
int mm_time;

int stop_flash;
int m_normal_text;

int p_change;
int y[1000];
int x = 25;

int h2, m2, s2;

int main(void) {
	int ret;
	FILE *in;
	struct _finddata_t f;
	clrscr();

	DWORD nUserName = sizeof(UserName); /* Vzemane na user name */

	if (GetUserName(UserName, &nUserName) == 0) {
		printf("Failed to lookup user name, error code ", GetLastError());
	}

	clrscr();
	memset(dirname, '\0', sizeof(dirname));

	if ((ret = _findfirst("*.mp3", &f)) < 0) {

		for (;;) {
			GetCurrentDirectory(256, old_path);
			if ((in = fopen(file_path, "rb")) == NULL) {
				enter_path();
				break;
			}
			fread((void*) &dirname, sizeof(char), 128, in);
			fclose(in);
			break;
		}
	}

	GetAllSong(); /* Zarejdane na pesnite v masiva */
	init(); /* initializirane na play listata */

	FILE * p;

	if ((p = fopen("length.txt", "rb")) == NULL) {
		GetTotalTimeAllSong();
		goto label1;
	}

	if (p) {
		fscanf(p, "%d %d %d %d %d", &h2, &m2, &s2, &mm_time, &getlen);
		fclose(p);
	}

	if ((p = fopen("number.txt", "rb")) == NULL)
		goto label1;
	if (p) {
		for (int f = 0; f < mm_time; f++) {
			fread((void*) &number[f], sizeof(int), 1, p);
		}
		fclose(p);
	}

	if ((p = fopen("names.txt", "rb")) == NULL)
		goto label1;
	if (p) {

		for (int f = 0; f < TotalSong; f++) {
			fread((void*) &CompareNames[f], sizeof(char), 1024, p);
		}
		fclose(p);
	}

	if (TotalSong > mm_time)
		GetTimeAddSong();
	if (TotalSong < mm_time)
		GetTimeDelSong();

	label1:

	Play(); /* Prosfirvane na parvia file ot masiva s dani */
	Usage(); /* glavno menu za user */
	return 0;
}

int enter_path() {

	int i;
	int a1, b1;
	int ret;
	char str[128];
	char ch;
	FILE *out;

	clrscr();

	memset(str, '\0', sizeof(str));

	gotoxy(1, 25);
	printf("MP3 Pro v 2.0 copyright (C) 2002.Press Esc to exit.");
	gotoxy(1, 2);
	printf("Enter path to your mp3 song(s): ");

	i = 0;

	while (1) {

		ch = getch();
		if (ch == 27)
			return -1;
		if (ch == 13) {
			if (i == 0)
				continue;
			break;
		}

		if (ch == 8) {
			str[i] = '\0';
			i--;
			if (i < 0) {
				i = 0;
				continue;
			}
			clrscr();
			gotoxy(1, 25);
			printf("Mp3 Pro v 2.0 copyright (C) 2003.Press Esc to exit.");
			gotoxy(1, 2);
			printf("Enter path to your mp3 song(s): ");

			for (a1 = 0; a1 < i; a1++)
				printf("%c", str[a1]);
		}

		if (ch != 8 && ch != 13 && ch != 27 && ch != 9) {

			str[i] = ch;
			i++;
			if (i > 20) {
				i = 20;
				continue;
			}
			gotoxy(33, 2);
			for (b1 = 0; b1 < i; b1++)
				printf("%c", str[b1]);
		}

	}

	if ((ret = _chdir(str)) < 0) { /* Provarka za validen pat example d:\music\2003 */

		gotoxy(33, 15);
		printf("Path is not valid!");
		getch();
		return -1;
	}

	_chdir(old_path);

	strcpy(dirname, str);

	if ((out = fopen(file_path, "wb")) == NULL)
		exit(1); /* Zapisvame dirname v path.txt */
	fprintf(out, "%s", dirname);
	fclose(out);

	return 0;

}

void Usage() {
	char ch;
	int max_len = 0;
	int i;
	FILE *in;
	clrscr();
	textcolor(7);
	gotoxy(18, 1);
	printf("Mp3 Pro v 2.0 Programed by Nikolai Halachev BG.");
	gotoxy(18, 2);
	printf("Free MP3 player for windows (95,98)");

	gotoxy(1, 5);

	printf(" P = Play\n");
	printf(" S = Stop\n");
	printf(" W = Pause\n");
	printf(" X = Change Speed\n");
	printf(" C = Change Position\n");
	printf(" -> = Next Song\n");
	printf(" <- = Prev Song\n");
	printf(" L = Load Song(s)\n");
	printf(" Q = Quit");
	gotoxy(1, 20);
	printf(" TotalSong = %d", TotalSong);
	gotoxy(1, 15);
	printf(" Enter your choice: ");

	textcolor(12);
	gotoxy(39, 4);
	printf(" Play List");

	textcolor(7);

	if (TotalSong > 9) {

		textcolor(15);
		gotoxy(25, 15);
		printf("Press (+) to next Play List or (-) to prev Play List");
		textcolor(7);
	}

	max_len = TotalSong / 9;

	gotoxy(50, 4);
	printf("[%d]", p_count + 1);

	for (int q = 0; p_List[p_count][q][0]; q++) {
		y[q] = 5 + q;
		gotoxy(x, y[q]);
		clreol();
		printf("%d. %s", q + 1, p_List[p_count][q]);

	}

	while (1) {
		for (;;) {

			StatSong(); /* sledene sastoianieto na pesenta */
			GetSongLength();/*Vzimane na daljinata na pesenta */
			if (!isPlay) {

				if (p_count == max_len) {
					if (!strcmp(p_List[p_count][num + 1], "")) {

						p_count = -1;
						p_NextList();
						num = -1;
					}
				}
				if (a_uto) {

					AutoP_List();
					num = -1;
					a_uto = 0;
				}

				if (num == 8) {

					AutoP_List();
					num = -1;
				}
				GetOldColor();
				CloseSong();
				num++;
				Play();
			}

			textcolor(7);
			gotoxy(2, 21);
			printf("User Name: ");

			printf("%s", UserName);

			if (kbhit())
				break;

			sleep(100);

			if (Control) {

				gotoxy(1, 23);
				clreol();
				printf(" Stoped -> %s ", Label);
			}

			if (!Control) {
				gotoxy(1, 23);
				clreol();
				printf(" Playing -> %s ", Label);
			}
			gotoxy(55, 21);
			printf("Copyright (C) 2003");
		}

		ch = getch();

		int hot_key = 0;
		char *s_key;

		s_key = (char*) malloc(100);

		s_key[0] = ch;
		hot_key = atoi(s_key);

		if (p_count == max_len) {

			if (!strcmp(p_List[p_count][hot_key - 1], ""))
				goto label1;
		}

		if (hot_key > TotalSong)
			goto label1;

		if (hot_key) {

			if (hot_key == 9)
				a_uto = 1;

			if (hot_key < 9)
				a_uto = 0;

			num = hot_key - 1;
			CloseSong();
			Play();
			if (m_null)
				goto label1;
			GetOldColor();

		}

		label1: m_null = 0;

		Control = 0;

		if (tolower(ch) == 'p') {
			CloseSong();
			Play();
		}
		if (tolower(ch) == 's')
			Stop(); /* Izvikvane na funk Stop */
		if (tolower(ch) == 'w')
			Pause(); /* izvikvane na funk Pause */
		if (tolower(ch) == 'x')
			Speed(); /* Izvikvane na funk Speed */
		if (tolower(ch) == 'c')
			Position(); /* izvikvane na funk Position */

		if (tolower(ch) == 'l') { /* Zarejdane na nova diriktoria ot mp3-ki */

			_chdir(old_path);
			if ((i = enter_path()) < 0)
				Usage();

			_chdir(dirname);

			memset(NextSong, '\0', sizeof(NextSong));
			memset(CompareNames, '\0', sizeof(CompareNames));
			memset(ShortPathName, '\0', sizeof(ShortPathName));
			memset(LongFileName, '0', sizeof(LongFileName));
			memset(p_List, '\0', sizeof(p_List));
			memset(p_file, '\0', sizeof(p_file));
			p_count = 0;
			m_null = 0;
			mm_time = 0;

			GetAllSong();

			GetTotalTimeAllSong();
			init();
			_chdir(old_path);
			Play();
			Usage();
		}

		if (ch == '=')
			p_NextList(); /* Obhojdane na play listata napred */

		if (ch == '-')
			p_PrevList(); /* Obhojdane na play listata nazad */

		if (ch == 0x4d) {
			CloseSong();
			num++;
			int bc;
			for (bc = 0; p_List[p_count][bc][0]; bc++)
				;

			if (num > bc - 1) {
				p_NextList();
				p_change = 1;
				a_uto = 0;
				num = 0;
			}

			GetOldColor();
			isPlay = 0;
			Play();
		}

		if (ch == 0x4b) {
			CloseSong();
			num--;
			isPlay = 1;
			GetOldColor();
			Play();
		}

		if (tolower(ch) == 'q')
			Quit();
	}
}

void Play() {

	char FileName[128];
	_chdir(dirname);

	if (!isPlay) {

		strcpy(FileName, "open ");
		strcat(FileName, NextSong[num]);
		strcat(FileName, " alias song");
		strcpy(speed, "set song speed ");
		strcat(speed, "1000");
		strcpy(Label, p_List[p_count][num]);
	}

	if (isPlay) {

		if (num < 0)
			num = 0;
		strcpy(FileName, "open ");
		strcat(FileName, NextSong[num]);
		strcat(FileName, " alias song");
		strcpy(speed, "set song speed ");
		strcat(speed, "1000");
		strcpy(Label, p_List[p_count][num]);

	}

	err = mciSendString(FileName, 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	err = mciSendString(speed, 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	err = mciSendString("play song", 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	if (p_change) {

		strcpy(Label, p_List[p_count][0]);
		p_change = 0;
	}

	if (!strcmp(Label, ""))
		strcpy(Label, LongFileName[0]);

}

void Stop() {

	err = mciSendString("stop song", 0, 0, 0);
	Control = 1;
	if (err > 0) {
		perror("error");
		exit(1);
	}
}

void Pause() {

	char ch;
	err = mciSendString("pause song", 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	gotoxy(1, 23);
	clreol();
	printf(" Paused -> %s ", Label);

	while (1) {
		ch = getch();
		if (tolower(ch) == 'w') {
			gotoxy(1, 23);
			clreol();
			printf(" Playing -> %s ", Label);
			Resume();
			break;
		}

	}

}

void Resume() {
	err = mciSendString("resume song", 0, 0, 0);
	if (err > 0) {
		perror("error");
		exit(1);
	}
}

void Speed() {

	char Stat[20];
	char bit[128];
	char str[128];
	char ch;

	stop_flash = 1;

	memset(str, '\0', sizeof(str));

	clrscr();
	strcpy(bit, "set song speed ");
	gotoxy(1, 25);
	printf("MP3 Pro v 2.0 copyright (C) 2002.Press Esc to exit.");
	gotoxy(1, 2);
	printf("Change speed: ");

	i = 0;

	while (1) {
		for (;;) {
			mciSendString("status song mode", Stat, 128, 0);
			StatSong();
			if (!isPlay)
				Usage();

			if (kbhit())
				break;
		}

		ch = getch();

		if (ch == 27) {
			stop_flash = 0;
			Usage();
		}

		if (ch == 13) {
			if (i == 0)
				continue;
			break;
		}

		if (ch == 8) {
			str[i] = '\0';
			i--;
			if (i < 0) {
				i = 0;
				continue;
			}

			clrscr();
			gotoxy(1, 25);
			printf("MP3 Pro v 2.0 copyright (C) 2002.Press Esc to exit.");
			gotoxy(1, 2);
			printf("Change speed: ");

			for (a = 0; a < i; a++)
				printf("%c", str[a]);
		}

		if (ch != 8 && ch != 13 && ch != 27 && ch != 9) {

			str[i] = ch;
			i++;
			if (i > 3) {
				i = 3;
				continue;
			}
			gotoxy(15, 2);
			for (b = 0; b < i; b++)
				printf("%c", str[b]);
		}
	}

	if (i == 3)
		str[i] = '0';
	if (i == 2) {
		str[i + 1] = '\0';
		str[i] = '0';
	}
	strcat(bit, " ");
	strcat(bit, str);

	int song_length = atoi(str);

	song_length = song_length / 10;

	if (song_length > 200) {

		gotoxy(20, 10);
		printf("Speed is large maximum change of speed = 200");
		getch();
		Speed();
	}

	err = mciSendString(bit, 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	stop_flash = 0;
	Usage();

}

void Position() {

	char Stat[20];
	char ch;
	char change[128];
	char str[128];

	memset(str, '\0', sizeof(str));

	clrscr();
	stop_flash = 1;

	strcpy(change, "play song from ");
	gotoxy(1, 25);
	printf("MP3 Pro v 2.0 copyright (C) 2002.Press Esc to exit.");
	gotoxy(1, 2);
	printf("Enter value for position: ");

	i = 0;

	while (1) {

		for (;;) {
			err = mciSendString("status song mode", Stat, 128, 0);
			if (err > 0) {
				perror("error");
				exit(1);
			}
			StatSong();
			if (!isPlay)
				Usage();
			if (kbhit())
				break;
		}

		ch = getch();
		if (ch == 27) {
			stop_flash = 0;
			Usage();
		}
		if (ch == 13) {
			if (i == 0)
				continue;
			break;
		}

		if (ch == 8) {
			str[i] = '\0';
			i--;
			if (i < 0) {
				i = 0;
				continue;
			}
			clrscr();
			gotoxy(1, 25);
			printf("MP3 Pro v 2.0 copyright (C) 2002.Press Esc to exit.");
			gotoxy(1, 2);
			printf("Enter value for position: ");

			for (a = 0; a < i; a++)
				printf("%c", str[a]);
		}

		if (ch != 8 && ch != 13 && ch != 27 && ch != 9) {

			str[i] = ch;
			i++;
			if (i > 3) {
				i = 3;
				continue;
			}
			gotoxy(27, 2);
			for (b = 0; b < i; b++)
				printf("%c", str[b]);
		}

	}

	if (i == 2) {
		str[i] = '0';
		str[i + 1] = '0';
		str[i + 2] = '0';
	}

	if (i == 3) {
		str[i] = '0';
		str[i + 1] = '0';
		str[i + 2] = '0';
	}

	int i;

	int song_len = atoi(str);
	song_len = song_len / 1000;
	int count = p_count;
	if (count > 0) {
		count++;
		count = count * 9;
		count = count - 9;
	}

	i = count + num;

	if (song_len > number[i]) {

		gotoxy(20, 10);
		printf("Length is large.Maximum change oflength = %d", number[i]);
		getch();
		Position();

	}

	strcat(change, str);

	err = mciSendString(change, 0, 0, 0);

	if (err > 0) {
		perror("Error");
		exit(1);
	}

	stop_flash = 0;
	Usage();

}

void GetAllSong() {

	struct _finddata_t f;
	long int r;
	long int RetVal;
	int Len;
	char Name[128];
	FILE *out;

	memset(NextSong, '\0', sizeof(NextSong));
	memset(LongFileName, '\0', sizeof(LongFileName));

	clrscr();

	_chdir(dirname);

	r = _findfirst("*.mp3", &f);

	if (r < 0) {

		_chdir(old_path);
		if ((out = fopen(file_path, "rb")) == NULL) {
			gotoxy(20, 10);
			printf("Sorry no mp3 file(s) on this dirictory");
			gotoxy(20, 11);
			printf("Press eny key to continue");
			getch();
			exit(1);
		}

		gotoxy(20, 10);
		printf("-> %s Path is not valid", dirname);
		gotoxy(20, 11);
		printf("Press eny key to exit");
		getch();
		fclose(out);
		remove(file_path);
		exit(1);

	}

	while (1) {

		if (err < 0)
			break;
		sprintf(Name, "%s", f.name);
		strcpy(NextSong[num], Name);
		strcpy(LongFileName[num], NextSong[num]);
		err = _findnext(r, &f);

		Len = 255;
		RetVal = GetShortPathName(NextSong[num], ShortPathName[num], Len);
		if (RetVal < 0)
			exit(1);
		strcpy(NextSong[num], ShortPathName[num]);
		if (num > max_num) {
			clrscr();
			gotoxy(28, 10);
			printf("MAX 1000 mp3 files");
			getch();
			exit(1);
		}
		num++;

	}

	TotalSong = num;
	num = 0;

	_chdir(old_path);

}

void StatSong() {

	char Stat[20];
	err = mciSendString("status song mode", Stat, 128, 0);

	if (err > 0) {
		perror("error");
		exit(1);
	}

	if (!strcmp(p_List[p_count][num], "")) {
		m_null = 1;
		return;
	}

	if (!strcmp(Stat, "playing")) {
		isPlay = 1;

		if (stop_flash)
			return;

		int i;

		int count = p_count;

		if (count > 0) {

			count++;
			count = (count * 9) - 9;

		}

		i = count + num;

		if (!strcmp(Label, LongFileName[i])) {

			m_normal_text = num;

			textcolor(14); /* cviat za migane 14 = jalt*/

			gotoxy(x, y[num]);/* flash na play listata */
			clreol();
			sleep(150);
			gotoxy(x, y[num]);
			printf("%d. %s", num + 1, Label);
			sleep(150);

		}

		return;
	}
	isPlay = 0;

	if (Control)
		isPlay = 1;

}

void CloseSong() {

	err = mciSendString("close song ", 0, 0, 0);

	if (err > 0) {
		perror("error");
		exit(1);

	}

}

void init() {

	int ret;
	int d, g, z;

	z = 0;

	for (d = 0; NextSong[d][0]; d++) { /* Zarejdane na parvata play lista */

		if (z == 9) {
			p_count++;
			z = 0;

		}
		/* Skasiavane na golemite imena */
		for (int len = 0; NextSong[len][0]; len++) {

			ret = strlen(LongFileName[len]);

			if (ret >= 50) {

				for (g = 50; LongFileName[len][g]; g++)
					LongFileName[len][g] = '\0';
			}
			/* premahvane na mp3 natpisa ot file */
			for (int v = 0; v < ret; v++) {

				if (LongFileName[len][v] == '.') {
					for (int p = v; p < ret; p++)
						LongFileName[len][p] = '\0';
				}
			}
		}

		strcpy(p_List[p_count][z], LongFileName[d]);
		strcpy(p_file[p_count][z], NextSong[d]);
		z++;
	}

	MAX = p_count;
	p_count = 0;

}

void AutoP_List() {

	p_count++;

	for (int q = 0; p_List[p_count][q][0]; q++) {

		if (!strcmp(p_List[p_count][q + 1], "")) {

			for (int v = q; v < 9; v++) {

				y[v] = 5 + v;
				gotoxy(x, y[v]);
				clreol();
			}

		}

		y[q] = 5 + q;
		gotoxy(x, y[q]);
		clreol();
		textcolor(7);
		printf("%d. %s", q + 1, p_List[p_count][q]);
		strcpy(NextSong[q], p_file[p_count][q]);

	}

	gotoxy(50, 4);
	printf("[%d]", p_count + 1);
	m_normal_text = 0;

}

void p_NextList() {

	int q;

	if (p_count >= MAX) {
		stop_flash = 0;
		return;
	}

	for (int q = 0; p_List[p_count][q][0]; q++) {

		y[q] = 5 + q;
		gotoxy(x, y[q]);
		clreol();
	}

	p_count++;

	if (!p_count) {

		for (int q = 0; p_List[p_count][q][0]; q++) {

			y[q] = 5 + q;
			gotoxy(x, y[q]);
			clreol();
		}

	}

	for (q = 0; p_List[p_count][q][0]; q++) {

		y[q] = 5 + q;
		gotoxy(x, y[q]);

		printf("%d. %s", q + 1, p_List[p_count][q]);
		strcpy(NextSong[q], p_file[p_count][q]);
		strcpy(LongFileName[q], p_List[p_count][q]);

	}

	gotoxy(50, 4);
	printf("[%d]", p_count + 1);

}

void p_PrevList() {

	if (p_count <= 0)
		return;

	for (int q = 0; *p_List[p_count][q]; q++) {

		y[q] = 5 + q;
		gotoxy(x, y[q]);
		clreol();
	}

	p_count--;

	for (int t = 0; p_List[p_count][t][0]; t++) {

		y[t] = 5 + t;
		gotoxy(x, y[t]);

		printf("%d. %s", t + 1, p_List[p_count][t]);
		strcpy(NextSong[t], p_file[p_count][t]);
		strcpy(LongFileName[t], p_List[p_count][t]);

	}

	gotoxy(50, 4);
	printf("[%d]", p_count + 1);

}

void GetOldColor() {

	textcolor(7); /* return old color */

	gotoxy(x, y[m_normal_text]);
	printf("%d. %s", m_normal_text + 1, p_List[p_count][m_normal_text]);
	m_normal_text = 0;

}

void GetSongLength() {

	char lpszReturnString[128];
	char curr_time[128];
	int h, m, s;
	int h1, m1, s1;

	memset(lpszReturnString, '\0', sizeof(lpszReturnString));

	h = m = s = 0;
	h1 = m1 = s1 = 0;

	mciSendString("status song length", lpszReturnString, 128, 0);
	mciSendString("status song position", curr_time, 128, 0);

	if (lpszReturnString) { /* Get Total time */

		int len = atoi(lpszReturnString);
		len = len / 1000;

		for (int count = 0; count < len; count++) {

			if (s == 60) {
				s = 0;
				m++;
			}
			if (m == 60) {
				m = 0;
				h++;
			}

			s++;

		}

	}

	if (curr_time) { /* Get current time */

		int len1 = atoi(curr_time);
		len1 = len1 / 1000;

		for (int register count = 0; count < len1; count++) {

			if (s1 == 60) {
				s1 = 0;
				m1++;
			}
			if (m1 == 60) {
				m1 = 0;
				h1++;
			}

			s1++;

		}

	}

	textcolor(7);

	gotoxy(25, 19);
	printf("%s -> %02d:%02d:%02d", "Total Time", h2, m2, s2);

	gotoxy(25, 20);
	clreol();
	printf("%s = %02d:%02d", "Current Time", m1, s1);
	gotoxy(25, 21);
	printf("%s = %02d:%02d", "End Time", m, s);

	if (m >= 60) {
		gotoxy(25, 21);
		printf("%s %d:%d:%d", "End Time", h, m, s);
	}

}

void GetTotalTimeAllSong() {

	char TotalTime[128];
	char song[128];
	char FileName[128];
	unsigned int len;

	int h, m, s;

	h = m = s = 0;
	getlen = 0;

	memset(FileName, '\0', sizeof(FileName));
	memset(song, '\0', sizeof(song));
	memset(TotalTime, '\0', sizeof(TotalTime));

	for (int n = 0; n < MAX; n++)
		number[n] = 0;

	_chdir(dirname);

	gotoxy(25, 10);
	printf("Please wait... Load Songs");

	for (int start = 0; start < TotalSong; start++) {

		strcpy(song, "status ");
		strcat(song, NextSong[start]);
		strcat(song, " length");

		strcpy(FileName, "open ");
		strcat(FileName, NextSong[start]);
		strcat(FileName, " alias song");

		gotoxy(25, 14);
		clreol();
		printf("%s", LongFileName[start]);

		mciSendString(FileName, 0, 0, 0);

		mciSendString(song, TotalTime, 128, 0);

		len = atoi(TotalTime);
		len = len / 1000;
		number[start] = len;
		strcpy(CompareNames[start], LongFileName[start]);
		getlen = getlen + len;

		mciSendString("close song", 0, 0, 0);

		if (kbhit())
			exit(1);

	}

	for (int start = 0; start < getlen; start++) {

		if (s == 60) {
			s = 0;
			m++;
		}
		if (m == 60) {
			m = 0;
			h++;
		}

		if (h == 24)
			h = 0;

		s++;

	}

	h2 = h;
	m2 = m;
	s2 = s;

}

void GetTimeAddSong() {

	char lpszReturnString[128];
	char FileName[128];
	int count[1000];
	int i;
	unsigned len = 0;
	;
	int m_getlen = 0;
	int m_count;
	int put_name = 0;

	_chdir(dirname);

	gotoxy(25, 10);
	printf("Please wait... Load New Songs");

	m_count = 0;

	for (i = 0; i < TotalSong; i++) {

		for (int st = i; i < TotalSong; i++) {

			if (put_name)
				st = st - m_count;

			if (!strcmp(LongFileName[i], CompareNames[st]))
				break;

			strcpy(FileName, "open ");
			strcat(FileName, NextSong[i]);
			strcat(FileName, " alias song");

			mciSendString(FileName, 0, 0, 0);
			mciSendString("status song length", lpszReturnString, 128, 0);

			gotoxy(25, 14);
			clreol();
			printf("%s", LongFileName[i]);

			len = atoi(lpszReturnString);
			len = len / 1000;
			number[i] = len;
			m_getlen = m_getlen + len;

			mciSendString("close song", 0, 0, 0);
			m_count++;
			put_name = 1;
			break;

		}

	}

	for (int start = 0; start < m_getlen; start++) {

		if (s2 == 60) {
			s2 = 0;
			m2++;
		}
		if (m2 == 60) {
			m2 = 0;
			h2++;
		}

		if (h2 == 24)
			h2 = 0;

		s2++;

	}

}

void GetTimeDelSong() {

	char lpszReturnString[128];
	char FileName[128];
	char DeleteSongs[max_num][128];
	unsigned len = 0;
	;
	int newTime = 0;
	int m_count = 0;
	int g;
	int a, b = 0;
	int put_name = 0;

	_chdir(dirname);

	for (int i = 0; i < max_num; i++)
		DeleteSongs[i][0] = '\0';

	gotoxy(25, 10);
	printf("Please wait... Geting new time of songs");

	for (g = 0; g < mm_time; g++) {

		for (int st = g; TotalSong; st++) {

			if (put_name)
				st = st - m_count;

			if (!strcmp(CompareNames[g], LongFileName[st]))
				break;

			strcpy(DeleteSongs[m_count], CompareNames[g]);
			len = number[g];

			newTime = newTime + len;
			m_count++;
			put_name = 1;
			break;

		}

	}

	getlen = getlen - newTime;
	int h, m, s;

	h = m = s = 0;
	for (int start = 0; start < getlen; start++) {

		if (s == 60) {
			s = 0;
			m++;
		}
		if (m == 60) {
			m = 0;
			h++;
		}

		if (h == 24)
			h = 0;

		s++;

	}

	h2 = h;
	m2 = m;
	s2 = s;

	if (g <= 1) {
		strcpy(DeleteSongs[g], CompareNames[g]);
		printf("Cannot %s", DeleteSongs[g]);

	}

	clrscr();
	gotoxy(20, 10);
	printf("some mp3 file(s) missing on your dirictory");

	int a1, b1;

	a1 = 20;
	b1 = 11;

	for (int h = 0; h < m_count; h++) {

		gotoxy(a1, b1 + h);
		printf("%s", DeleteSongs[h]);

	}

	getch();

}

void write_data() {

	FILE * p;
	int i;

	_chdir(old_path);

	mm_time = TotalSong;

	if ((p = fopen("length.txt", "wb")) == NULL)
		exit(1);

	fprintf(p, "%d %d %d %d %d", h2, m2, s2, mm_time, getlen);

	fclose(p);

	clrscr();
	if ((p = fopen("number.txt", "wb")) == NULL)
		exit(1);

	for (int f = 0; f < TotalSong; f++) {

		fwrite((void*) &number[f], sizeof(int), 1, p);

	}

	fclose(p);

	num = 0;

	GetAllSong();

	init();

	if ((p = fopen("names.txt", "wb")) == NULL)
		exit(1);

	for (int f = 0; f < TotalSong; f++)
		fwrite((void*) &LongFileName[f], sizeof(char), 1024, p);

	fclose(p);
}

void Quit() {

	int x, y, z;
	char *about[128] = {
			"Programed by Nikolai Halachev BG E-mail:Jakomen@abv.bg",
			"This programe a freeware.Thank You,copyright (C) 2002" };

	clrscr();

	x = 15;
	y = 15;

	mciSendString("close song", 0, 0, 0);

	for (int i = 0; i < 2; i++) {
		for (z = 5; z < y; z++) {
			gotoxy(x, z);
			printf("%s", about[i]);
			gotoxy(x, z - 1);
			clreol();
			sleep(50);
		}
		y = 14;

	}
	write_data();

	sleep(500);
	exit(1);
}

上一篇: c和C++总结 下一篇: C# Socket网络编程学习
    网友 2012/6/26 10:35:04 发表

    tcconio.h文件是什么函数

发表评论
用户名: 匿名