Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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 哪一个jar文件可以用于在android中播放音频文件_Java_Android_Jar_Media Player - Fatal编程技术网

Java 哪一个jar文件可以用于在android中播放音频文件

Java 哪一个jar文件可以用于在android中播放音频文件,java,android,jar,media-player,Java,Android,Jar,Media Player,当我在google上搜索时,我发现了一个用netbeans创建的java程序来计算歌曲的bpm。它处理了很多JAR文件 我在我的android应用程序中使用了相同的代码,它显示了很多错误,因为只丢失了一个JAR文件。我添加了JLayer1.0.1jar文件,所有错误都被清除了 现在应用程序运行良好,但bpm计算产生了一些新问题。它给出了一首歌曲的bpm值,该值小于1分钟,但其他歌曲并不总是在播放过程中持续一小时。而且歌曲没有在后台播放 当我检查Java程序时,它正在计算所有歌曲的bpm,这些歌曲

当我在google上搜索时,我发现了一个用netbeans创建的java程序来计算歌曲的bpm。它处理了很多JAR文件

我在我的android应用程序中使用了相同的代码,它显示了很多错误,因为只丢失了一个JAR文件。我添加了JLayer1.0.1jar文件,所有错误都被清除了


现在应用程序运行良好,但bpm计算产生了一些新问题。它给出了一首歌曲的bpm值,该值小于1分钟,但其他歌曲并不总是在播放过程中持续一小时。而且歌曲没有在后台播放

当我检查Java程序时,它正在计算所有歌曲的bpm,这些歌曲已经播放,我可以听到

我现在面临的问题是什么?这都是因为JAR文件吗?我应该使用其他JAR文件吗?请帮助我的朋友

我正在添加代码的一部分

Player player = new Player(new FileInputStream("//sdcard//taxi.mp3"), output);

    public class BPM2SampleProcessor implements SampleProcessor {

        private Queue<Long> energyBuffer = new LinkedList<Long>();

        private int bufferLength = 43;

        private long sampleSize = 1024;
        private long frequency = 44100;
        private long samples = 0;
        private long beats = 0;
        private static int beatThreshold = 3;
        private int beatTriggers = 0;

        private List<Integer> bpmList = new LinkedList<Integer>();

        public void process(long[] sample) {
            energyBuffer.offer(sample[0]);
            samples++;
            if(energyBuffer.size() > bufferLength) {
                energyBuffer.poll();
                double averageEnergy = 0;
                for(long l : energyBuffer)
                    averageEnergy += l;
                averageEnergy /= bufferLength;

                double C = 1.3; //a * variance + b;
                boolean beat = sample[0] > C * averageEnergy;
                if(beat)
                {
                    if(++beatTriggers == beatThreshold)
                        beats ++;
                }
                else
                {
                    beatTriggers = 0;
                }

                if(samples > frequency * 5 / sampleSize) {
                    bpmList.add(getInstantBPM());
                    beats = 0;
                    samples = 0;
                }
            }
        }

        public void init(int freq, int channels) {
            frequency = freq;
        }


        public int getInstantBPM() {
            return (int)((beats * frequency * 60) / (samples * sampleSize));
        }

        public int getBPM() {
            Collections.sort(bpmList);
            return bpmList.get(bpmList.size() / 2);
        }

        public long getSampleSize() {
            return sampleSize;
        }

        public void setSampleSize(long sampleSize) {
            this.sampleSize = sampleSize;
        }

}

public class EnergyOutputAudioDevice extends BaseOutputAudioDevice {
    private int averageLength = 1024; // number of samples over which the average is calculated
    private Queue<Short> instantBuffer = new LinkedList<Short>();

    public EnergyOutputAudioDevice(SampleProcessor processor) {
        super(processor);
    }

    @Override
    protected void outputImpl(short[] samples, int offs, int len) throws JavaLayerException {
        for(int i=0; i<len; i++)
            instantBuffer.offer(samples[i]);

        while(instantBuffer.size()>averageLength*channels)
        {
            long energy = 0;
            for(int i=0; i<averageLength*channels; i++)
                energy += Math.pow(instantBuffer.poll(), 2);

            if(processor != null)
                processor.process(new long[] { energy });
        }
    }

    public int getAverageLength() {
        return averageLength;
    }

    public void setAverageLength(int averageLength) {
        this.averageLength = averageLength;
    }
}
Player Player=new Player(新文件输入流(“//sdcard//taxi.mp3”),输出);
公共类BPM2SampleProcessor实现SampleProcessor{
private Queue energyBuffer=new LinkedList();
私有int bufferLength=43;
私有长样本大小=1024;
专用长频=44100;
私有长样本=0;
私人长拍=0;
私有静态阈值=3;
私有整数=0;
私有列表bpmList=新链接列表();
公共作废流程(长[]样本){
energyBuffer.报价(样本[0]);
样本++;
if(energyBuffer.size()>bufferLength){
energyBuffer.poll();
双平均能量=0;
用于(长l:能量缓冲)
平均能量+=l;
平均能量/=缓冲长度;
双C=1.3;//a*方差+b;
布尔拍=样本[0]>C*平均能量;
如果(节拍)
{
如果(++beatTriggers==beatThreshold)
beats++;
}
其他的
{
beatTriggers=0;
}
如果(样本>频率*5/样本大小){
bpmList.add(getInstantBPM());
节拍=0;
样本=0;
}
}
}
公共void init(整数频率,整数通道){
频率=频率;
}
public int getInstantBPM(){
返回值(int)((拍数*频率*60)/(样本*样本化));
}
公共int getBPM(){
Collections.sort(bpmList);
返回bpmList.get(bpmList.size()/2);
}
公共长getSampleSize(){
返回样本;
}
公共无效设置样本大小(长样本大小){
this.sampleSize=sampleSize;
}
}
公共类EnergyOutputAudioDevice扩展了BaseOutputAudioDevice{
private int averageLength=1024;//计算平均值的样本数
private Queue instantBuffer=new LinkedList();
公共能源音频设备(采样处理器){
超级处理器;
}
@凌驾
受保护的void outputinpl(short[]示例、int offs、int len)引发JavaLayerException{
对于(int i=0;平均长度*通道)
{
长能量=0;

对于(int i=0;i)“它给出了一首歌曲的bpm,该歌曲的bpm小于1分钟,但其他歌曲并不总是在播放过程中持续一小时。并且这些歌曲不会在后台播放。”-你问题中的这一行是什么意思?这意味着它给出了持续时间约为1到2分钟的歌曲的bpm,但没有得到持续时间超过2分钟的歌曲。它要么崩溃,要么检测bpm超过一小时。在java代码中,当播放完歌曲后bpm将显示时,t在这里,我可以听到歌曲,但在android项目中,我听不到播放的歌曲这就是我的意思…………好吧……这让它更清楚了。为什么不发布代码?你确定应用程序不工作的歌曲有BPM信息吗?请使用属性在windows资源管理器中检查歌曲“它给出了一首歌曲的bpm,该歌曲的播放时间不到1分钟,但其他歌曲并不总是在播放过程中持续一小时。而且这些歌曲没有在后台播放。"-你问题中的这一行是什么意思?这意味着它给出了持续时间约为1到2分钟的歌曲的bpm,但没有得到持续时间超过2分钟的歌曲。它要么崩溃,要么检测bpm超过一小时。在java代码中,当播放完歌曲后bpm将显示时,t在这里,我可以听到歌曲,但在android项目中,我听不到播放的歌曲这就是我的意思…………好吧……这让它更清楚了。为什么不发布代码?你确定应用程序不工作的歌曲有BPM信息吗?请使用属性在windows资源管理器中检查歌曲