какой файл jar можно использовать для воспроизведения аудиофайла в Android

#java #android #jar #media-player

#java #Android #jar #Медиаплеер

Вопрос:

Когда я искал в Google, я нашел Java-программу, созданную в netbeans для вычисления bpm песни. Он работал с большим количеством файлов JAR.

Я использовал тот же код для своего приложения для Android, и оно показало множество ошибок из-за отсутствия только одного файла JAR. Я добавил файл jar JLayer1.0.1, и все ошибки были устранены.

Сейчас приложение работает хорошо, но вычисление 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;
    }
}
  

Комментарии:

1. «Это дает время в минуту для песни, которое составляет менее 1 минуты, но другие песни не всегда обрабатываются в течение часа. И песни не воспроизводятся в фоновом режиме.» — что означает эта строка в вашем вопросе?

2. это означает, что он выдает bpm песни длительностью от 1 до 2 минут, но не получает песни длительностью более 2 минут. Либо происходит сбой, либо обнаружение bpm более часа. В коде Java, когда bpm будет показан, когда песня будет закончена после воспроизведения, там я могу слышать песню, но в Android project я не могу слышать песню, которая воспроизводится

3. вот что я имею в виду………..

4. Хорошо .. это делает все намного понятнее. Почему бы вам не опубликовать код?

5. вы уверены, что в песнях, с которыми ваше приложение не работает, есть информация о BPM проверьте песни в проводнике Windows с помощью свойств