Сбой приложения с фатальным сигналом 6 (SIGABRT) при попытке создать синусоидальный звук выше 12000 кГц

#android #audio #sigabrt #audiotrack

#Android #Аудио #sigabrt #audiotrack

Вопрос:

Я пытаюсь создать синусоидальный звук с частотой 20 Гц-20 кГц. Я могу создавать синусоидальную волну только до 12 кГц. После этого приложение завершает работу со следующей ошибкой

A / libc: фатальный сигнал 6 (SIGABRT), код -6 (SI_TKILL) в tid 30692 (AudioTrack), pid 30615 (генератор синусоидальной волны)

Прикрепляю код, который я использовал.

MainActivity

 Thread waveGeneratorThread = new Thread(new Runnable() {
    @Override
    public void run() {
        if (frequency >= 20 amp;amp; frequency <= 20000) {
            wave.setWave((int) frequency);
            boolean on = tb1.isChecked();
            if (on) {
                wave.start();
            } else {
                wave.stop();
            }
        }
    }
});
 

Класс Java PlayWave

 private final int sampleRate = 192000;
private AudioTrack audioTrack;
int buffersize = AudioTrack.getMinBufferSize(sampleRate,
        AudioFormat.CHANNEL_OUT_MONO,
        AudioFormat.ENCODING_PCM_16BIT);
private int sampleCount;

public PlayWave() {
    audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            sampleRate,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            buffersize,
            AudioTrack.MODE_STATIC);
}

public void setWave(int frequency) {
    sampleCount = (int) ((float) sampleRate / frequency);
    short samples[] = new short[sampleCount];
    int amplitude = 32767;
    double twopi = Math.PI * 2;
    double phase = 0;

    for (int i = 0; i < sampleCount; i  ) {
        samples[i] = (short) (amplitude * Math.sin(phase));
        phase  = twopi * frequency / sampleRate;

    }
    audioTrack.write(samples, 0, sampleCount);
}

public void start() {
    audioTrack.reloadStaticData();
    audioTrack.setLoopPoints(0, sampleCount, -1);
    audioTrack.play();
}

public void stop() {
    audioTrack.stop();
}
 

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

1. Какова частота дискретизации?

2. Сначала попробовал с 44100 Гц. Но приложение выходит из строя после создания 8 кГц .. Затем попробовал с частотой 192000Hz, затем wave, пока не было создано 12 кГц.