Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在vlcj中,什么';这是“什么?”;级别“;通过AudioTrackInfo?_Java_Vlcj - Fatal编程技术网

Java 在vlcj中,什么';这是“什么?”;级别“;通过AudioTrackInfo?

Java 在vlcj中,什么';这是“什么?”;级别“;通过AudioTrackInfo?,java,vlcj,Java,Vlcj,我发现了vlcj,并尝试了一些方法和教程。我在寻找“声压级”(如VUMeters)。在AudioTrackInfo中,我发现了一个有趣的方法,叫做“Level”。但它返回0。为什么?这个级别是我要找的“声压”吗?如果没有,如何获得该值 以下是我在试用中使用的简单(肮脏)代码: import java.util.List; import uk.co.caprica.vlcj.component.AudioMediaPlayerComponent; import uk.co.caprica.vlc

我发现了vlcj,并尝试了一些方法和教程。我在寻找“声压级”(如VUMeters)。在AudioTrackInfo中,我发现了一个有趣的方法,叫做“Level”。但它返回0。为什么?这个级别是我要找的“声压”吗?如果没有,如何获得该值

以下是我在试用中使用的简单(肮脏)代码:

import java.util.List;

import uk.co.caprica.vlcj.component.AudioMediaPlayerComponent;
import uk.co.caprica.vlcj.player.AudioTrackInfo;
import uk.co.caprica.vlcj.player.MediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.TrackInfo;
import uk.co.caprica.vlcj.player.TrackType;

public class BasicAudioPlayer {

private final AudioMediaPlayerComponent mpc;
private static String[] playList = new String[] {
        "Sam Brown - Stop (Official Music Video) - YouTube.mp3",
        "Bon Jovi - Bed Of Roses - YouTube.mp3",
        "Kendji Girac - Conmigo - YouTube.mp3",
        "http://live.radiooxygene.fr:7710/"};

private BasicAudioPlayer() {
    mpc = new AudioMediaPlayerComponent();

    mpc.getMediaPlayer().addMediaPlayerEventListener(new MediaPlayerEventAdapter() {
        @Override
        public void stopped(MediaPlayer mediaPlayer) {
            exit(0);
        }

        @Override
        public void finished(MediaPlayer mediaPlayer) {
            exit(0);
        }

        @Override
        public void error(MediaPlayer mediaPlayer) {
            exit(1);
        }
    });

}

private void prepare(String mrl) {
    mpc.getMediaPlayer().prepareMedia(mrl);
    mpc.getMediaPlayer().parseMedia();

}

private void start(String mrl) {
    mpc.getMediaPlayer().playMedia(mrl);
    //I introduce a threadsleep just for the trial
    //to be sure that I'm not in the fade-in of the song
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    List<TrackInfo> trackInfo = mpc.getMediaPlayer().getTrackInfo(TrackType.AUDIO);
    for (TrackInfo track : trackInfo) {
        if (track instanceof AudioTrackInfo) {
            AudioTrackInfo audioTrack = (AudioTrackInfo) track;
            System.out.println(audioTrack.toString());
            System.out.println(audioTrack.level());
        }
    }
}

private void exit (int result) {
    mpc.release();
    System.exit(result);
}

public static void main(String[] args) {
    BasicAudioPlayer bap = new BasicAudioPlayer();
    bap.prepare(playList[2]);
    bap.start(playList[2]);
    try {
        Thread.currentThread().join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

}
import java.util.List;
导入uk.co.caprica.vlcj.component.AudioMediaPlayerComponent;
导入uk.co.caprica.vlcj.player.AudioTrackInfo;
import uk.co.caprica.vlcj.player.MediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
导入uk.co.caprica.vlcj.player.TrackInfo;
导入uk.co.caprica.vlcj.player.TrackType;
公共类BasicAudioPlayer{
私人最终音频媒体播放器组件mpc;
私有静态字符串[]播放列表=新字符串[]{
“Sam Brown-Stop(官方音乐视频)-YouTube.mp3”,
“Bon Jovi-玫瑰之床-YouTube.mp3”,
“Kendji Girac-Conmigo-YouTube.mp3”,
"http://live.radiooxygene.fr:7710/"};
私人BasicAudioPlayer(){
mpc=新的AudioMediaPlayerComponent();
mpc.getMediaPlayer().addMediaPlayerEventListener(新的MediaPlayerEventTapter()){
@凌驾
公共无效已停止(MediaPlayer MediaPlayer){
出口(0);
}
@凌驾
公共无效已完成(MediaPlayer MediaPlayer){
出口(0);
}
@凌驾
公共无效错误(MediaPlayer){
出口(1);
}
});
}
专用作废准备(字符串mrl){
mpc.getMediaPlayer().prepareMedia(mrl);
mpc.getMediaPlayer().parseMedia();
}
私有无效开始(字符串mrl){
mpc.getMediaPlayer().playMedia(mrl);
//我介绍了一个线程睡眠只是为了试验
//为了确保我不会在这首歌中消失
试一试{
睡眠(5000);
}捕捉(中断异常e){
e、 printStackTrace();
}
List trackInfo=mpc.getMediaPlayer().getTrackInfo(TrackType.AUDIO);
用于(轨迹信息轨迹:轨迹信息){
if(AudioTrackInfo的曲目实例){
AudioTrackInfo audioTrack=(AudioTrackInfo)曲目;
System.out.println(audioTrack.toString());
System.out.println(audioTrack.level());
}
}
}
私有无效退出(int结果){
mpc.release();
系统退出(结果);
}
公共静态void main(字符串[]args){
BasicAudioPlayer bap=新BasicAudioPlayer();
准备(播放列表[2]);
bap.start(播放列表[2]);
试一试{
Thread.currentThread().join();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}

谢谢你的回答。关于。

我不知道确切的“级别”属性是什么,但它类似于用于准备曲目的编码器级别

不管是什么,都不是你想要的

要获得所需的“压力”数据,您需要使用“直接”音频播放器-这使您可以访问本机音频采样缓冲区,然后对其进行频率分析

缺点是,如果您像这样捕获音频样本数据,那么VLC实际上不会播放音频-您必须自己播放

对于vlcj,这基本上意味着使用JavaAPI来播放它。例如,JavaSound API可以播放它。vlcj测试源中有一个例子说明了这一点。此答案中的代码太多,无法复制,您可以在此处找到:


好的,太好了。示例代码运行良好^^^我现在将添加使用java.sound播放的.waf文件使用的“视觉视觉视觉视觉测量仪”。你想我把我用于VU电表的代码贴在什么地方吗?当然,贴代码取决于你,但肯定能看到它会很有趣。我建议创建一个gihub项目,或者如果您想将代码作为vlcj示例捐赠,请随时向vlcj项目提交请求!