Android - Высокое использование ресурсов телефона, вызывающее низкую громкость на одном наушнике?
Я использую libpd (Pure Data) на Android, чтобы создать приложение, которое можно использовать в качестве слухового аппарата с низким бюджетом. Мой оригинальный дизайн для "аудио движка" имел 7 фильтров, а громкость у обоих наушников была одинаковой. Я изменил дизайн, чтобы иметь 14 фильтров, и теперь правые наушники имеют низкую громкость.
Запуск двигателя на моем ноутбуке дает одинаковый объем на обоих ушах. Я попытался запустить всю обработку звука на своем собственном потоке, но я не уверен, правильно ли я это сделал.
Таким образом, чтобы свести вопрос.
- Является ли низкая громкость на одном ухе возможным побочным эффектом использования слишком большого количества ресурсов?
Правильна ли моя реализация создания нового потока?
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