播放器案例

package com.dodoke.player;

import java.util.Objects;

public class Song implements Comparable<Song>{
   private String id;
   private String name;
   private String singer;

    public Song() {
        super();
    }

    public Song(String id, String name, String singer) {
        super();
        this.id = id;
        this.name = name;
        this.singer = singer;
   }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSinger() {
        return singer;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    @Override
    public String toString() {
        return "歌曲信息:" +
                "歌曲编号" + id + '\'' +
                ", 歌曲名'" + name + '\'' +
                ", 演唱者'" + singer + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        //首先判断参数对象是否为null
        if(o == null){
            return false;
        }
        //判断当前对象和参数对象是否相同
        if(this == o){
            return true;
        }
        //判断当前对象和参数对象属性是否相同
        //首先判断当前对象和参数类型是否相同
        if(o.getClass() == Song.class) {
            //类型相同才去进行比较
            Song song = (Song)o;
            return (song.getId().equals(this.id)) && (song.getName().equals(this.name)) && (song.getSinger().equals(this.singer));
        }
        return false;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((singer == null) ? 0 : singer.hashCode());
        return result;
    }

    @Override
    public int compareTo(Song o) {
        String name1 =o.getName();
        int n =this.name.compareTo(name1);
        return n;
    }
}

package com.dodoke.player;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * 播放列表名称
 * 无论是主播放列表,还是其他次播放列表都要设置名称
 * 这个名称是播放列表的标识
 * */

public class PlayList {
    private String  playListName;
//  播放列表中保存的歌曲信息集合
    private List<Song> musicList = new ArrayList<Song>();

/**
 * 保证每个播放列表创建的时候,都要强制命名
 *
 * */
    public PlayList(String playListName) {
        super();
        this.playListName = playListName;
    }

    public String getPlayListName() {
        return playListName;
    }

    public void setPlayListName(String playListName) {
        this.playListName = playListName;
    }

    public List<Song> getMusicList() {
        return musicList;
    }

    public void setMusicList(List<Song> musicList) {
        this.musicList = musicList;
    }
    /**
     * 将歌曲添加到播放列表
     * song要添加的歌曲
     *
     * */
    public void addToPlayList(Song song){
        //要排除重复添加的情况
        boolean flag = false;
        //判断当前播放列表是否存在要添加的歌曲
        for(Song song1:musicList){
            if (song1.equals(song)){
                flag =true;
                break;
            }
        }
        if(flag){
            System.out.println("該歌曲已經存在當前列表中,添加失敗");
        }else{
            musicList.add(song);
        }
    }
    /**
     * 展示播放列表所有歌曲
     * */
    public void displayAllSong(){
        System.out.println("播放列表中所有歌曲為");
        for(Song song:musicList){
            System.out.println(song);
        }

    }
    /**
     * 通過歌曲編號查詢播放列表中的歌曲
     * ID 歌曲編號
     * @return 查找到的歌曲信息
     * */
    public Song searchSongById(String id){
        Song song = null;
       //假設歌曲編號是唯一的,每個歌曲的編號和其他歌曲都不同
        for(Song song1:musicList){
            String id1 =song1.getId();
            if (id1.equals(id)){
//                編號相同歌曲相同
                song =song1;
                break;
            }
        }
        return song;
    }
    /**
     * 通过歌曲名查询歌曲
     *  name要查询的歌曲名称
     * */
    public Song searchSongByName(String name){
        Song song = null;
        //假設歌曲編號是唯一的,每個歌曲的編號和其他歌曲都不同
        for(Song song1:musicList){
            String name1 =song1.getName();
            if (name1.equals(name)){
//                編號相同歌曲相同
                song =song1;
                break;
            }
        }
        return song;
    }
    /**
     * 修改播放列表中的歌曲信息
     * id 要修改的歌曲id
     *
     * */
    public void upadteSong(String id,Song song){
        Song song1 = searchSongById(id);
        if(song1 == null){
                System.out.println("没有找到歌曲编号为:"+id+"的歌曲信息!");
            }else{
                //先去掉原有的歌曲信息,然后将新的歌曲信息添加
                musicList.remove(song1);
                musicList.add(song);
                System.out.println("歌曲修改成功");
            }
        }
     /**
      * 删除播放列表中的指定歌曲信息
      * */
    public void deleteSong(String id){
        Song song =searchSongById(id);
        if (song == null){
            System.out.println("没有找到歌曲编号为"+id+"的歌曲信息");
        }else{
            musicList.remove(song);
                System.out.println("删除成功");
        }
    }
    /**
     * 對歌曲名進行排序
     * */
    public void sortBySongName(){
        Collections.sort(musicList);
    }
}

package com.dodoke.player;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 播放器类
 * 保证系统中只有一个播放器,设为单例模式
 */
public class Player {
	/**
	 * 播放器名称不可改变
	 */
	public static final String PLAYERNAME = "java-125专用播放器";
	/**
	 * 存放播放列表的集合
	 * key-播放列表名称
	 * value-播放列表
	 */
	Map<String,PlayList> map = new HashMap<String,PlayList>();

	/*public Player(){
		
	}*/
	private static Player player= new Player();
	
	public static Player getInstance() {
		return player;
	}
	private Player(){
		
	}
	public Map<String,PlayList> getMap(){
		return map;
	}
	public void setMap(Map<String,PlayList>map){
		this.map = map;
	}
	/**
	 * 在播放中新增播放列表集合新增播放列表对象
	 * @param pl 要新增的播放列表
	 */
	public void addPlayList(PlayList pl){
		map.put(pl.getPlayListName(),pl);
	}
	/**
	 * 删除播放列表
	 * @param pl
	 */
	public void deletePlayList(PlayList pl){
		map.remove(pl.getPlayListName());
		System.out.println("删除成功");
	}
	/**
	 * 根据播放列表名称查询播放列表
	 * @param playListName 播放列表名称
	 * @return 查询到的播放列表
	 */
	public PlayList searchPlayListByName(String playListName){
		PlayList pl = null;
		//找到map中所有key的信息集合
		Set<String> plKeySet = map.keySet();
		for(String s: plKeySet){
			if(s.equals(playListName)){
				pl = map.get(s);
				break;
			}
		}
	
		return pl;
		
	}
	/**
	 * 显示所有播放列表的名称
	 */
	public void displayListName() {
		Set<String> plKeySet = map.keySet();
		System.out.println("播放列表名称为:");
		for(String s : plKeySet) {
			System.out.println(s);
		}
	}
}		
	


package com.dodoke.player;



/**
 * 控制层-调用程序运行逻辑
 * @author
 *
 */
public class PlayListCollection{
	
	public static void main(String[] args) {
		PlayerSetvice play = new PlayerSetvice();
		play.player();
	}
}
   

package com.dodoke.player;
public class Test {
	public static void main(String[] args) {
		Test test = new Test();
		test.testSong();
	}
	/**
	 * 歌曲类测试
	 */
	public void testSong(){
		Song song1 = new Song("s001","两只老虎1","儿童合唱团1");
		Song song2 = new Song("s002","两只老虎2","儿童合唱团2");
		Song song3 = new Song("s003","两只老虎3","儿童合唱团3");
		Song song4 = new Song("s001","两只老虎1","儿童合唱团1");
		System.out.println(song2.toString());
		System.out.println(song1.equals(song3));
		System.out.println(song1.equals(song4));
	}
/*
	/**
	 * 测试播放列表类
	 */
	public void testPlayList(){
		Song song1 = new Song("s001","两只老虎1","儿童合唱团1");
		Song song2 = new Song("s002","两只老虎2","儿童合唱团2");
		Song song3 = new Song("s003","两只老虎3","儿童合唱团3");
		Song song4 = new Song("s001","两只老虎1","儿童合唱团1");
		PlayList pl = new PlayList("主播放列表");
		pl.addToPlayList(song1);
		pl.addToPlayList(song2);
		pl.addToPlayList(song3);
		pl.addToPlayList(song4);
		pl.displayAllSong();
		System.out.println("s003");
		System.out.println("突然的自我");
	}
	public void testPlay(){
		Player p1 = Player.getInstance();
		Player p2 = Player.getInstance();
		System.out.println(p1 == p2);
		Song song1 = new Song("s001","两只老虎1","儿童合唱团1");
		Song song2 = new Song("s002","两只老虎2","儿童合唱团2");
		Song song3 = new Song("s003","两只老虎3","儿童合唱团3");
	    PlayList pl = new PlayList("主播放列表");
	    PlayList pl2 = new PlayList("流行音乐");
	    p1.addPlayList(pl);
	    p1.addPlayList(pl2);
	    pl2.addToPlayList(song1);
	    pl.displayAllSong();
		
	}
}



package com.dodoke.player;

import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

/**
 * 描述程序运行逻辑
 * @author 
 *
 */
public class PlayerSetvice {
	
	/**
	 * 主菜单
	 */
	public void mainMenu() {
		System.out.println("******************************************************");
		System.out.println("                     **主菜单**                         ");
		System.out.println("                     1--播放列表管理                         ");
		System.out.println("                     2--播放器管理                        ");
		System.out.println("                     0--退出                         ");
		System.out.println("*****************************************************");
	}
	
	/**
	 * 播放列表管理菜单
	 */
	public void playListMenu() {
		System.out.println("*****************************************************");
		System.out.println("                     **播放列表管理菜单**                         ");
		System.out.println("                     1--将歌曲添加到主播放列表                        ");
		System.out.println("                     2--将歌曲添加到普通播列表                        ");
		System.out.println("                     3--通过歌曲id查询到播放列表中的歌曲                         ");
		System.out.println("                     4--通过歌曲名称查询播放列表中的歌曲                        ");
		System.out.println("                     5--修改播放列表中的歌曲                        ");
		System.out.println("                     6--删除播放列表中的歌曲                         ");
		System.out.println("                     7--显示播放列表的所有歌曲                         ");
		System.out.println("                     9--返回上一级菜单                         ");
		System.out.println("*****************************************************");
	}
	
	/**
	 * 播放器菜单
	 */
	public void playerMenu() {
		System.out.println("*****************************************************");
		System.out.println("                     **播放器管理菜单**                         ");
		System.out.println("                     1--向播放器添加播放列表                        ");
		System.out.println("                     2--从播放器删除播放列表                        ");
		System.out.println("                     3--通过名字查询播放列表信息                         ");
		System.out.println("                     4--显示所有播放列表名称                       ");
		System.out.println("                     9--返回上一级菜单                         ");
		System.out.println("*****************************************************");
	}
	
	/**
	 * 执行程序逻辑规划
	 */
	public void player() {
		PlayerSetvice plService = new PlayerSetvice();
		Scanner sc = new Scanner(System.in);
		int input = 0, input1 = 0, input2 = 0;
		//创建唯一的播放列表容器(播放器)
		Player player = Player.getInstance();
		//创建一个播放器自带的主播放列表
		PlayList mPlayList = new PlayList("主播放列表");
		//将主播放列表添加到播放器
		player.addPlayList(mPlayList);
		//预先设置一个普通播放列表的变量名
		PlayList pList = null;
		while(true) {
			plService.mainMenu();
			System.out.println("请输入对应的数字进行操作:");
			input = sc.nextInt();//不再进行异常的处理
			if(input == 0) {
				System.out.println("退出程序!");
				break;
			}
			//针对用户在主菜单输入的数字进行判断处理
			switch(input) {
				case 1: {
					//播放列表管理
					while(true) {
						plService.playListMenu();
						System.out.println("请输入对应的数字进行播放列表管理操作:");
						input1 = sc.nextInt();
						if(input1 == 9) {
							break;
						}
						switch(input1) {
							case 1: {
								System.out.println("将歌曲添加到主播放列表!");
								System.out.println("请输入要添加的歌曲数量:");
								int count = sc.nextInt();
								for(int i = 1; i <= count; i++) {
									System.out.println("请输入第" + i + "首歌曲");
									System.out.println("请输入歌曲id");
									String id = sc.next();
									System.out.println("请输入歌曲名称");
									String name = sc.next();
									System.out.println("请输入歌曲演唱者");
									String singer = sc.next();
									Song song = new Song(id, name, singer);
									mPlayList.addToPlayList(song);
								}
								System.out.println("歌曲添加完毕!");
								break;
							}
							case 2: {
								System.out.println("将歌曲添加到普通播放列表!");
								System.out.println("请输入要添加的播放列表名称:");
								String playListName = sc.next();
								//判断播放列表是否在播放器中存在
								pList = player.searchPlayListByName(playListName);
								if(pList == null) {
									System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
								} else {
									System.out.println("请输入要添加的歌曲数量:");
									int count = sc.nextInt();
									for(int i = 1; i <= count; i++) {
										System.out.println("请输入第" + i + "首歌曲");
										System.out.println("请输入歌曲id");
										//去主播放列表查询歌曲
										String id = sc.next();
										Song songs = mPlayList.searchSongById(id);
										if(songs == null) {
											//如果不存在则让用户继续填写歌曲信息,并将歌曲同时添加到主播放列表和普通播放列表(普通播放列表是主播放列表的子集)
											System.out.println("该歌曲在主播放列表不存在,继续输入歌曲的其他信息!");
											System.out.println("请输入歌曲名称");
											String name = sc.next();
											System.out.println("请输入歌曲演唱者");
											String singer = sc.next();
											Song song = new Song(id, name, singer);
											pList.addToPlayList(song);
											mPlayList.addToPlayList(song);
										} else {
											//如果存在主播放列表,则直接将歌曲信息添加到普通播放列表
											pList.addToPlayList(songs);
											System.out.println("主播放列表中已有该歌曲,已将其添加到名为:" + playListName + "的歌单中!");
										}
									}
									System.out.println("歌曲添加完毕!");
								}
								break;
							}
							case 3: {
								System.out.println("通过歌曲id查询到播放列表中的歌曲");
								System.out.println("请输入要查询的播放列表名称:");
								String playListName = sc.next();
								//判断播放列表是否在播放器中存在
								pList = player.searchPlayListByName(playListName);
								if(pList == null) {
									System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
								} else {
									System.out.println("请输入要查询的歌曲id:");
									String id = sc.next();
									Song song = pList.searchSongById(id);
									if(song == null) {
										System.out.println("该歌曲在播放列表" + playListName + "中不存在!");
									} else {
										System.out.println("歌曲信息为:");
										System.out.println(song);
									}
								}
								break;
							}
							case 4: {
								System.out.println("通过歌曲名称查询播放列表中的歌曲");
								System.out.println("请输入要查询的播放列表名称:");
								String playListName = sc.next();
								pList = player.searchPlayListByName(playListName);
								if(pList==null) {
									System.out.println("该播放列表不存在");
									break;
								}else {
									System.out.println("请输入要歌曲的名称:");
									String name=sc.next();
									Song song=pList.searchSongByName(name);
									if(song==null) {
										System.out.println("该歌曲在播放列表: "+playListName+"中不存在");
										break;
									}else {
										System.out.println("该歌曲在播放列表: "+playListName+"存在");
										System.out.println("歌曲的信息为:");
										System.out.println(song);
									}
								}
								break;
							}
							case 5: {
								System.out.println("修改播放列表中的歌曲");
								System.out.println("请输入要修改的歌曲");								
								String name = sc.next();
								Song song=pList.searchSongByName(name);
								if(song==null) {
									System.out.println("该歌曲不存在");
									break;
								}else {										
									System.out.println("请输入要修改的歌曲id");
									String id = sc.next();
									Song song1=pList.searchSongById(id);
									//判断该歌曲在播放列表中是否存在,存在才能修改									
									if(id==null) {
										System.out.println("要修改的歌曲id不存在:");
										break;
									}else {
										System.out.println("请输入修改之后的歌曲名称:");
										String singer = sc.next();
										System.out.println("请输入修改之后的歌曲演奏者:");																				
										Song song2=new Song(id,singer,name);
										pList.updateSong(id, song2);
										System.out.println("修改之后的歌曲信息为:");
										System.out.println(song2);
									}
								}
								break;
								}
							case 6: {
								System.out.println("删除播放列表中的歌曲");
								System.out.println("请输入要删除的歌曲");
								String name = sc.next();
								Song song=pList.searchSongByName(name);
								if(song==null) {
									System.out.println("该歌曲不存在");
								}else {
									System.out.println("该歌曲存在");
									System.out.println("请输入要删除的歌曲ID");
									String id=sc.next();
									//查询该歌曲是否存在
									Song song1=pList.searchSongById(id);
									if(song1==null) {
										System.out.println("要删除的歌曲不存在");
										break;
									}else {
										pList.deleSong(id);
										System.out.println("该歌曲已经删除");
									}
								}
								String playListName = sc.next();
								PlayList plst = player.searchPlayListByName(playListName);
								if(playListName.equals("主播放列表")) {
									System.out.println("抱歉!主播放列表不能删除!");
									break;
								}
								//查询要删除的播放列表是否存在
								PlayList pList1 = player.searchPlayListByName(playListName);
								if(pList1 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									player.deletePlayList(pList1);
								}
								break;

							}
							case 7: {
								System.out.println("显示播放列表的所有歌曲");
								System.out.println("请输入要查询的播放列表");
								String playListName = sc.next();
								PlayList plst = player.searchPlayListByName(playListName);
								if(plst == null) {
									System.out.println("抱歉,您输入的列表名称没有匹配!");
								} else {
									System.out.println("该播放列表:"+plst.getPlayListName()+"的全部歌曲为");
									plst.displayAllSong();
								}
								break;
							}
							default: {
								System.out.println("该数字没有对应的操作");
								break;
							}
						}
					}
					break;//对于死循环明确终止以后,才可以写,否则认为是无用代码
				}
				case 2: {
					//播放器管理
					while(true) {
						plService.playerMenu();
						System.out.println("请输入对应的数字进行播放器管理操作:");
						input2 = sc.nextInt();
						if(input2 == 9) {
							break;
						}
						switch(input2) {
							case 1: {
								System.out.println("向播放器添加播放列表!");
								System.out.println("请输入要添加的播放列表名称");
								String playName = sc.next();
								if(playName.equals("主播放列表")) {
									System.out.println("主播放列表无需创建!");
								} else {
									pList = new PlayList(playName);
									//将创建好的播放列表对象添加到播放器中
									player.addPlayList(pList);
									System.out.println("播放列表创建完毕!");
								}
								break;
							}
							case 2: {
								System.out.println("从播放器删除播放列表!");
								System.out.println("请输入要删除的播放列表名称:");
								String playListName = sc.next();
								if(playListName.equals("主播放列表")) {
									System.out.println("抱歉!主播放列表不能删除!");
									break;
								}
								//查询要删除的播放列表是否存在
								PlayList pList1 = player.searchPlayListByName(playListName);
								if(pList1 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									player.deletePlayList(pList1);
								}
								break;
							}
							case 3: {
								System.out.println("通过名字查询播放列表信息!");
								System.out.println("请输入要查询的播放列表名称:");
								String playListName = sc.next();
								PlayList pList2 = player.searchPlayListByName(playListName);
								if(pList2 == null) {
									System.out.println("该播放列表不存在!");
								} else {
									System.out.println("已查询到该播放列表");
									System.out.println("该播放列表名称为:" + playListName);
									pList2.displayAllSong();
								}
								break;
							}
							case 4: {
								System.out.println("显示所有列表名称!");
								System.out.println("所有播放列表的名称为:");
								player.displayListName();
								break;
							}
							default: {
								System.out.println("该数字没有对应的操作");
								break;
							}
						}
					}
					break;
				}
				default: {
					System.out.println("该数字没有对应的操作");
					break;
				}
			}
		}
		
	}

}



抱歉,我是AI语言模型,无法编写实际的远程控制播放器案例。不过,我可以提供一些思路和代码示例,希望能够帮到你。 思路: 1. 使用Python的socket模块建立服务器和客户端之间的通信。 2. 在服务器端编写一个函数,用于接收客户端发送的指令,并根据指令控制本地播放器的播放、暂停、停止、下一首等操作。 3. 在客户端编写一个函数,用于向服务器端发送指令,例如播放、暂停、停止、下一首等。 4. 在客户端编写一个GUI界面,用于显示当前播放的歌曲信息,并提供控制按钮,例如播放、暂停、停止、下一首。 5. 在服务器端编写一个循环,不断等待客户端的指令。 代码示例: 下面是一个简单的代码示例,用于控制Windows Media Player的播放和暂停。该代码可以在Windows系统下运行。 服务器端代码: ```python import socket import subprocess def execute_command(command): # 执行命令 subprocess.call(command) def handle_client(client_socket): # 接收客户端发送的指令并执行 command = client_socket.recv(1024).decode() if command == 'play': execute_command(['wmplayer.exe', 'D:\\music\\song.mp3']) elif command == 'pause': execute_command(['wmplayer.exe', '/play', '/pause']) def main(): # 创建服务器套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8888)) server_socket.listen(5) print('Waiting for connection...') while True: # 等待客户端连接 client_socket, client_address = server_socket.accept() print('Connected by', client_address) # 处理客户端发送的指令 handle_client(client_socket) # 关闭客户端套接字 client_socket.close() if __name__ == '__main__': main() ``` 客户端代码: ```python import socket def send_command(command): # 向服务器发送指令 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 8888)) client_socket.sendall(command.encode()) client_socket.close() def main(): # 发送指令 send_command('play') send_command('pause') if __name__ == '__main__': main() ``` GUI界面代码: ```python import tkinter as tk from functools import partial import socket def send_command(command): # 向服务器发送指令 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 8888)) client_socket.sendall(command.encode()) client_socket.close() def play(): send_command('play') def pause(): send_command('pause') root = tk.Tk() root.title('Remote Player') root.geometry('200x100') label = tk.Label(root, text='Song Name') label.pack() play_button = tk.Button(root, text='Play', command=play) play_button.pack(side='left') pause_button = tk.Button(root, text='Pause', command=pause) pause_button.pack(side='right') root.mainloop() ``` 注意:该代码只是一个简单的示例,仅用于演示远程控制播放器的基本思路和代码实现方式。在实际应用中,需要根据具体的需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值