VLCJ通过单个java程序控制多个音频文件

VLCJ通过单个java程序控制多个音频文件,java,audio,vlcj,Java,Audio,Vlcj,我想通过vlcj(旧版本3.10.1)从单个java进程播放多个音频文件。下面是我为播放两个文件中的音频而编写的java代码片段:- NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "video-plugins"); Native.load(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); for (int i = 0; i < 2; i+

我想通过vlcj(旧版本3.10.1)从单个java进程播放多个音频文件。下面是我为播放两个文件中的音频而编写的java代码片段:-

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "video-plugins");
Native.load(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
for (int i = 0; i < 2; i++) {
            List<String> vlcArgs = new ArrayList<String>();
            vlcArgs.add("--no-video");
            MediaPlayerFactory factory = new MediaPlayerFactory(vlcArgs);
            MediaPlayer mediaPlayer = factory.newHeadlessMediaPlayer();
            if (i == 0)
                mediaPlayer.startMedia("D:\\a.mp4");
            else
                mediaPlayer.startMedia("D:\\b.mp4");
            mediaPlayer.setVolume(10 * (i + 10));
        }
        Thread.currentThread().join(); 
nativellibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),“视频插件”);
load(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
对于(int i=0;i<2;i++){
List vlcArgs=new ArrayList();
添加(“--无视频”);
MediaPlayerFactory=新MediaPlayerFactory(vlcArgs);
MediaPlayer MediaPlayer=factory.newHeadlessMediaPlayer();
如果(i==0)
mediaPlayer.startMedia(“D:\\a.mp4”);
其他的
mediaPlayer.startMedia(“D:\\b.mp4”);
mediaPlayer.setVolume(10*(i+10));
}
Thread.currentThread().join();
在这个示例程序中,我正在播放来自两个文件的音频,并希望从windows控制面板的“声音”部分分别控制它们(静音、取消静音、更改单个文件的音频音量),但我在windows 10混音器中只看到一个“VLC媒体播放器”。(请参见下面的附图)

我认为这是因为播放两个文件的音频时使用了相同的MediaPlayerFactory实例,然后我调整了MediaPlayerFactory,但没有效果,我在Windows10混音器中只看到一个“VLC媒体播放器”。如果我在windows 10中从“VLC Media Player”更改音量,它会对两个文件的音频执行操作

有没有一种方法可以通过vlcj从单个java程序分别播放这两个文件,以便它们可以单独控制


虽然,我可以从两个不同的java程序分别运行这两个文件,但它将在windows声音部分显示两个“VLC媒体播放器”,但这不是我想要的。我想通过vlcj控制单个java程序中的多个文件。

这在您使用的VLC/LibVLC版本(3.x)中无法实现

同一进程中的所有本机媒体播放器实例共享相同的音频控件

不过,我听说这可能取决于正在使用的音频输出插件,但在Linux上,我个人从未见过这种工作

对即将推出的VLC/libvlc4.x的早期测试提供了一些希望,即在未来,您确实可以获得单独的音频控制,但在撰写此答案时,VLC版本可能还有一段路要走

简而言之,这里没有什么可以“修复”的


您可以在不同的进程中运行多个媒体播放器,并以某种方式控制它们,但这并不简单。

非常感谢Caprica。感谢您的回复,从您的回复中,我确信现在我需要为我的用例运行单独的java进程。通过java程序控制混合是否适合您的情况?有许多库可以帮助实现这一点,它们在最终混合输出到本地操作系统之前处理各种跟踪。如果你想体验,试试vlcj。我之所以这么问是因为我写了一个叫做AudioCue的类。它就像一个增强的剪辑。使用它,您可以实时更改音量、平移和速度,并且可以同时播放相同的提示。如果您可以通过Java而不是在操作系统级别控制提示,那么它可能是一个很好的解决方案。但我不能从你写的东西中确定这是否是一个合适的解决方案。可以在github.com/philfrei/AudioCue上找到。谢谢,我看到了。不错的库,但我怀疑它是否能够播放HDMI音频。但是无论如何,知道这一点是很有帮助的,我会看看我是否能在将来的用例中使用它。