gpt4 book ai didi

kotlin - vlcj - 如何在播放前更改音频音量?

转载 作者:行者123 更新时间:2023-12-02 13:17:35 30 4
gpt4 key购买 nike

我试过这个

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
val result0: Boolean = player.audio().setVolume(50) // result0: true
player.media().play("/path/to/audio.ogg")
val result1: Boolean = player.audio().setVolume(50) // result1: false

还有这个

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
val result0 = player.audio().setVolume(50) // result0: true
player.media().prepare("/path/to/audio.ogg")
val result1: Boolean = player.audio().setVolume(50) // result1: false
player.controls().play()
val result2: Boolean = player.audio().setVolume(50) // result2: false

但音量保持在 100%。
我发现的唯一方法是制作这样的东西

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
player.events().addMediaPlayerEventListener(object : MediaPlayerEventAdapter() {
override fun mediaPlayerReady(mediaPlayer: MediaPlayer) {
mediaPlayer.submit {
mediaPlayer.audio().setVolume(50)
}
}
})
player.media().play("/path/to/audio.ogg")

但解决方案离理想有点远。因为它开始播放,播放一点,然后嗖嗖作响,音量变了。

我尝试了 vlcj 4.4.0 和 4.5.2、VLC 3.0.8 和 3.0.10、jdk8 和 14,但它的工作方式相同。

最佳答案

不幸的是,这在 VLC 3.x 中不起作用,但在即将到来的 VLC 4.x 中起作用(在撰写此答案时,VLC 4 仍在开发中)。

以下代码适用于我使用从源代码构建的最新 VLC 4 和最新的 vlcj-5 快照:

import uk.co.caprica.vlcj.player.component.AudioPlayerComponent;
import uk.co.caprica.vlcj.test.VlcjTest;

public class AudioMediaPlayerComponentTest extends VlcjTest {

public static void main(String[] args) throws Exception {
String mrl = "/home/music/some-cool-synthwave-tune.mp3";

AudioPlayerComponent audioMediaPlayerComponent = new AudioPlayerComponent();
audioMediaPlayerComponent.mediaPlayer().audio().setVolume(5);
audioMediaPlayerComponent.mediaPlayer().media().play(mrl);

Thread.currentThread().join();
}
}

媒体播放器的初始音量来自操作系统音量设置,实际上操作系统音量设置与媒体播放器双向关联。在一个地方改变音量会反射(reflect)在另一个地方。

通过 LibVLC 处理卷通常在 VLC 4 中似乎要好得多。

如果你被困在 VLC 3 上,这在目前是合理的,那么不幸的是你也被某种妥协的解决方案困住了,比如使用你已经找到的“就绪”事件。

就绪事件所做的只是等待第一个位置改变事件,并且该事件是专门为此类目的而创建的。

我测试了媒体播放器可用的所有 native 事件回调,在播放实际开始之前设置音量没有任何效果。

正如您已经发现的那样,这将为您留下以下内容:
import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.component.AudioPlayerComponent;
import uk.co.caprica.vlcj.test.VlcjTest;

public class AudioMediaPlayerComponentTest extends VlcjTest {

public static void main(String[] args) throws Exception {
String mrl = "/home/music/some-cool-synthwave-tune.mp3";

AudioPlayerComponent audioMediaPlayerComponent = new AudioPlayerComponent() {
@Override
public void mediaPlayerReady(MediaPlayer mediaPlayer) {
mediaPlayer.audio().setVolume(30);
}
};

audioMediaPlayerComponent.mediaPlayer().media().play(mrl);

Thread.currentThread().join();
}
}

一个完全横向的选择可能是播放尽可能短的无声媒体作为一种预卷 - 当该媒体完成时(您可以收听已完成或停止的事件),您应该能够设置音量并播放您的实际媒体。我没有尝试这个。

关于kotlin - vlcj - 如何在播放前更改音频音量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62307382/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com