gpt4 book ai didi

java - Android 上的 libpd - 在补丁中使用 expr 时补丁不会播放声音

转载 作者:行者123 更新时间:2023-12-01 09:40:54 25 4
gpt4 key购买 nike

我正在使用补丁来实现给定频率/q/增益的峰值滤波器(使用双二阶~)。

该补丁在 Pd 中运行良好,但是当与 Android Studio 一起使用时,我听不到声音。 Android Studio 中没有显示任何错误,补丁加载正常,只是没有声音。

如果我去掉补丁中将 f/q/g 参数转换为滤波器系数的部分,只给出 5 个随机系数,则补丁可以正常工作。

因此,我认为问题出在 expr 对象上,因为除此之外,没有太多其他额外的东西。由于使用 expr,是否有任何特定内容需要添加到我的 Android Studio 项目中?

Biquad Patch with Expr

这个补丁不起作用。

Biquad Patch without 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

非常感谢任何帮助!!

最佳答案

我在 Android 和 iOS 中使用 libPD 时也遇到过类似的问题。看起来大多数表达式都可以使用 native pd-vanilla 对象来处理(但它会更冗长一些),因此重新编码表达式可能会解决问题。如果您还没有这样做,最好通过 PD-Vanilla 而不是 PD-extend 或 PD-L2Ork 来测试您的 libPD 补丁。

关于java - Android 上的 libpd - 在补丁中使用 expr 时补丁不会播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com