Android-приложение Metronome Ошибка AudioTrack releaseBuffer ()

Я пытаюсь создать звучащее метрономное приложение для Android. Прямо сейчас у меня есть AudioTrack, который я создаю и нажимаю кнопку воспроизведения для инициализации. Затем я записываю байты PCM в буфер и использую AudioTrack.writeSound() для записи в буфер. Сначала я пишу в буфер

        for(int i=0;i<this.tick;i++) {
            soundTickArray[i] = tick[i];
        }
        for(int i=0;i<silence;i++)
            silenceSoundArray[i] = 0;
    }

Затем я пишу в audioTrack после того, как он был преобразован в PCM последовательно, как это в цикле.

        do {
            audioGenerator.writeSound(soundTickArray);
            audioGenerator.writeSound(silenceSoundArray);
        } while(running);

в цикле while, пока он не будет завершен в другом потоке.

Проблема в том, что я продолжаю получать эту ошибку.

Трек releaseBuffer() 0xb491b280 отключен из-за предыдущего опустошения, перезапуск

И метроном не останавливается.

У кого-нибудь есть какие-либо предложения относительно того, почему это происходит или как это решить.

Или какие-либо другие предложения по запуску последовательных ударов метронома, которые не запаздывают и являются точными? Я пытался использовать SoundPool, но столкнулся с задержкой.

Спасибо!


person Gozie K    schedule 15.05.2015    source источник


Ответы (1)


Это относится к точности метронома.

Когда вы делаете подобные вещи, вы обычно должны убедиться, что ваши удары контролируются постоянным импульсом, который соответствует вашей частоте дискретизации. То есть, для точного определения времени ритма вам необходимо контролировать щелчки метронома с управляющей частотой, которая соответствует вашей частоте дискретизации.

Распространенным решением этой проблемы является создание прямоугольной волны, которая работает с частотой дискретизации вашего аудио. Затем пользователь настраивает частоту этой прямоугольной волны, чтобы она соответствовала BPM вашего метронома. Затем, всякий раз, когда эта прямоугольная волна производит 1 или -1, вы используете ее для запуска ваших аудиосэмплов.

Однако лучшим решением для этого является получение доступа к вашим аудио часам на звуковой карте компьютера. Взгляните на эту веб-страницу, которая объясняет это более подробно;

http://www.javaperformancetuning.com/articles/soundtimer.shtml

person PicnicTripper    schedule 15.05.2015
comment
Спасибо за информацию, но я все еще не уверен в ошибке releaseBuffer(). Это заставляет мое приложение зависать. - person Gozie K; 16.05.2015
comment
аудио часы на компах звуковая карта мужик, он прошил на андроид :/ - person Marian Paździoch; 13.02.2019