Java 哪一个jar文件可以用于在android中播放音频文件
当我在google上搜索时,我发现了一个用netbeans创建的java程序来计算歌曲的bpm。它处理了很多JAR文件 我在我的android应用程序中使用了相同的代码,它显示了很多错误,因为只丢失了一个JAR文件。我添加了JLayer1.0.1jar文件,所有错误都被清除了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,这些歌曲
现在应用程序运行良好,但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资源管理器中检查歌曲