Java语言程序设计——篇十五(4)


🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

音频和视频

音频和视频

  • JavaFX支持播放音频和视频媒体。它支持MP3、AIFF和WAV音频文件和FLV、MP4等视频文件。
  • JavaFX媒体功能通过javafx.scene.media包的三个类实现:
    ①Media表示媒体文件,可以是音频,也可以是视频;
    ②MediaPlayer用于播放媒体文件的播放器;
    ③ MediaView是显示媒体的节点控件。
  • 要播放一个媒体,首先通过一个URL字符串创建一个Media对象,然后再创建一个MediaPlayer对象来播放它,最后创建一个MediaView对象来显示播放器。
  • Media类的构造方法如下:
java 复制代码
public Media(String source)
  • 属性:

duration

width

height

例:

java 复制代码
    File path = new File("media\\高山流水.mp3");
	String source = path.toURI().toString();
    Media media = new Media(source);
  • MediaPlayer类构造方法如下:
java 复制代码
 public MediaPlayer(Media media)
  • 通过一些属性控制媒体的播放:

autoPlay

cycleCount

volume

balance

  • 下面方法可以控制媒体的播放:
java 复制代码
 public void play()
 public void pause()
 public void stop()
 public void seek(Duration seekTime)
  • MediaView类为媒体播放器提供一个视图,主要负责特效与变换。
java 复制代码
 public MediaView()
 public MediaView(MediaPlayer mediaPlayer)
  • MediaView类提供了一些属性用于控制媒体:
java 复制代码
 x,y属性指定媒体视图的当前x、y坐标,
 mediaPlayer是为媒体视图指定的媒体播放器,
fitWidth和fitHeight分别为媒体指定合适的宽度和高度。

音频实战演练

问题描述:

实现一个简单音频播放器。程序开始运行首先创建一个MediaPlayer对象。当单击"播放"按钮开始播放、单击"暂停"按钮暂停播放等。

java 复制代码
import javax.sound.sampled.*;  
import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.io.File;  
import java.io.IOException;  
  
public class SimpleAudioPlayer extends JFrame {  
    private Clip clip;  
    private boolean isPlaying = false;  
  
    public SimpleAudioPlayer() {  
        // 设置窗口属性  
        setTitle("Simple Audio Player");  
        setSize(300, 200);  
        setLocationRelativeTo(null); // 居中显示  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        // 创建播放和暂停按钮  
        JButton playButton = new JButton("播放");  
        JButton pauseButton = new JButton("暂停");  
  
        // 加载音频文件  
        try {  
            File audioFile = new File("music.wav");  
            AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);  
            clip = AudioSystem.getClip();  
            clip.open(audioStream);  
        } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {  
            e.printStackTrace();  
        }  
  
        // 为按钮添加事件监听器  
        playButton.addActionListener(new ActionListener() {  
            @Override  
            public void actionPerformed(ActionEvent e) {  
                if (!isPlaying) {  
                    clip.start();  
                    isPlaying = true;  
                    playButton.setEnabled(false);  
                    pauseButton.setEnabled(true);  
                }  
            }  
        });  
  
        pauseButton.addActionListener(new ActionListener() {  
            @Override  
            public void actionPerformed(ActionEvent e) {  
                if (isPlaying) {  
                    clip.stop();  
                    isPlaying = false;  
                    playButton.setEnabled(true);  
                    pauseButton.setEnabled(false);  
                }  
            }  
        });  
  
        // 添加按钮到窗口  
        JPanel panel = new JPanel();  
        panel.add(playButton);  
        panel.add(pauseButton);  
  
        add(panel, BorderLayout.CENTER);  
    }  
  
    public static void main(String[] args) {  
        SwingUtilities.invokeLater(() -> {  
            SimpleAudioPlayer player = new SimpleAudioPlayer();  
            player.setVisible(true);  
        });  
    }  
}

视频实战演练

问题描述:

编程实现视频的播放。该程序可以通过播放/暂停按钮来播放/暂停视频,使用重播按钮来重新播放视频,使用滑动条来控制音量。

java 复制代码
import javafx.application.Application;  
import javafx.scene.Scene;  
import javafx.scene.control.Button;  
import javafx.scene.control.Slider;  
import javafx.scene.layout.HBox;  
import javafx.scene.layout.StackPane;  
import javafx.scene.layout.VBox;  
import javafx.scene.media.Media;  
import javafx.scene.media.MediaPlayer;  
import javafx.scene.media.MediaView;  
import javafx.stage.Stage;  
  
public class VideoPlayerApp extends Application {  
  
    private MediaPlayer mediaPlayer;  
    private Media media;  
  
    @Override  
    public void start(Stage primaryStage) throws Exception {  
        // 设置视频文件路径  
        String mediaUrl = "file:///path/to/your/video.mp4"; // 注意文件路径需要是有效的  
        media = new Media(mediaUrl);  
        mediaPlayer = new MediaPlayer(media);  
  
        // 创建MediaView来显示视频  
        MediaView mediaView = new MediaView(mediaPlayer);  
  
        // 创建控制按钮  
        Button playPauseButton = new Button("Play");  
        playPauseButton.setOnAction(e -> {  
            if (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING) {  
                mediaPlayer.pause();  
                playPauseButton.setText("Play");  
            } else {  
                mediaPlayer.play();  
                playPauseButton.setText("Pause");  
            }  
        });  
  
        Button replayButton = new Button("Replay");  
        replayButton.setOnAction(e -> {  
            mediaPlayer.stop();  
            mediaPlayer.seek(media.getDuration().divide(2)); // 或者设置为0来从头开始  
            mediaPlayer.play();  
            playPauseButton.setText("Pause");  
        });  
  
        Slider volumeSlider = new Slider(0, 1, 1); // 音量控制,范围0到1  
        volumeSlider.valueProperty().addListener((obs, oldValue, newValue) -> {  
            mediaPlayer.setVolume(newValue.doubleValue());  
        });  
  
        // 布局  
        VBox vbox = new VBox(20, playPauseButton, replayButton, volumeSlider, mediaView);  
        vbox.setPadding(new javafx.geometry.Insets(10));  
  
        Scene scene = new Scene(vbox, 640, 480);  
  
        primaryStage.setTitle("Video Player with JavaFX");  
        primaryStage.setScene(scene);  
        primaryStage.show();  
  
        // 自动播放视频  
        mediaPlayer.play();  
    }  
  
    public static void main(String[] args) {  
        launch(args);  
    }  
}

博主用心写,读者点关注,互动传真情,知识不迷路。

相关推荐
清纯世纪1 分钟前
基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)
开发语言·python·深度学习
孤寂大仙v2 分钟前
【C++】STL----stack和queue常见用法
开发语言·c++
孤华暗香6 分钟前
Python快速入门 —— 第三节:类与对象
开发语言·python
Monodye14 分钟前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光21 分钟前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
元气代码鼠21 分钟前
C语言程序设计(进阶)
c语言·开发语言·算法
霍霍哈嗨34 分钟前
【QT基础】创建项目&项目代码解释
开发语言·qt
friklogff35 分钟前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net
无名指的等待71244 分钟前
SpringBoot中使用ElasticSearch
java·spring boot·后端
Tatakai251 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis