簡體   English   中英

帶有Android的libpd-在補丁中使用expr時補丁不播放聲音

[英]libpd with Android - Patch doesn't play sound when using expr in patch

我在給定頻率/增益/增益的情況下使用補丁來實現峰值濾波器(使用biquad〜)。

該補丁在Pd中可以正常工作,但是與Android Studio一起使用時,我聽不到聲音。 Android Studio中未顯示任何錯誤,該補丁加載正常,只有聲音。

如果我刪除了將f / q / g參數轉換為濾波器系數的補丁部分,並僅給出了5個隨機系數,則補丁工作正常。

因此,我認為問題出在expr對象上,除此之外,沒有太多其他事情了。 由於使用expr,我有什么要添加到Android Studio項目中的特定內容嗎?

具有Expr的Biquad補丁

此補丁不起作用。

沒有Expr的Biquad補丁

此修補程序確實有效。

我的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

任何幫助都將不勝感激!

在Android和iOS上同時使用libPD時,我遇到了類似的問題。 看起來您的大多數表達式都可以使用本機pd-vanilla對象處理(但會更加冗長),因此重新編碼表達式可能會解決此問題。 如果您還沒有這樣做,那么最好通過PD-Vanilla而不是PD擴展或PD-L2Ork測試libPD補丁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM