Java 在vlcj中,什么';这是“什么?”;级别“;通过AudioTrackInfo?
我发现了vlcj,并尝试了一些方法和教程。我在寻找“声压级”(如VUMeters)。在AudioTrackInfo中,我发现了一个有趣的方法,叫做“Level”。但它返回0。为什么?这个级别是我要找的“声压”吗?如果没有,如何获得该值 以下是我在试用中使用的简单(肮脏)代码: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
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项目提交请求!