用C语言完成音乐播放器

    技术2025-07-06  12

    //声明开始 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <gtk/gtk.h> #include <string.h> #include "sungtk_interface.h" #include "sungtk_interface.c" GtkWidget * window; GtkWidget * window2; //声明结束 //定义变量 int i=0; int a=0; //char mute=0; char *buf[4]={"loadfile ./music/coffe.mp3\n","loadfile ./music/cunzai.mp3\n","loadfile ./music/爱上你很快乐.mp3\n","loadfile ./music/邓紫棋-泡沫.mp3\n"}; //下一曲函数 void next_song(GtkButton*button,gpointer user_data) { i++; if (i>3) { i=0; } int fd = open("fifo_cmd",O_RDWR); write(fd,buf[i],strlen(buf[i])); } //上一曲函数 void up_song(GtkButton*button,gpointer user_data) { i--; if (i<0) { i=3; } int fd = open("fifo_cmd",O_RDWR); write(fd,buf[i],strlen(buf[i])); } //静音函数 void jingyin (GtkButton*button,gpointer user_data) { int fd=open("fifo_cmd",O_RDWR);//打开管道 a++; if (a%2==0)//用a除二取余 { write(fd,"mute 1\n",sizeof("mute 1\n")-1); } else { write(fd,"mute 0\n",sizeof("mute 0\n")-1); } } //另一种静音的方法 { if (mute=0) { printf("播放状态:播放\n"); } else { printf("播放状态:暂停\n"); } int fd = open("fifo_cmd",O_RDWR); write(fd,"mute\n",sizeof("mute")); } //暂停的函数 void back_pause(GtkButton*button,gpointer user_data) { printf("==============\n"); int fd = open("fifo_cmd",O_RDWR); write(fd,"pause\n",sizeof("pause")); } void kill_back(GtkButton*button,gpointer user_data) { pid_t a=getpid(); //获得进程号 char cmd[20]=""; //定义一个空间存放进程号 sprintf(cmd,"kill %d",a+1);//组包函数 system(cmd); } void load_image(GtkWidget *image, const char *file_path, const int w, const int h ) { gtk_image_clear(GTK_IMAGE(image)); // 清除图像 GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(file_path, NULL); // 创建图片资源 GdkPixbuf *dest_pixbuf=gdk_pixbuf_scale_simple(src_pixbuf,w,h,GDK_INTERP_BILINEAR); // 指定大小 gtk_image_set_from_pixbuf(GTK_IMAGE(image), dest_pixbuf); // 图片控件重新设置一张图片(pixbuf) g_object_unref(src_pixbuf); // 释放资源 g_object_unref(dest_pixbuf); // 释放资源 } void set_label_font_size(GtkWidget *label, int size) { PangoFontDescription *font; // 字体指针 font = pango_font_description_from_string("");//参数为字体名字,任意即可 // #define PANGO_SCALE 1024 pango_font_description_set_size(font, size*PANGO_SCALE);// 设置字体大小 gtk_widget_modify_font(label, font); // 改变 label 的字体大小 pango_font_description_free(font); // 释放字体指针分配的空间 } void one(GtkWidget *label, gpointer user_data) { gtk_widget_hide_all(window); gtk_widget_show_all(window2); } void fh(GtkWidget *label, gpointer user_data) { gtk_widget_hide_all(window2); gtk_widget_show_all(window); } //主函数 int main(int argc, char *argv[]) { pid_t pid;//定义进程号 mkfifo("fifo_cmd",0777);//创建有名管道 pid=fork();在这里插入代码片 if (pid<0) { perror("fork"); } else if (pid==0) { execlp("mplayer","mplayer","-slave","-idle","-input","file=fifo_cmd","./music/coffe.mp3",NULL); } else { while(1) { gtk_init(&argc ,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window,600,400); GtkWidget * fixed = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window),fixed); g_signal_connect(window,"destroy",G_CALLBACK(kill_back),NULL);//点x杀死进程 GtkWidget * image=gtk_image_new_from_pixbuf(NULL); load_image(image,"6.jpg",600,400); gtk_fixed_put(GTK_FIXED(fixed),image,0,0); GtkWidget * image01=gtk_image_new_from_pixbuf(NULL);//添加按钮图片 load_image(image01,"1.jpg",49,50); //添加按钮图片 GtkWidget * image02=gtk_image_new_from_pixbuf(NULL); load_image(image02,"2.jpg",49,50); GtkWidget * image03=gtk_image_new_from_pixbuf(NULL); load_image(image03,"3.jpg",49,50); GtkWidget * image04=gtk_image_new_from_pixbuf(NULL); load_image(image04,"4.jpg",49,50); GtkWidget * image05=gtk_image_new_from_pixbuf(NULL); load_image(image05,"5.jpg",145,120); GtkWidget * image07=gtk_image_new_from_pixbuf(NULL); load_image(image07,"5.jpg",145,120); GtkWidget * button01 = gtk_button_new(); gtk_widget_set_size_request(button01,60,60);//按钮大小 gtk_button_set_image(GTK_BUTTON(button01),image01);//给按钮加图片 gtk_fixed_put(GTK_FIXED(fixed),button01,100,300);//按钮位置 gtk_button_set_relief(GTK_BUTTON(button01), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed),button01); g_signal_connect(button01,"pressed",G_CALLBACK(up_song),NULL);//给按钮设置回调函数 GtkWidget * button02 = gtk_button_new(); gtk_widget_set_size_request(button02,60,60); gtk_button_set_image(GTK_BUTTON(button02),image02); gtk_fixed_put(GTK_FIXED(fixed),button02,200,300); gtk_button_set_relief(GTK_BUTTON(button02), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed),button02); g_signal_connect(button02,"pressed",G_CALLBACK(back_pause),NULL); GtkWidget * button03 = gtk_button_new(); gtk_widget_set_size_request(button03,60,60); gtk_button_set_image(GTK_BUTTON(button03),image03); gtk_fixed_put(GTK_FIXED(fixed),button03,300,300); gtk_button_set_relief(GTK_BUTTON(button03), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed),button03); g_signal_connect(button03,"pressed",G_CALLBACK(next_song),NULL); GtkWidget * button04 = gtk_button_new(); gtk_widget_set_size_request(button04,60,60); gtk_button_set_image(GTK_BUTTON(button04),image04); gtk_fixed_put(GTK_FIXED(fixed),button04,400,300); gtk_button_set_relief(GTK_BUTTON(button04), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed),button04); g_signal_connect(button04,"pressed",G_CALLBACK(jingyin),NULL); GtkWidget * button05 = gtk_button_new(); gtk_widget_set_size_request(button05,150,120); gtk_button_set_image(GTK_BUTTON(button05),image05); gtk_fixed_put(GTK_FIXED(fixed),button05,200,180); gtk_button_set_relief(GTK_BUTTON(button05), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed),button05); g_signal_connect(button05,"pressed",G_CALLBACK(one),NULL); GtkWidget * label=gtk_label_new("哆啦A梦播放器"); gtk_fixed_put(GTK_FIXED(fixed),label,150,100); set_label_font_size(label,25); sungtk_widget_set_font_color(label,"blue",0); window2=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window2,600,400); GtkWidget * fixed2 = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window2),fixed2); GtkWidget * image06=gtk_image_new_from_pixbuf(NULL); load_image(image06,"7.jpg",600,400); gtk_fixed_put(GTK_FIXED(fixed2),image06,0,0); g_signal_connect(window2,"destroy",G_CALLBACK(kill_back),NULL);//点x杀死进程 GtkWidget * button06 = gtk_button_new(); gtk_widget_set_size_request(button06,150,120); gtk_button_set_image(GTK_BUTTON(button06),image07); gtk_fixed_put(GTK_FIXED(fixed2),button06,200,180); gtk_button_set_relief(GTK_BUTTON(button06), GTK_RELIEF_NONE);//把按钮设置为透明 gtk_container_add(GTK_CONTAINER(fixed2),button06); g_signal_connect(button06,"pressed",G_CALLBACK(fh),NULL); gtk_widget_show_all(window); gtk_main(); } } return 0; }
    Processed: 0.010, SQL: 9