⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileinfo.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 2 页
字号:
				   filename_entry, TRUE, TRUE, 0);				hbox = gtk_hbox_new(FALSE, 10);		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);				left_vbox = gtk_vbox_new(FALSE, 10);		gtk_box_pack_start(GTK_BOX(hbox), left_vbox, FALSE, FALSE, 0);		id3_frame = gtk_frame_new(_("ID3 Tag:"));		gtk_box_pack_start(GTK_BOX(left_vbox), id3_frame,				   FALSE, FALSE, 0);		table = gtk_table_new(5, 5, FALSE);		gtk_container_set_border_width(GTK_CONTAINER(table), 5);		gtk_container_add(GTK_CONTAINER(id3_frame), table);		label = gtk_label_new(_("Title:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,				 GTK_FILL, GTK_FILL, 5, 5);		title_entry = gtk_entry_new_with_max_length(30);		gtk_table_attach(GTK_TABLE(table), title_entry, 1, 4, 0, 1,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Artist:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,				 GTK_FILL, GTK_FILL, 5, 5);		artist_entry = gtk_entry_new_with_max_length(30);		gtk_table_attach(GTK_TABLE(table), artist_entry, 1, 4, 1, 2,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Album:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,				 GTK_FILL, GTK_FILL, 5, 5);		album_entry = gtk_entry_new_with_max_length(30);		gtk_table_attach(GTK_TABLE(table), album_entry, 1, 4, 2, 3,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Comment:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,				 GTK_FILL, GTK_FILL, 5, 5);		comment_entry = gtk_entry_new_with_max_length(30);		gtk_table_attach(GTK_TABLE(table), comment_entry, 1, 4, 3, 4,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Year:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5,				 GTK_FILL, GTK_FILL, 5, 5);		year_entry = gtk_entry_new_with_max_length(4);		gtk_widget_set_usize(year_entry, 40, -1);		gtk_table_attach(GTK_TABLE(table), year_entry, 1, 2, 4, 5,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Track number:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 2, 3, 4, 5,				 GTK_FILL, GTK_FILL, 5, 5);		tracknum_entry = gtk_entry_new_with_max_length(3);		gtk_widget_set_usize(tracknum_entry, 40, -1);		gtk_table_attach(GTK_TABLE(table), tracknum_entry, 3, 4, 4, 5,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		label = gtk_label_new(_("Genre:"));		gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);		gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6,				 GTK_FILL, GTK_FILL, 5, 5);		genre_combo = gtk_combo_new();		gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(genre_combo)->entry),				       FALSE);		if (!genre_list)		{			struct genre_item *item;			for (i = 0; i < GENRE_MAX; i++)			{				item = g_malloc(sizeof (*item));				item->name = gettext(mpg123_id3_genres[i]);				item->id = i;				genre_list = g_list_prepend(genre_list, item);			}			item = g_malloc(sizeof (*item));			item->name = "";			item->id = 0xff;			genre_list = g_list_prepend(genre_list, item);			genre_list = g_list_sort(genre_list, genre_comp_func);		}		genre_set_popdown(genre_combo, genre_list);		gtk_signal_connect(GTK_OBJECT(GTK_COMBO(genre_combo)->list),				   "select-child", genre_selected, NULL);		gtk_table_attach(GTK_TABLE(table), genre_combo, 1, 4, 5, 6,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK,				 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5);		bbox = gtk_hbutton_box_new();		gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox),					  GTK_BUTTONBOX_END);		gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);		gtk_box_pack_start(GTK_BOX(left_vbox), bbox, FALSE, FALSE, 0);		save = gtk_button_new_with_label(_("Save"));		gtk_signal_connect(GTK_OBJECT(save), "clicked", save_cb, NULL);		GTK_WIDGET_SET_FLAGS(save, GTK_CAN_DEFAULT);		gtk_box_pack_start(GTK_BOX(bbox), save, TRUE, TRUE, 0);		gtk_widget_grab_default(save);		remove_id3 = gtk_button_new_with_label(_("Remove ID3"));		gtk_signal_connect(GTK_OBJECT(remove_id3), "clicked",				   remove_id3_cb, NULL);		GTK_WIDGET_SET_FLAGS(remove_id3, GTK_CAN_DEFAULT);		gtk_box_pack_start(GTK_BOX(bbox), remove_id3, TRUE, TRUE, 0);		cancel = gtk_button_new_with_label(_("Cancel"));		gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked",					  gtk_widget_destroy, GTK_OBJECT(window));		GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);		gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);		mpeg_frame = gtk_frame_new(_("MPEG Info:"));		gtk_box_pack_start(GTK_BOX(hbox), mpeg_frame, FALSE, FALSE, 0);		mpeg_box = gtk_vbox_new(FALSE, 5);		gtk_container_add(GTK_CONTAINER(mpeg_frame), mpeg_box);		gtk_container_set_border_width(GTK_CONTAINER(mpeg_box), 10);		gtk_box_set_spacing(GTK_BOX(mpeg_box), 0);		mpeg_level = gtk_label_new("");		gtk_widget_set_usize(mpeg_level, 120, -2);		gtk_misc_set_alignment(GTK_MISC(mpeg_level), 0, 0);		gtk_box_pack_start(GTK_BOX(mpeg_box), mpeg_level, FALSE, FALSE, 0);		mpeg_bitrate = gtk_label_new("");		gtk_misc_set_alignment(GTK_MISC(mpeg_bitrate), 0, 0);		gtk_label_set_justify(GTK_LABEL(mpeg_bitrate),				      GTK_JUSTIFY_LEFT);		gtk_box_pack_start(GTK_BOX(mpeg_box),				   mpeg_bitrate, FALSE, FALSE, 0);		mpeg_samplerate = gtk_label_new("");		gtk_misc_set_alignment(GTK_MISC(mpeg_samplerate), 0, 0);		gtk_box_pack_start(GTK_BOX(mpeg_box), mpeg_samplerate,				   FALSE, FALSE, 0);		mpeg_flags = gtk_label_new("");		gtk_misc_set_alignment(GTK_MISC(mpeg_flags), 0, 0);		gtk_label_set_justify(GTK_LABEL(mpeg_flags), GTK_JUSTIFY_LEFT);		gtk_box_pack_start(GTK_BOX(mpeg_box), mpeg_flags,				   FALSE, FALSE, 0);		mpeg_fileinfo = gtk_label_new("");		gtk_misc_set_alignment(GTK_MISC(mpeg_fileinfo), 0, 0);		gtk_label_set_justify(GTK_LABEL(mpeg_fileinfo),				      GTK_JUSTIFY_LEFT);		gtk_box_pack_start(GTK_BOX(mpeg_box), mpeg_fileinfo,				   FALSE, FALSE, 0);		gtk_widget_show_all(window);	}	if (current_filename)		g_free(current_filename);	current_filename = g_strdup(filename);	title = g_strdup_printf(_("File Info - %s"), g_basename(filename));	gtk_window_set_title(GTK_WINDOW(window), title);	g_free(title);	gtk_entry_set_text(GTK_ENTRY(filename_entry), filename);	gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1);	title = g_strdup(g_basename(filename));	if ((tmp = strrchr(title, '.')) != NULL)		*tmp = '\0';	gtk_entry_set_text(GTK_ENTRY(title_entry), title);	g_free(title);	gtk_entry_set_text(GTK_ENTRY(artist_entry), "");	gtk_entry_set_text(GTK_ENTRY(album_entry), "");	gtk_entry_set_text(GTK_ENTRY(year_entry), "");	gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");	gtk_entry_set_text(GTK_ENTRY(comment_entry), "");	gtk_list_select_item(GTK_LIST(GTK_COMBO(genre_combo)->list),			     genre_find_index(genre_list, 0xff));	gtk_label_set_text(GTK_LABEL(mpeg_level), "MPEG ?, layer ?");	gtk_label_set_text(GTK_LABEL(mpeg_bitrate), "");	gtk_label_set_text(GTK_LABEL(mpeg_samplerate), "");	gtk_label_set_text(GTK_LABEL(mpeg_flags), "");	gtk_label_set_text(GTK_LABEL(mpeg_fileinfo), "");	if (!strncasecmp(filename, "http://", 7))	{		file_info_http(filename);		return;	}	gtk_widget_set_sensitive(id3_frame, TRUE);	if ((fh = fopen(current_filename, "rb")) != NULL)	{		guint32 head;		unsigned char tmp[4];		struct frame frm;		gboolean id3_found = FALSE;		fseek(fh, -sizeof (tag), SEEK_END);		if (fread(&tag, 1, sizeof (tag), fh) == sizeof (tag))		{			if (!strncmp(tag.tag, "TAG", 3))			{				id3_found = TRUE;				set_entry_tag(GTK_ENTRY(title_entry),					      tag.title, 30);				set_entry_tag(GTK_ENTRY(artist_entry),					      tag.artist, 30);				set_entry_tag(GTK_ENTRY(album_entry),					      tag.album, 30);				set_entry_tag(GTK_ENTRY(year_entry),					      tag.year, 4);				/* Check for v1.1 tags */				if (tag.u.v1_1.__zero == 0)				{					char *temp = g_strdup_printf("%d", tag.u.v1_1.track_number);					set_entry_tag(GTK_ENTRY(comment_entry),						      tag.u.v1_1.comment, 28);					gtk_entry_set_text(GTK_ENTRY(tracknum_entry), temp);					g_free(temp);				}				else				{					set_entry_tag(GTK_ENTRY(comment_entry),						      tag.u.v1_0.comment, 30);					gtk_entry_set_text(GTK_ENTRY(tracknum_entry), "");				}								gtk_list_select_item(GTK_LIST(GTK_COMBO(genre_combo)->list), genre_find_index(genre_list, tag.genre));			}		}		rewind(fh);		if (fread(tmp, 1, 4, fh) != 4)		{			fclose(fh);			return;		}		head = ((guint32) tmp[0] << 24) | ((guint32) tmp[1] << 16) | ((guint32) tmp[2] << 8) | (guint32) tmp[3];		while (!mpg123_head_check(head))		{			head <<= 8;			if (fread(tmp, 1, 1, fh) != 1)			{				fclose(fh);				return;			}			head |= tmp[0];		}		if (mpg123_decode_header(&frm, head))		{			guint8 *buf;			double tpf;			int pos;			xing_header_t xing_header;			guint32 num_frames;			buf = g_malloc(frm.framesize + 4);			fseek(fh, -4, SEEK_CUR);			fread(buf, 1, frm.framesize + 4, fh);			tpf = mpg123_compute_tpf(&frm);			set_mpeg_level_label(frm.mpeg25, frm.lsf, frm.lay);			pos = ftell(fh);			fseek(fh, 0, SEEK_END);			if (mpg123_get_xing_header(&xing_header, buf))			{				num_frames = xing_header.frames;				label_set_text(mpeg_bitrate, _("Bitrate: Variable,\navg. bitrate: %d kb/s"), (int)((xing_header.bytes * 8) / (tpf * xing_header.frames * 1000)));			}			else			{				num_frames = ((ftell(fh) - pos - (id3_found ? 128 : 0)) / mpg123_compute_bpf(&frm)) + 1;				label_set_text(mpeg_bitrate, _("Bitrate: %d kb/s"), tabsel_123[frm.lsf][frm.lay - 1][frm.bitrate_index]);			}			label_set_text(mpeg_samplerate, _("Samplerate: %d Hz"),				       mpg123_freqs[frm.sampling_frequency]);			label_set_text(mpeg_flags, _("%s\nError protection: %s\nCopyright: %s\nOriginal: %s\nEmphasis: %s"), channel_mode_name(frm.mode), bool_label[frm.error_protection], bool_label[frm.copyright], bool_label[frm.original], emphasis[frm.emphasis]);			label_set_text(mpeg_fileinfo, _("%d frames\nFilesize: %lu B"), num_frames, ftell(fh));			g_free(buf);		}		fclose(fh);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -