Android - Высокое использование ресурсов телефона, вызывающее низкую громкость на одном наушнике?

Я использую libpd (Pure Data) на Android, чтобы создать приложение, которое можно использовать в качестве слухового аппарата с низким бюджетом. Мой оригинальный дизайн для "аудио движка" имел 7 фильтров, а громкость у обоих наушников была одинаковой. Я изменил дизайн, чтобы иметь 14 фильтров, и теперь правые наушники имеют низкую громкость.

Запуск двигателя на моем ноутбуке дает одинаковый объем на обоих ушах. Я попытался запустить всю обработку звука на своем собственном потоке, но я не уверен, правильно ли я это сделал.

Таким образом, чтобы свести вопрос.

  1. Является ли низкая громкость на одном ухе возможным побочным эффектом использования слишком большого количества ресурсов?
  2. Правильна ли моя реализация создания нового потока?

    public class CircleOfFifths extends Activity {
    
    private static final String TAG = "GuitarTuner";
    private PdUiDispatcher dispatcher;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initGui();
    
        new Thread(new Runnable() { 
            public void run(){        
                try {
                    initPd();
                    loadPatch();
                } catch (IOException e) {
                    Log.e(TAG, e.toString());
                    finish();
                }            }
        }).start();
    
    
    
    }
    
    private void initGui() {
        setContentView(R.layout.main);
    }
    
    private void initPd() throws IOException {
        // Configure the audio glue
        // int sampleRate = AudioParameters.suggestSampleRate();
    
        int sampleRate = AudioParameters.suggestSampleRate();
        int inpch = AudioParameters.suggestInputChannels();
        int outch = AudioParameters.suggestOutputChannels();
        PdAudio.initAudio(sampleRate, inpch, outch, 4, true);
    
        // Create and install the dispatcher dispatcher = new PdUiDispatcher();
        // PdBase.setReceiver(dispatcher);
    }
    
    private void loadPatch() throws IOException {
        File dir = getFilesDir();
        IoUtils.extractZipResource(getResources().openRawResource(R.raw.patch),
                dir, true);
        File patchFile = new File(dir, "microphone.pd");
        PdBase.openPatch(patchFile.getAbsolutePath());
        PdAudio.startAudio(this);
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        PdAudio.startAudio(this);
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        PdAudio.stopAudio();
    }
    }
    

1 ответ

Решение

Использование слишком большого количества процессоров не должно влиять на объем вообще. Скорее всего, один из ваших фильтров вызывает усиление менее 1 на этом канале.

Ваша тема выглядит хорошо для меня. Я не уверен на 100%, что вызов финиша в потоке, не связанном с пользовательским интерфейсом, является законным, но если это не так, вы можете добавить туда runOnUiThread

Другие вопросы по тегам