当前位置: 首页 > 知识库问答 >
问题:

JavaFx媒体字节

慎芷阳
2023-03-14

我想从mp3文件在java程序中创建一个声波。我研究发现,对于wav文件,我需要使用AudioInputStream并计算字节数组。。。从mp3文件中,我使用JavaFX媒体和媒体播放器。Inputstream中的字节是否与Javafx媒体中的相同。getSource()。getBytes()?音频输入流无法读取mp3。。。

或者,我应该如何获得一个mp3文件的声波值?

来自AudioInputStream的字节:

AudioInputStream audioInputStream;
        try {
            audioInputStream = AudioSystem.getAudioInputStream(next);

            int frameLength = (int) audioInputStream.getFrameLength();
            int frameSize = (int) audioInputStream.getFormat().getFrameSize();

            byte[] bytes = new byte[frameLength * frameSize];

            g2.setColor(Color.MAGENTA);
            for(int p = 0; p < bytes.length; p++){
                g2.fillRect(20 + (p * 3), 50, 2, bytes[p]);
            }
        } catch (UnsupportedAudioFileException | IOException e) {

            e.printStackTrace();
        }

从JavaFX:

Media media;
MediaPlayer player;

media = new Media("blablafile");
player = new Mediaplayer(media);

byte[] bytes = media.getSource().getBytes();

共有1个答案

强志学
2023-03-14

JavaFXMediaAPI没有像Java10那样提供太多的底层支持。它的设计似乎只具备播放媒体所必需的功能,而没有显著地操纵媒体。

话虽如此,您可能想看看AudioSpectrumListener。我不能保证它会给你你想要的(我不熟悉计算机音频的概念),但它可以让你创造你的声波;至少是一个粗糙的表示。

您可以使用相应的属性将AudioSpectrumListenerMediaPlayer一起使用。

如果您的计算不必是实时的,那么您可以提前使用:

byte[] bytes = URI.create(media.getSource()).toURL().openStream().readAllBytes();

但是,请注意,如果媒体是远程的,您将下载两次字节;一次获取声波的字节,另一次使用MediaPlayer实际播放媒体时。

此外,您希望在后台线程而不是JavaFX应用程序线程上执行上述操作,以避免冻结UI的可能性。

 类似资料:
  • 我在JavaFX的小游戏中工作。我有一个管理音乐的实用类:

  • 我对JavaFXMediaPlayer有问题。出于测试目的,我从http://docs.oracle.com/javafx/2/media/playercontrol.htm并添加了一些错误处理。使用以下错误处理时 我得到这个控制台输出: 视频采用h264和aac(音频)编码,分辨率为1920x1168px。分辨率大于1920x1080px的每个视频都会出现此错误。分辨率为1920x1080px或

  • 这可能不是一个可以接受的问题,但我现在非常绝望。 我需要一个同步java媒体播放器与快速寻找和平衡修改。 脚本: 我有一个javaFX项目,我必须在循环中播放一个非常短(50-100毫秒)的媒体文件。问题是,在重新启动之前,我需要等待一些要求。 简而言之:播放声音- javafx提供了一个我修改过的媒体播放器。 如果有人能为我指出正确的方向(图书馆/我错过的东西),我将不胜感激 ps允许的java

  • 最初,我试图从javafx项目中创建跨平台的可执行文件。一切正常,所以我想在我的项目中添加音频,所以我在在我添加javafx媒体依赖性之前,一切都很好,但现在我得到了一个错误,也不能解析媒体类。如何解决这个问题? 仅供参考,我正在使用: 项目:Maven Java:JDK 13 IDE:netbean 13 Javafx:openjfx 11 下面是我的项目结构: 如果你需要更多的澄清,请告诉我。

  • 我目前在一个项目中使用Javafx 2,我可能需要长时间无限循环播放一个视频。在windows上,当视频播放时,我的proifiler工具显示非常正常的图片,cpu负载不是很重(在2个内核上运行时约为2x40-50%),内存使用峰值约为250 MB,这是正常的。但是,当我在Ubuntu机器上部署应用程序时,每个内核的cpu负载达到70%左右(尽管它是一个双核atom处理器,所以假设这是正常的),内

  • 媒体组件包括哪些大型媒体对象,比如图片、视频、音频,等等。 Material 盒子 Material 盒子是来源于Lightbox 插件的 material design。当用户单击图片它会变大。Material 盒子平滑的使图片居中并且变大。再次单击还原。或者通过ESC键。 创建上面图片的效果,只要增加一个 materialboxed 类到图片标签中。 <img class="materialb