Báo cáo lập trình java phần mềm nghe nhạc có source code

30 657 2
Báo cáo lập trình java phần mềm nghe nhạc có source code

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Các chức năng + Phát, dừng và skip bài hát. + Quản lí bài hát dựa vào album, artist, songs. + Quản lí danh sách phát nhạc + Phát nhạc theo tuần tự playlist, lặp bài, suffle playlist nhạc. + Drag bài hát vào phần mềm. + Search theo bài hát, artists, album. + Dựng playlist đã nghe gần đây, playlist được nghe nhiều nhất. + Tự động tải hình ảnh album dựa vào tên album có sẵn

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN NGƠN NGỮ LẬP TRÌNH JAVA ĐỀ TÀI MEDIA PLAYER Giảng viên hướng dẫn: ThS Lê Thanh Trọng Sinh viên : Lê Đức Tiến – 15520881 Sinh viên : Dương Phước Hải Thọ - 15520851 Sinh viên : Đỗ Thành Thắng - 15520787 TP Hồ Chí Minh, 13 tháng 06 năm 2018 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN … , ngày tháng năm 2018 Người nhận xét (Ký tên) LỜI CẢM ƠN Để thành cơng mơn học hồn thành tốt đồ án cuôi kỳ - ứng dụng “Music Player” chúng em nhận nhiều giúp đỡ q thầy bạn bè Tỏ lòng biết ơn sâu sắc, chúng em xin chân thành cảm ơn giảng viên khoa Công nghệ phần mềm – Đại học Công Nghệ Thông Tin với tri thức tâm huyết truyền đạt vốn kiến thức quý báu cho chúng em suốt thời gian học tập trường Trong học kỳ này, chúng em tiếp cận với môn học “Công nghệ phần mềm chun sâu” – mơn học hữu ích sinh viên khoa Công nghệ phần mềm Và đặc biệt, q trình thực đồ án mơn học giúp chúng em nâng cao kiến thức, trải nghiệm thực tế việc xây dựng website đơn giản phần giúp đỡ nhiều người sử dụng sản phẩm nhóm Chúng em xin chân thành cảm ơn thầy Lê Thanh Trọng tận tâm hướng dẫn chúng em qua buổi học lớp Nếu khơng lời hướng dẫn, bảo thầy chúng em nghĩ q trình hồn thiện báo cáo chúng em gặp nhiều vấn đề khó khăn Do kiến thức khả chúng em nhiều hạn chế, khơng tránh khỏi thiếu sót, yếu Chúng em mong nhận ý kiến đóng góp quý báu thầy để kiến thức chúng em hồn thiện Sau cùng, chúng em xin kính chúc quý thầy khoa Công nghệ phần mềm thầy Lê Thanh Trọng thật dồi sức khỏe, niềm tin để tiếp tục thực sứ mệnh cao đẹp truyền đạt kiến thức cho hệ mai sau Trân trọng MỤC LỤC MỤC LỤC i 1.1 Trình chạy nhạc Media Player ii 1.2 Các chức ii PHÂN TÍCH VÀ THIẾT KẾ iii 2.1 Phân tích chức iii 2.1.1 Initialize MusicPlayer iii 2.1.2 Artists iii 2.1.3 Album vii 2.1.4 Songs viii 2.1.5 Tìm kiếm theo artist, album, tên hát x 2.1.6 Pause, Skip, Previous Songs xi 2.1.7 Playlist, Recently Played Playlist, Most Played Playlist xiii 2.1.8 Loop, shuffle, volume hát xv 2.2 Thiết kế phần mềm xvi 2.2.1 Artists xvi 2.2.2 Album xviii 2.2.3 Songs xx 2.2.4 Tìm kiếm theo artist, album, tên hát xxi 2.2.5 Pause, Skip, Previous Songs xxii 2.2.6 Playlist, Recently Played Playlist, Most Played Playlist .xxiii 2.2.7 Loop, shuffle, volume hát xxv 4.CÀI ĐẶT xxvi 4.1 Nền tảng công nghệ xxvi KẾT LUẬN xxvi 5.1 Kết đạt xxvi 5.2 Hạn chế xxvi 5.3 Hướng phát triển xxvi PHÂN CÔNG CÔNG VIỆC xxvii TÀI LIỆU THAM KHẢO xxvii i GIỚI THIỆU 1.1 Trình chạy nhạc Media Player Trong thời đại ngày nay, âm nhạc thứ gần thiếu người, chí động vật Các ca sĩ, nhạc sĩ … ngày nhiều hội dễ trình diễn sản phẩm họ Việc quản lí nhiều hát, nhiều ca khúc, album ca sĩ, nhạc sĩ trở nên cần thiết Người dùng quản lí cách thỏa mái dễ dàng tồn hát, album hay ca sĩ mà yêu thích Bật phát nhạc desktop offline tận hưởng sống Từ chúng tơi định cho phần mềm quản lí media player, quản lí theo album, hát, ca sĩ playlist Giúp người dùng dễ dàng thao tác, giao diện dễ sử dụng hiệu ứng sống động âm chất lượng 1.2 Các chức + Phát, dừng skip hát + Quản lí hát dựa vào album, artist, songs + Quản lí danh sách phát nhạc + Phát nhạc theo playlist, lặp bài, suffle playlist nhạc + Drag hát vào phần mềm + Search theo hát, artists, album + Dựng playlist nghe gần đây, playlist nghe nhiều + Tự động tải hình ảnh album dựa vào tên album sẵn ii PHÂN TÍCH VÀ THIẾT KẾ 2.1 Phân tích chức 2.1.1 Initialize MusicPlayer Bước 1: Kiểm tra file XML tồn tại, khơng thì khởi tạo dựa vào đường dẫn người dùng đưa vào Và xuất hát quản lí theo album, artist, songs, playlist Bước 2: checkLibraryXML() • Tìm đường dẫn đến file library.xml • Kiểm tra giá trị file folder thực library.xml giống khơng để cập nhật • Cập nhật library(sử dụng util.XMLEditor) • Nếu đường dẫn khơng file âm nhạc, yêu cầu người dùng import đường dẫn khác Bước 3: Nhập danh sách hát -> album -> artist, playlist vào class Library để quản lí Bước 4: Khởi tạo danh sách chơi để cập nhật hát Bước 5: Kiểm tra hát tồn hình ảnh ca sĩ, album Nếu không, tự động download image từ cloud xuống Bước 6: Sau đưa liệu vào library class Khởi tạo giao diện fxml Main Controller để quản lí event 2.1.2 Artists 2.1.2.1 selectView(Event e) Khi người dùng click vào HBox Artists kiện selectView(Event e) gọi Hàm HBox eventSource = ((HBox)e.getSource()); Sẽ bắt kiện click vào HBox Artists tiến hành thêm CSS cho lớp Control trước Hàm loadView(eventSource.getId()); load SubView tương ứng với HBox Artists, tạo file Aritists.fxml tương ứng 2.1.2.2 VBox createCell(Artist artist) Tạo artist-cell dựa vào thông tin Title, Artist Image, artistImageProperty đối tượng artist Tạo VBox dựa vào thông tin hiển thị TableView iii 2.1.2.3 class Artist implements Comparable class Aritist gồm thuộc tính như: private String title; private ArrayList albums; private Image artistImage; private SimpleObjectProperty artistImageProperty; Tạo constructor cho class Aritist public Artist(String title, ArrayList albums) { this.title = title; this.albums = albums; this.artistImageProperty = new SimpleObjectProperty(getArtistImage()); } Trong aritistImageProperty gán giá trị getArtistImage(); public Image getArtistImage() { if (artistImage == null) { try { File file = new File(Resources.JAR + "/img/" + this.title + ".jpg"); artistImage = new Image(file.toURI().toURL().toString()); if (artistImage.isError()) { file.delete(); artistImage = new Image(Resources.IMG + "artistsIcon.png"); } } catch (Exception ex) { File file = new File(Resources.JAR + "/img/" + this.title + ".jpg"); file.delete(); artistImage = new Image(Resources.IMG + "artistsIcon.png"); } } return artistImage; } iv 2.1.2.4 Dùng API để download Artist Image public void downloadArtistImage() Nếu thư mục imgFolder khơng tồn chương trình tạo Thread gọi đến hàm downloadArtistImage để dowload AristImage Thread thread1 = new Thread(() -> { Library.getArtists().forEach(Artist::downloadArtistImage); }); 2.1.2.5 void showAllSongs(Artist artist, boolean fromMainController) Duyệt qua tất album artist, thêm tất hát album vào danh sách hát Thực xếp danh sách hát theo thứ tự alphabet Hiển thị danh sách hát vào khung tableView hát 2.1.2.6 public void play() Kiểm tra Album chọn đưa tất hát vào danh sách phát Ngược lại chưa lựa chọn Album lấy tất hát tất album Artist Play nhạc thuộc tính MusicPlayer.isShuffleActive()==true nhạc play ngẫu nhiên, ngược lại play theo thứ tự alphabet 2.1.2.7 Animation Scroll danh sách Artist: Animation scrollAnimation = new Transition() { { setCycleDuration(Duration.millis(500)); } protected void interpolate(double frac) { double vValue = startVvalue + ((finalVvalue - startVvalue) * frac); artistListScrollPane.setVvalue(vValue); } }; v Animation Load danh sách Artist private Animation albumLoadAnimation = new Transition() { { setCycleDuration(Duration.millis(250)); setInterpolator(Interpolator.EASE_BOTH); } protected void interpolate(double frac) { double curHeight = collapsedHeight + (expandedHeight - collapsedHeight) * (frac); songTable.setTranslateY(expandedHeight - curHeight); songTable.setOpacity(frac); } }; Animation Unload danh sách Artist private Animation albumUnloadAnimation = new Transition() { { setCycleDuration(Duration.millis(250)); setInterpolator(Interpolator.EASE_BOTH); } protected void interpolate(double frac) { double curHeight = collapsedHeight + (expandedHeight - collapsedHeight) * (1 frac); songTable.setTranslateY(expandedHeight - curHeight); songTable.setOpacity(1 - frac); songTable.setMinHeight(1 - frac); songTable.setPrefHeight(1 - frac); } }; vi 2.1.3 Album 2.1.3.1 selectView(Event e) Khi người dùng click vào HBox Album kiện selectView(Event e) gọi Hàm HBox eventSource = ((HBox)e.getSource()); Sẽ bắt kiện click tiến hành thêm CSS cho lớp Control trước Hàm loadView(eventSource.getId()); load SubView tương ứng với HBox Albums, tạo file Albums.fxml tương ứng 2.1.3.2 VBox createCell(Album album, int index) Tạo ô album dựa vào thông tin Title, artwork đối tượng album Hiện thị thông tin trên TableView 2.1.3.3 Class Album package Model - Implement interface Comparable - Gồm thuộc tính private int id; private String title; private String artist; private Image artwork; private ArrayList songs; private SimpleObjectProperty artworkProperty Constructor public Album(int id, String title, String artist, ArrayList songs) { this.id = id; this.title = title; this.artist = artist; this.songs = songs; this.artworkProperty = new SimpleObjectProperty(getArtwork()); } vii public static void back() { if (timerCounter > 20 || nowPlayingIndex == 0) { mainController.initializeTimeSlider(); seek(0); } else { boolean isPlaying = isPlaying(); setNowPlaying(nowPlayingList.get(nowPlayingIndex - 1)); if (isPlaying) { play(); } } } 2.1.7 Playlist, Recently Played Playlist, Most Played Playlist 2.1.7.1 Tạo Playlist Sự kiện click New Playlist private void newPlaylist() • Khởi tạo tạo Hbox Playlist kiện kèm: • Kéo hát album vào playlist • Click vào album để truy cập vào Playlist layout • Press Enter để truy cập Playlist layout • Hiệu ứng hover vào HBox 2.1.7.1 Playing Playlist Danh sách hát lấy từ MusicPlayer.getNowPlayingList() hiển thị theo kiểu liệu Song xiii public class NowPlayingController implements Initializable, SubView { @FXML private TableView tableView; @FXML private TableColumn playingColumn; @FXML private TableColumn titleColumn; @FXML private TableColumn artistColumn; @FXML private TableColumn albumColumn; @FXML private TableColumn lengthColumn; @FXML private TableColumn playsColumn; private Song selectedSong; • Khởi tạo tạo Hbox Playlist kiện kèm: • Kéo hát album vào playlist • Click vào album để truy cập vào Playlist layout • Press Enter để truy cập Playlist layout • Hiệu ứng hover vào HBox 2.1.7.3 Recently Played, Most Played Playlist & another Playlist Hàm khởi tạo toàn playlist đổ liệu vào controller playlist private void initializePlaylists() • Khởi tạo tạo Hbox Playlist kiện kèm: • Kéo hát album vào playlist • Click vào album để truy cập vào Playlist layout • Press Enter để truy cập Playlist layout • Hiệu ứng hover vào HBox xiv 2.1.8 Loop, shuffle, volume hát 2.1.8.1 Lặp //Sự kiện click nút loop thêm css màu chuyển cờ loop MusicPlayer PseudoClass active = PseudoClass.getPseudoClass("active"); loopButton.setOnMouseClicked(x -> { sideBar.requestFocus(); MusicPlayer.toggleLoop(); loopButton.pseudoClassStateChanged(active, MusicPlayer.isLoopActive()); }); 2.1.8.2 Xáo trộn //Sự kiện click nút shuffle thêm css màu chuyển cờ shuffle MusicPlayer shuffleButton.setOnMouseClicked(x -> { sideBar.requestFocus(); MusicPlayer.toggleShuffle(); shuffleButton.pseudoClassStateChanged(active, MusicPlayer.isShuffleActive()); }); 2.1.8.3 Volume Tạo VolumePopup private void createVolumePopup() Animation mở volumePopup popup.focusedProperty().addListener((x, wasFocused, isFocused) -> { if (wasFocused && !isFocused) { volumeHideAnimation.play(); } }); xv Xử lí hiệu ứng kết thúc volumeHideAnimation.setOnFinished(x -> popup.hide()); popup.show(); popup.hide(); volumePopup = popup; 2.2 Thiết kế phần mềm 2.2.1 Artists 2.1.1.1 Giao diện Artists xvi 2.1.1.2 Giao diện Artist Main STT Tên biến Kiểu biến Mô tả customize từ Pane Load viewLoad Artist HboxArtist lable subViewRoot BroderPane Chứa listView để chức ArtistCell artistList ListView Hiện danh sách Artist albumList ListView Hiện danh sách Album tương ứng với Artist songTable TableView Hiện danh sách hát xvii 2.2.2 Album STT Tên biến Loại controller Chức Khi người dung bấm vào HBox Album, layout bên Chọn xem theo album HBox phải hiển thị danh sách album Khi người dung bấm hình album, bên hiển thị chi tiết hát albumImageView ImageView album, người dung bấm lần tắt thị chi tiết album Tên album Label Hiển thị tên album xviii STT Tên biến Loại controller Chức X Album Controller Hiển thị Artwork tên album Tên ca sĩ Label Hiển thị tên ca sĩ Tên album Label Hiển thị tên album titleColumn ControlPanelTableCell Tên hát lengthColumn ClippedTableCell Độ dài hát playsColumn ClippedTableCell Số lần chơi 10 playingColumn PlayingTableCell Cờ phát xix 2.2.3 Songs STT Tên biến Loại controller Chức letterBox Hbox + Label Hiển thị search theo ký tự playingColumn PlayingTableCell Cờ phát titleColumn ControlPanelTableCell Tên hát artistColumn ClippedTableCell Tên ca sỹ albumColumn ClippedTableCell Tên album lengthColumn ClippedTableCell Độ dài hát playsColumn ClippedTableCell Số lần chơi xx 2.2.4 Tìm kiếm theo artist, album, tên hát Sau nhập vào tìm kiếm xxi STT Tên biến Kiểu biến Mơ Tả searchBox TextField Khung tìm kiếm cho kết tìm kiếm theo thứ tự Artist, Album, Song Khung chứa danh HBox sách tìm kiếm mục Tiêu đề mục tìm Label kiếm Hiện mục tìm kiếm (Artist, Album, Song) Tiêu đề kết tìm Label kiếm Là bảng chứa kết tìm kiếm theo Tiêu đề kết tìm kiếm ứng với mục Artwork kết ImageView tìm kiếm ArtWork kết tìm kiếm, khơng sử dụng hình mặc định 2.2.5 Pause, Skip, Previous Songs 2.2.5.1 Thiết kế giao diện Pause, Skip, Previous Songs STT Tên biến Kiểu biến Mô Tả backButton Pane chứa SVGPath Quay lại hát trước playlist playButton Pane chứa SVGPath Tạm dừng/ tiếp tục skipButton Pane chứa SVGPath Play hát playlist xxii 2.2.6 Playlist, Recently Played Playlist, Most Played Playlist 2.2.6.1 Thiết kế giao diện tổng quan Playing STT Tên biến Loại controller Chức playingColumn PlayingTableCell Cờ phát titleColumn ControlPanelTableCell Tên hát artistColumn ClippedTableCell Tên ca sỹ albumColumn ClippedTableCell Tên album lengthColumn ClippedTableCell Độ dài hát playsColumn ClippedTableCell Số lần chơi xxiii 2.2.6.2 Thiết kế giao diện Playlist, Recently Played Playlist Most Played Playlist STT Tên biến Loại controller Chức playlistTitleLabel Label Hiển thị tên album playButton Pane Phát playlist deleteButton Pane Xóa playlist playingColumn PlayingTableCell Cờ phát titleColumn ControlPanelTableCell Tên hát artistColumn ClippedTableCell Tên ca sỹ albumColumn ClippedTableCell Tên album lengthColumn ClippedTableCell Độ dài hát playsColumn ClippedTableCell Số lần chơi xxiv 2.2.7 Loop, shuffle, volume hát 2.2.7.1 Thiết kế giao diện Loop, shuffle, volume hát STT Tên biến Kiểu biến Mô Tả loopButton Pane chứa SVGPath Bật/tắt chức lặp lại playlist shuffleButton Pane chứa SVGPath Bật/tắt chức play ngẫu nhiên volumeButton Pane chứa SVGPath Tăng/giảm volume xxv 4.CÀI ĐẶT 4.1 Nền tảng công nghệ Phần mềm sử dụng: Eclipse, IntelliJ IDEA, Git Ngôn ngữ: Java Các thư viện sử dụng: thư viện JaudioTagger để quản lí data nhạc Jintellitype để đăng ký key media hệ thống KẾT LUẬN 5.1 Kết đạt + Hoàn thành tốt tất yêu cầu phần mềm nghe nhạc + Giao diện thân thiện người dung, nhiều thao tác tiện lợi + Phân chia công việc thành viên rõ ràng đạt hiệu tốt 5.2 Hạn chế + Chưa chức đổi thư mục chứa nhạc + Giao diện chưa thật ấn tượng 5.3 Hướng phát triển + Chức nghe nhạc online, download nhạc + Chức thay đổi metadata hát chương trình + Thêm Equalizer giả lập khơng gian + Cải thiện giao diện đẹp đại xxvi PHÂN CÔNG CÔNG VIỆC Thiết kế giao diện Các chức hình Chèn liệu nhạc xử lí XML file Tiến Thọ Thắng X X X X X X X Chức liên quan X đến Artist Chức liên quan X đến Album Chức liên quan đến Song Quản lý Playlist X X Chức tìm kiếm Thanh quản lý hát nghe X X Chức suffle, loop, thay đổi âm X lượng Kiểm tra lỗi X X X Viết báo cáo X X X TÀI LIỆU THAM KHẢO [1] Tài liệu học javafx https://o7planning.org/vi/10623/huong-dan-lap-trinh-javafx-cho-nguoi-moi-bat-dau [2] Stackoverflow xxvii

Ngày đăng: 29/10/2018, 16:08

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan