我在Android上使用libpd(纯数据),以便创建一个可用作低预算助听器的应用程序。我的原始设计是"音频引擎"有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();
}
}
答案 0 :(得分:1)
使用太多CPU根本不会影响音量。您的过滤器似乎更有可能导致该通道上的增益小于1。
你的帖子看起来很好。我不是100%确定在非UI线程上调用完成是合法的,但如果不是,那么你可以在那里添加runOnUiThread