Android Studio меняет скорость воспроизведения аудио для API<23

Я хочу сыграть саундтрек, где мне нужен полный контроль над скоростью воспроизведения. Я пробовал несколько способов сделать это в Android Studio, но я сталкиваюсь со следующими проблемами:

  • мой уровень API 19, поэтому я не могу использовать MediaPlayer для изменения скорости
  • SoundPool должен проигрывать короткие звуки и останавливаться через несколько секунд музыки

Что еще я мог попробовать?

1 ответ

Решение

Что-то вроде этого:

public class AudioActivity extends Activity {
AudioTrack audio = new AudioTrack(AudioManager.STREAM_MUSIC,
        44100,
        AudioFormat.CHANNEL_OUT_STEREO,
        AudioFormat.ENCODING_PCM_16BIT,
        intSize, //size of pcm file to read in bytes
        AudioTrack.MODE_STATIC);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //read track from file
        File file = new File(getFilesDir(), fileName);

        int size = (int) file.length();
        byte[] data = new byte[size];

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            fileInputStream.read(data, 0, size);
            fileInputStream.close();

            audio.write(data, 0, data.length);
        } catch (IOException e) {}
    }

    //change playback speed by factor
    void changeSpeed(double factor) {
        audio.setPlaybackRate((int) (audio.getPlaybackRate() * factor));
    }
}
Другие вопросы по тегам