Невозможно получить вывод из библиотеки Pd и приложения Android

Я пытаюсь заставить простое приложение для Android работать с библиотекой Pd, которую я интегрировал в свою среду затмения.

Я успешно собрал и скомпилировал пример проекта под названием "CircleOfFifths", который доказывает, что библиотека отлично интегрирована в eclipse.

Я использую cordova/phonegap и пытаюсь создать плагин для libpd. Все взаимодействие плагинов с файлом javascript на внешнем интерфейсе работает нормально.

Код, кажется, инициализирует и прекрасно загружает патч. Это также входит в метод play(), но я не получаю никакого вывода. Я ожидаю услышать синусоидальную волну.

Я следовал этому руководству на YouTube.

Мой код можно посмотреть здесь, а патч здесь.

Может кто-нибудь помочь мне понять, где я могу пойти не так?

Моя конечная цель - использовать живое аудио с микрофона и обрабатывать это аудио и немедленно возвращать его с примененным патчем Pd (патч готов и создан для этого), но перед тем, как перейти к этому этапу, я хочу убедиться, что я получаю какой-то вывод из существующего патча. Тот же патч, что и выше в учебнике YouTube.

package com.test.libpd;

import java.io.File;
import java.io.IOException;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
import org.json.JSONException;
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 android.content.Context;
import android.util.Log;

import com.sgil.libpddemo.R;

public class Libpd extends CordovaPlugin {
private static final String TAG = "libpd_plugin";
private Exception exception;
private Context AppContext;
private PdUiDispatcher dispatcher;
private static final int MIN_SAMPLE_RATE = 44100;

public Libpd() { // constructor
}

private Context getApplicationContext() {
    return this.cordova.getActivity().getApplicationContext();
}

public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);
    Log.v(TAG, "Init LIBPD PLUGIN");
}

public boolean execute(final String action, final JSONArray args,
        final CallbackContext callbackContext) throws JSONException {

    cordova.getActivity().runOnUiThread(new Runnable() {
        // @SuppressLint("NewApi")
        public void run() {

            Log.v(TAG, "Plugin received:" + action);
            Libpd libpd = new Libpd();
            libpd.AppContext = getApplicationContext();

            try {
                libpd.initPd(libpd.AppContext);
                libpd.loadPatch(libpd.AppContext);
            } catch (IOException e) {
                Log.e(TAG, e.toString());
                // libpd.finish();

            }

            if (action.equals("playRec")) {
                // MediaRecordMethod mediaRecordMethod = new
                // MediaRecordMethod(action);
                // mediaRecordMethod.init();

                libpd.play();
            }

            if (action.equals("stopRec")) {
                libpd.onPause();
            }

            if (action.equals("startRec")) {
                libpd.record("start");
                libpd.play();
            }

        }

    });
    return true;
}

private void initPd(Context ctx) throws IOException {
    AudioParameters.init(ctx);
    // Configure the audio glue
    int sampleRate = AudioParameters.suggestSampleRate();
    int srate = Math.max(MIN_SAMPLE_RATE, AudioParameters.suggestSampleRate());
    // int sampleRate = 64;

    int inpch = AudioParameters.suggestInputChannels();
    int outpch = AudioParameters.suggestOutputChannels();

    PdAudio.initAudio(srate, 0, outpch, 8, true);

    // Create and install the dispatcher
    dispatcher = new PdUiDispatcher();
    PdBase.setReceiver(dispatcher);
}

private void loadPatch(Context ctx) throws IOException {

    File dir = ctx.getFilesDir();
    Log.v(TAG, "path:" + dir.getAbsolutePath().toString());

    //File dir = new File("/sdcard/mypatches");

    IoUtils.extractZipResource(
            ctx.getResources().openRawResource(R.raw.simplepatch), dir, true);
    File patchFile = new File(dir, "simplepatch.pd");
    PdBase.openPatch(patchFile.getAbsolutePath());
    //PdAudio.startAudio(ctx);
    //this.record("start");
}

private void record(String startorStop) {
    if (startorStop.equals("start")) {
        PdBase.sendSymbol("recordfilename", "x.aiff");
        PdBase.sendBang("openfile");
        PdBase.sendBang("record");
    } else {
        PdBase.sendBang("stoprecording");
    }
}

// play back the last recording from the file called 'recorded'
public void play() {
    //PdBase.sendSymbol("playfilename", "x.aiff");
    //PdBase.sendBang("readfile");
    //PdBase.sendBang("play");

    Float val = 1.0f;
    PdBase.sendFloat("onOff", val);
}

protected void onPause() {
    PdAudio.stopAudio();
    PdAudio.release();
    PdBase.release();
}

}

1 ответ

Ваш код никогда не запускает аудиообработку.

По каким-то причинам вы не прокомментировали строку

PdAudio.startAudio(ctx)
Другие вопросы по тегам