2016-07-19 4 views
0

주어진 주파수/q/게인을 사용하는 피킹 필터 (biquad ~를 사용)를 구현하기위한 패치를 사용하고 있습니다.안드로이드와 함께 libpd 패치에서 expr을 사용할 때 패치가 소리를 내지 않는다

패치는 Pd에서 잘 작동하지만 Android Studio에서 사용하면 소리가 나지 않습니다. Android Studio에 오류가 표시되지 않으며 패치가 잘로드되고 소리가 들리지 않습니다.

f/q/g 매개 변수를 필터 계수로 변환하는 부분을 제거하고 5 개의 임의 계수를 제공하면 패치가 올바르게 작동합니다.

따라서 expr 개체 외에 다른 추가 작업은 없다고 가정합니다. expr을 사용하기 때문에 Android Studio 프로젝트에 추가해야 할 것이 있습니까?

Biquad Patch with Expr

이 패치가 작동하지 않습니다.

Biquad Patch without Expr

이 패치 작업을 수행합니다. 여기

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

을 내 전체 안드로이드 Studio 프로젝트에 대한 링크입니다 :

내 자바 파일은 다음과 같다. https://www.dropbox.com/s/aorji4heum8jvbc/PDAudioIO.zip?dl=0

전혀 도움이되지 않습니다.

답변

1

Android 및 iOS에서 libPD를 사용할 때 비슷한 문제가있었습니다. 대부분의 표현식이 기본 pd-vanilla 객체를 사용하여 처리 될 수있는 것처럼 보이지만 표현식을 기록하면 문제가 해결 될 수 있습니다. 아직 그렇게하지 않았다면 PD 확장 또는 PD-L2Ork가 아닌 PD-Vanilla를 통해 libPD 패치를 테스트하는 것이 좋습니다.