为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Vaadin 14 中播放声音?

如何在 Vaadin 14 中播放声音?

杨__羊羊 2023-09-13 10:59:56
我想在我使用 .wav 开发的应用程序之一中播放声音(.wav,作为 byte[])Vaadin 14。不幸的是我没有找到适合这个用例的组件。Vaadin 8 提供了Audio( https://vaadin.com/api/framework/8.5.2/com/vaadin/ui/Audio.html ),但在 Vaadin 14 中不可用。我认为只需使用并导入它就有一个解决方案HTML <audio>。<body>  <audio src="test.wav" controls autoplay loop>    </audio></body>还有一个“Vaadin 14”解决方案吗?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

V14 中没有开箱即用的组件,但很容易制作一个自己的组件,如下所述:使用 Element API 创建简单组件:)


所以我简单地检查了一下,这似乎有效:


AudioPlayer.java


import com.vaadin.flow.component.Component;

import com.vaadin.flow.component.Tag;


@Tag("audio")

public class AudioPlayer  extends Component {


    public AudioPlayer(){

        getElement().setAttribute("controls",true);


    }


    public  void setSource(String path){

        getElement().setProperty("src",path);

    }

}


使用:


AudioPlayer player=new AudioPlayer();

player.setSource("https://file-examples.com/wp-content/uploads/2017/11/file_example_WAV_1MG.wav");

add(player);

我本地没有任何音乐文件,因此从互联网上随机获取了一些音乐文件并作为来源传递。当然,这不是一个万无一失的解决方案,只是一个概念证明:)


查看完整回答
反对 回复 2023-09-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我想为那些可能使用流的人添加一个简短的补充。


阿纳斯米的 AudioPlayer.java:


public void setSource(final AbstractStreamResource resource) {

    getElement().setAttribute("src", resource);

}

要使其正常工作,您必须设置流的内容类型:


var stream = new StreamResource("foo", () -> {

                        byte[] data = getBytesFromFileMP3(soundfile);

                        return new ByteArrayInputStream(data); })

                        .setContentType("audio/mpeg"); // For MP3


查看完整回答
反对 回复 2023-09-13
?
慕森卡

TA贡献1806条经验 获得超8个赞

如果你想故意播放声音(比如点击按钮或类似的东西时),你可以用这种方式添加方法播放:


public void play() {

    getElement().callJsFunction("play");

}

希望它能帮助某人。


查看完整回答
反对 回复 2023-09-13
  • 3 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信