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

Kotlin vlcj-如何在播放前更改音频音量?,kotlin,libvlc,vlcj,Kotlin,Libvlc,Vlcj,我试过这个 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

我试过这个

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(对象:MediaPlayerEventTapter()){
覆盖趣味mediaPlayerReady(mediaPlayer:mediaPlayer){
mediaPlayer.submit{
mediaPlayer.audio()设置音量(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();
    }
}
媒体播放器的初始音量来自操作系统音量设置,事实上,操作系统音量设置以两种方式链接到媒体播放器。在一个位置更改音量会反映在另一个位置

在VLC4中,通过LibVLC进行的卷处理通常看起来要好得多

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

就绪事件所做的一切就是等待第一个位置更改事件,而该事件是专门为达到类似目的而创建的折衷方案

我测试了所有可用于媒体播放器的本机事件回调,但在播放真正开始之前,没有任何东西可以设置音量

正如您已经发现的那样,这将留给您以下内容:

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();
    }
}

一个完全横向的替代方案可能是播放尽可能短的静默媒体作为一种预滚动-当该媒体完成时(有一个已完成或已停止的事件,您可以收听),您应该能够设置音量并播放您的实际媒体。我没有尝试过这一点。

没有答案,因为我不知道它是否会工作,但最近添加的StartPause()API可能会对此有所帮助-而不是播放/开始尝试StartPause,设置音量,然后播放。一般来说,我认为您应该能够在播放之前设置音量,但不确定为什么它不起作用。StartPause()对我不起作用。我只是在Windows上进行了检查。在这里也是这样。至于
startPause()
API,我的结果与anko相同。而且,至少在Windows上,它会播放一点点,然后才会暂停。知道这一次我不是一个土豆,这让我松了一口气!使用无声媒体的解决方案正是我最终使用的解决方案,我还没有在我的应用程序中尝试它,但在测试期间它工作正常。同时,感谢您为维护图书馆所付出的努力!对于凉爽的synthwave曲调:)