1. Принцип реализации музыкального проигрывателя
Мультимедийная функция Javase очень слаба, поэтому существует плагин, который специализируется на мультимедиа под названием JMF. Модели, предоставленные JMF, могут быть примерно разделены на семь категорий.
* Источник данных
* Заемное устройство (включая видео и аудио -перехватчик)
* Игрок
* Процессор
* DataSink
* Формат данных (формат)
* Менеджер
Музыкальный проигрыватель MymusicPlayer (это имя класса, которое я создал) Я сделал звонки в класс Player в JMF для реализации различных функций, таких как его воспроизведение.
Первое, что нам нужно сделать, это установить JMF. Я считаю, что установка JMF очень хлопотна для многих новичков. JMF поддерживает только 32-битную версию JDK, но такие среды IDE, как Eclipse, должны соответствовать JDK, то есть среда IDE должна поддерживать 32-битную версию JDK. После установки JMF иногда воспроизведение mp3 не успешным, и вам также необходимо установить Mp3plugin JMF.
2. Диаграмма эффекта интерфейса
3. Диаграмма функциональной структуры
4. Различные коды для реализации функций
открытый класс MymusicPlayer реализует ActionListener, ControllerListener, Runnable {jframe j = new jframe ("Music Player"); Jlabel tableplaer = new jlabel ("плейлист"); Jbutton badd = new jbutton ("добавить песню"); Jbutton bdelect = new jbutton ("Delete Song"); Jbutton bdelecttable = new jbutton ("clear list"); Jbutton bmovenext = new Jbutton ("Next Song"); Jbutton bmoveprevious = new jbutton ("предыдущая песня"); Jbutton bplayer = new jbutton ("пауза"); Jbutton bstop = new Jbutton ("Stop"); Jbutton bset = new jbutton ("Show Trics"); Jbutton bend = new Jbutton ("Stop"); String [] s = {"Sequential Play", "Single Loop", "Shutter Play"}; // раскрытие списка параметров массив jcombobox select = new jcombobox (ы); // Создание раскрывающихся параметров jpanel p1 = new jpanel (); // область плейлиста JPanel p = new jPanel (); Jpanel p2 = new jpanel (); // область кнопки JPanel P3 = new jPanel (); Jlabel l = new jlabel (); Jpanel p5 = new jpanel (); // место плейлиста JPanel P6 = new jPanel (); // Поместите название песни Play Static JPanel PP = new jPanel (); Статический jlabel LB; public static jtextarea jt = new jtextarea (); статический индекс Int; // script of the Playlist int count; int flag; // является маркером плейлиста, играющего случайным образом или последовательно воспроизводится int countsecond; // Получить общее время времени музыки Static int newtime = 0; int iSchanging = 0; // Когда мышь нажимает на курсор, значение прогресса также изменит int iSpressing = 0; // защищать, нажимает ли мышь на файл курсора MusicName = null; static java.util.list <file> musicnames = null; // Использовать Generics для создания файла файла файла currentDirectory = null; Список списка; // Список файлов FileDialog Open; // Определить диалог файла объект randing rand = new Random (); String FileName; // Progress Bar Jbutton TimeInformation = new jbutton (); Jslider timeslider = new jslider (swingconstants.horizontal, 0, 100, 0); //( SwingConstants.horizontal) используется для направления набора констант с помощью панели прогресса в качестве горизонтального направления // (0, 100, 0) создать горизонтальный ползунок с указанным минимальным, максимальным и начальным значением. // Играйте Player Player = null; MusicFileChooser fileChooser = new MusicFileChooser (); static JTextPane TP = new jTextPane (); // показать лирическую область статической jtextarea = new jtextarea (); // Показать область изображения public mymusicPlayer () {j.setsize (1200, 700); j.setlayout (null); j.getContentPane (). Betbackground (color.black); j.setdefaultcloseoperation (jframe.exit_on_close); P.SetBounds (2, 563, 1180, 95); p.setlayout (new borderlayout ()); P1.SetBounds (2, 3, 298, 30); P1.Setbackground (новый цвет (255, 255, 255)); p2.setlayout (новый Gridlayout (2, 3, 20, 20)); p2.setbackground (color.light_gray); P3.Setlayout (новый Gridlayout (2,0,200,10)); P3.Setbackground (новый цвет (255,255,255)); P5.SetBounds (2, 35, 298, 526); p5.setlayout (null); P5.Setbackground (новый цвет (255 255 255)); P6.SetBounds (301, 3880, 30); p6.setlayout (null); p6.setbackground (новый цвет (255 255 255)); L.SetBounds (250, 4, 600, 30); // Установить отображение и воспроизводить песню p6.add (l); /*Реализовать вставку изображения**/imageicon IC = new ImageICon ("Image // 2.3.jpg"); ic = new Imageicon (ic.getimage (). getScaledInstance (880, 477, 2)); // Получить изображение и установить размер изображения lb = new jlabel (ic); lb.setopaque (false); pp.setopaque (false); // установить на прозрачный PP.SetBounds (241, 80,990, 500); are.setbounds (241, 56,990, 520); are.setopaque (false); TP.Setbackground (новый цвет (255 255 255)); TP.SetBounds (301, 35,880, 49); pp.Add (есть); pp.add (lb); // Список файлов = новый список (10); List.SetBounds (100, 55, 187, 495); // Список областей List.AddactionListener (это); J.Add (список); J.Add (JT); J.Add (TP); Badd.setbounds (5,20, 90,30); Badd.setbackground (новый цвет (255 255 255)); Bdelect.setBounds (5, 80, 90, 30); Bdelect.setbackground (новый цвет (255 255 255)); Bdelect.setBounds (5, 140, 90, 30); Bdelect.setbackground (новый цвет (255 255 255)); TablePlaer.SetBounds (30, 100, 200, 50); TablePlaer.SetFont (новый шрифт ("安安", 1, 20)); P1.Add (TablePlaer); Bmoveprevious.setbackground (новый цвет (255 255 255)); Bplayer.setbackground (новый цвет (255 255 255)); Bmovenext.setbackground (новый цвет (255 255 255)); BSTOP.Setbackground (новый цвет (255 255 255)); select.setbackground (новый цвет (255 255 255)); Bset.setbackground (новый цвет (255 255 255)); p2.add (bmoveprevious); P2.Add (Bplayer); p2.add (bmovenext); p2.add (bStop); p2.add (select); P2.Add (BSET); p2.setbackground (новый цвет (255 255 255)); P.Add (P2, Borderlayout.west); P.Add (P3, Borderlayout.center); P5.Add (P); P5.Add (Badd); p5.add (bdelect); p5.add (bdelecttable); BADD.AddactionListener (это); Bdelect.addactionListener (это); Bdelecttable.addactionListener (это); Bmovenext.addactionListener (это); Bplayer.addactionListener (это); Bmoveprevious.addactionListener (это); BSTOP.AddactionListener (это); select.addactionListener (это); Bset.addactionListener (это); TimeInformation.SetEnabled (false); / * * Плана выполнения реализации * */timeslider.setmajortickspacing (1); // вызовать этот метод для установки интервала основной шкалы. Входящее число представляет собой расстояние, измеренное по значению между каждым маркером основного шкалы. timeslider.setpaintticks (true); // Нарисовать основную шкалу, SetPaintTicks должны быть установлены на True TimeSlider.Addchangelistener (new Changelistener () {// Создать новый изменник и добавить его в слайдер. Public void StateChanged (changeEvent arg0) {if Player! (int) (jslider) arg0.getsource ()). getValue (); Timeslider.AddMouseListener (new MouseAdapter () {public void mousepressed (mousevent arg0) {ispressing = 1; // Когда мышь нажимает курсор} public void mouserealleed (mouseevent arg0) {ispressing = 0; // Когда мыши не щелкнуло Cursor}}); TimeInformation.settext («Текущее время: 00:00 || Общее время: 00:00»); TimeInformation.SetBackground (новый цвет (255 255 255)); P3.Add (TimeInformation, Borderlayout.north); P3.Add (Timeslider, Borderlayout.South); J.Add (PP); J.Add (P5); J.Add (P); J.Add (P1); J.Add (P6); j.setvisible (true); // j.setReSizable (false); } / * * Основная функция * * /public static void main (string [] args) бросает ioException, прерывание {// прерывание. MymusicPlayer play = new MyMusicPlayer (); Thread Timerun = новый поток (Play); timerun.start (); } @Override public void actionperformed (actionEvent e) {string cmd = e.getActionCommand (); // Судить, воспроизводить или сделать паузу, получив строку, string box = (string) select.getSelectedItem (); // судить по приказу воспроизведения if (e.getSource () == badd) {if (player == null) {if (fileChooser.showopendialog (j) == musicfilechooser.approve_option) {this.musicname = filechooser.getSelectedFile (); File CD = fileChooser.getCurrentDirectory (); // Получить текущий путь if (cd! = This.currentDirectory || this.currentDirectory == null) {fileFilter [] fileFilters = fileChooser.getChoosableFileFilters (); // FileFilter - это абстрактный класс, который Jfilechooser использует для фильтрации набора файлов, отображаемых в файлах пользовательских файлов [] = cd.listfiles (); //cd.listfiles () означает возврат массива абстрактных путей, которые представляют файлы в каталоге, представленном этим абстрактным путем. this.musicnames = new ArrayList <file> (); для (файл файла: файлы) {// Каждый раз, когда объект файла в массиве назначается переменной файла, и затем эта переменная работает в корпусе цикла, например: // for (int i = 0; i <files.length; i ++) {file = files [i]; ...} filename = file.getName (). // Получить все музыкальные имена для (FileFilter Filter: FileFilters) {if (! File.isdirectory () && filter.accept (file)) {this.musicnames.add (file); list.add (имя файла); filename = e.getActionCommand (); }}}}} index = musicnames.indexof (musicname); // Определите подписание Song Count = musicNames.size (); Playfile (); }} else {player.start (); }} if (cmd.equals ("pause")) {bplayer.settext ("play"); player.stop (); } if (cmd.equals ("play")) {bplayer.settext ("pause"); Player.Start (); } if (e.getSource () == bStop) {// stop if (player! = null) {player.stop (); TimeInformation.settext («Текущее время: 00: 00 || Общее время: 00: 00»); Timeslider.SetValue (0); player.setmediatime (новое время (0)); // Установить время на ноль}} if (e.getSource () == bmovenext) {// следующая песня if (player! = Null) {if ("sequal playback" .equals (box)) {nextmusic (); } if ("Playback Shutter" .equals (box)) {int index = (int) rand.nextint (this.musicnames.size ())+1; if (this.musicnames! = null &&! this.musicnames.isempty ()) {if (++ index == this.musicnames.size ()) {index = (int) rand.nextint (this.musicnames.size ())+1; } player.stop (); // Если вы нажмете на предыдущую песню, текущая песня будет остановлена, а предыдущая песня будет воспроизведена try {player = Manager.createrealizedPlayer (musicNames.get (index) .touri (). Tourl ()); player.prefetch (); player.setmediatime (новое время (0,0)); // play player.addcontrollerlistener (это); L.Settext ("Play:"+this.musicnames.get (index) .toString ()); list.select (index); Player.Start (); флаг = 1; } catch (noplayerexception | consrealizexception | ioexception e1) {e1.printstacktrace (); }}}}}} if (e.getSource () == bmovePrevious) {// предыдущая песня if (player! = null) {if ("sequential Play" .equals (box)) {prearmusic (); } if ("shutter play" .equals (box)) {int index = (int) rand.nextint (this.musicnames.size ())+1; if (this.musicnames! = null &&! this.musicnames.isempty ()) {if (index-== (int) rand.nextint (this.musicnames.size ())+1) {index = this.musicnames.size ()-1; } player.stop (); // Если вы нажмете на предыдущую песню, текущая песня будет остановлена, а предыдущая песня будет воспроизведена try {player = Manager.createrealizedPlayer (musicNames.get (index) .touri (). Tourl ()); player.prefetch (); player.setmediatime (новое время (0,0)); // Начните играть в Player.addcontrollerLister (это); L.Settext ("Play:"+this.musicnames.get (index) .toString ()); list.select (index); Player.Start (); флаг = 1; } catch (noplayerexception | consrealizexception | ioexception e1) {e1.printstacktrace (); }}}}}}} if (e.getSource () == bdelect) {// delete song index = list.getSelectedIndex (); list.remove (index); MusicNames.remove (this.Index); } if (e.getSource () == bdelecttable) {// очистить список списка.removeall (); MusicNames.Removeall (MusicNames); player.stop (); Player = null; } // Дважды щелкните список, который будет воспроизведен list.addmouseListener (new MouseAdapter () {public void mouseClicked (mouseevent e) {// двойной щелчок if (e.getClickCount () == 2) {if (player! }});} // Поскольку реализован интерфейс «ControllerListener», этот метод используется для обработки событий, передаваемых у медиа -плееры; public void controllerupdate (controlerevent e) {string box = (string) select.getSelectedItem (); // Судить по приказу воспроизведения if (e exactionof endofmediaevent) {player.setmediatime (новое время (0)); if ("Single Loop" .equals (box)) {player.start (); } if ("sequential Play" .equals (box)) {nextmusic (); } if ("shutter play" .equals (box)) {if (this.musicnames! = null &&! this.musicnames.isempty ()) {int index = (int) rand.nextint (this.musicnames.size ())+1; try {player = Manager.createrizedPlayer (musicNames.get (index) .touri (). Tourl ()); player.prefetch (); player.setmediatime (новое время (0,0)); // play player.addcontrollerlistener (это); L.Settext ("Play:"+this.musicnames.get (index) .toString ()); list.select (index); Player.Start (); флаг = 1; } catch (noplayerexception | consrealizexception | ioexception e1) {e1.printstacktrace (); }}}}}}} / *** Получить имя mp3 песни** @mp3 -файл PAIL* @song name* / public String getMusicName (String Str) {int i; for (i = str.length ()-1; i> 0; i--) {if (str.charat (i) == '//') break; } str = str.substring (i + 1, str.length () - 4); вернуть Str; } / *** Следующая функция реализации* / public void nextmusic () {} / *** Предыдущая функция реализации* / public void предыдущий music () {} / *** Play Mp3 File Function* / public void playfile () {try {player = manager.createrealizedplayer (musicnames.get (index). player.prefetch (); player.setmediatime (новое время (0,0)); // play player.addcontrollerlistener (это); L.SetFont (новый шрифт ("宋体", 0,20)); L.Settext ("Play:"+this.musicnames.get (index) .toString ()); // Показать песню воспроизводится list.select (index); Player.Start (); Mythread11 tt = new mythread11 (); tt.start (); } catch (Exception e1) {// Когда музыку не может быть воспроизведена, обрабатывайте это dealerror (); возвращаться; } this.setFrame (); } public void setFrame () {countSecond = (int) player.getDuration (). getSeconds (); timeslider.setmaximum (ouctsecond); Timeslider.SetValue (0); newMime = 0; } private void dealerror () {// todo Автогенерированный метод stub musicnames.remove (index); if ( -count == index) index = 0; if (count == 0) player = null; иначе Playfile (); }/*** Фельтрация файла mp3 Внутренний класс*/class musicfilechooser extends jfilechooser {}/*** mp3 -файл фильтрации Вспомогательный внутренний класс**/класс myfilefilter extends fileFilter {// FileFilter - это абстрактный класс, который Jfilechooser использует для FileFilter, отображаемой в сборку пользователя, является абстрактным классом; Строка описание; public myfilefilter () {super (); } public myfilefilter (String [] suffarr, строка описание) {super (); this.suffarr = suffarr; this.descript = описание; } public boolean Accept (file f) {for (String s: suffarr) {if (f.getName (). touppercase (). Endswith (s)) {return true; }} return f.isdirectory (); } public String getDescription () {return this.dection; }}/*** Читать панель временного проведения отображения*/public void run () {while (true) {sleep (); if (player! = null) {if (iSpressing == 0) {if (ischanging == 1) {newtime = timeslider.getValue (); Player.SetMediatime (новое время (((длинное) newmime)*1000000000)); iSchanging = 0; } else {newtime = (int) player.getMediatime (). getSeconds (); Timeslider.SetValue (Newtime); TimeInformation.settext («Текущее время:»+newtime/60+»:"+newtime%60+"||"+"Общее время:"+countsecond/60+":"+countsecond%60); }}}}}}}}} // Поток, который реализует текст Mythread11 Extends Thread {public void run () {// todo с генерируемым методом заглушка try {lrc lrc = readlrc.readlrc ("uppert light.lrc"); Тексты песен LS = Parselrc.parselrc (LRC); Playtest (LS); } catch (Exception e) {}}} static void playtest (текст ls) бросает прерывания. tp.setforeground (color.blue); Styleddocument doc = tp.getstyleddocument (); SimpleattributeSet Center = new SommeateAttributeSet (); Styleconstants.setalenment (Center, styleconstants.align_center); // показать doc.setparagraphattributes (0, doc.getlength (), center, false); tp.settext ("Artist:" + ls.getar ()); tp.settext ("Альбом:" + ls.getal ()); tp.settext ("song:" + ls.getti ()); tp.settext ("Текст песни:" + ls.getby ()); for (lyric l: ls.getlyrics ()) {tp.settext (l.gettxt ()); Thread.sleep (l.getTimesize ()); }}}V. Общие результаты теста
следующее
Для получения дополнительной информации о игроке, пожалуйста, нажмите «Функция игрока Java», чтобы выучить.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.