2016-07-19 17 views
0

Ich benutze einen Patch, um einen Peaking-Filter zu implementieren (mit Biquad ~) gegeben Freq/q/Gain.libpd mit Android - Patch spielt keinen Ton bei der Verwendung von Ausdruck in Patch

Der Patch funktioniert gut in Pd, aber wenn ich es mit Android Studio verwende, bekomme ich keinen Ton. In Android Studio werden keine Fehler angezeigt, der Patch lädt einwandfrei, nur kein Ton.

Wenn ich den Abschnitt des Patches wegnehmen, der die f/q/g-Parameter in Filterkoeffizienten umwandelt und einfach 5 Zufallskoeffizienten gibt, funktioniert das Patch gut.

Daher nehme ich an, dass das Problem mit dem expr-Objekt ist, außer dass es sonst nicht viel mehr gibt. Gibt es etwas Spezifisches, das ich meinem Android Studio-Projekt aufgrund der Verwendung von Ausdruck hinzufügen müsste?

Biquad Patch with Expr

Dieser Patch funktioniert nicht.

Biquad Patch without Expr

Dieser Patch funktioniert.

Meine Java-Datei sieht wie folgt aus:

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(); 
    } 
} 

Hier ist ein Link zu meiner vollen Projekt Android Studio. https://www.dropbox.com/s/aorji4heum8jvbc/PDAudioIO.zip?dl=0

Jede Hilfe wird sehr geschätzt !!

Antwort

1

Ich hatte ähnliche Probleme bei der Verwendung von libPD innerhalb von Android und iOS. Es sieht so aus, als ob die meisten Ihrer Ausdrücke mit nativen pd-vanilla-Objekten behandelt werden könnten (aber es wird etwas ausführlicher sein), so dass das Umcodieren der Ausdrücke das Problem wahrscheinlich beheben würde. Wenn Sie dies noch nicht tun, sollten Sie Ihre libPD-Patches lieber über PD-Vanilla als über PD-Extended oder PD-L2Ork testen.