libpd с Android - Patch не воспроизводит звук при использовании expr в патче
Я использую патч для реализации фильтра пиков (используя biquad~), заданного freq/q/gain.
Патч отлично работает в Pd, однако при использовании его с Android Studio звук не получается. В Android Studio ошибок нет, патч загружается нормально, просто нет звука.
Если я уберу часть патча, преобразующую параметры f/q/g в коэффициенты фильтра, и просто введу 5 случайных коэффициентов, патч будет работать нормально.
Таким образом, я предполагаю, что проблема связана с объектом expr, кроме того, здесь нет ничего лишнего. Есть ли что-то конкретное, что я должен добавить в свой проект Android Studio из-за использования expr?
Этот патч не работает.
Этот патч работает.
Мой файл Java выглядит так:
package com.example.mark.pdaudioio;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.TextView;
import org.puredata.android.io.AudioParameters;
import org.puredata.android.io.PdAudio;
import org.puredata.android.utils.PdUiDispatcher;
import org.puredata.core.PdBase;
import org.puredata.core.utils.IoUtils;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
TextView volumeTextViewJava;
SeekBar volumeSeekBarJava;
int volume = 0;
private PdUiDispatcher dispatcher;
private void initPD() throws IOException{
int sampleRate = AudioParameters.suggestSampleRate();
int inpch = AudioParameters.suggestInputChannels();
PdAudio.initAudio(sampleRate, inpch, 2, 8, true);
dispatcher = new PdUiDispatcher();
PdBase.setReceiver(dispatcher);
}
private void initGUI(){
Switch onOffSwitch = (Switch) findViewById(R.id.onOffSwitch);
onOffSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
float val = (isChecked) ? 1.0f : 0.0f;
PdBase.sendFloat("onOffPD",val);
}
});
volumeTextViewJava = (TextView) findViewById(R.id.volumeTextView);
volumeSeekBarJava = (SeekBar) findViewById(R.id.volumeSeekBar);
volumeSeekBarJava.setMax(100);
volumeSeekBarJava.incrementProgressBy(1);
volumeSeekBarJava.setProgress(0);
volumeSeekBarJava.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int volProgress, boolean fromUser) {
volume = volProgress;
float volumeFloat = (float) volume;
PdBase.sendFloat("volumePD", volumeFloat);
volumeTextViewJava.setText("vol: " + volProgress);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
private void loadPDPatch() throws IOException{
File dir = getFilesDir();
IoUtils.extractZipResource(getResources().openRawResource(R.raw.simplepatch),dir,true);
File pdPatch = new File(dir, "Biquad_WithExpr.pd");
PdBase.openPatch(pdPatch.getAbsolutePath());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try{
initPD();
loadPDPatch();
}catch (IOException e){
finish();
}
initGUI();
}
@Override
protected void onResume(){
super.onResume();
PdAudio.startAudio(this);
}
@Override
protected void onPause(){
super.onPause();
PdAudio.stopAudio();
}
}
Вот ссылка на мой полный проект Android Studio. https://www.dropbox.com/s/aorji4heum8jvbc/PDAudioIO.zip?dl=0
Любая помощь на всех с благодарностью!
1 ответ
У меня были похожие проблемы при использовании libPD в Android и iOS. Похоже, что большинство ваших выражений может быть обработано с использованием нативных объектов pd-vanilla (но это будет немного более многословно), поэтому перекодирование выражений, скорее всего, решит проблему. Если вы этого еще не сделали, рекомендуется проверять исправления libPD с помощью PD-Vanilla, а не PD-extended или PD-L2Ork.