2

Androidでlibpdを使用してwaveファイルを再生するにはどうすればよいですか? でこれを行うことができますがsoundpool.play、libpd を試してみたいと思います。このチュートリアルに従ってlibpd を実装しましたが、機能しません。何が間違っている可能性がありますか?コードまたは PD パッチ?

これは私の活動コードです:

public class MainActivity extends ActionBarActivity implements OnTouchListener {

    private PdUiDispatcher dispatcher;

    private void initPD() throws IOException {
        int sampleRate = AudioParameters.suggestSampleRate();
        PdAudio.initAudio(sampleRate, 0, 2, 8, true);

        dispatcher = new PdUiDispatcher();
        PdBase.setReceiver(dispatcher);
    }

    private void loadPDPatch() throws IOException {
        File dir = getFilesDir();
        IoUtils.extractZipResource(getResources().openRawResource(R.raw.playaudio), dir, true);
        File pdPatch = new File(dir, "playaudio.pd");
        PdBase.openPatch(pdPatch.getAbsolutePath());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bangButton = (Button) findViewById(R.id.bangButton);
        bangButton.setOnTouchListener(this);

        try {
            initPD();
            loadPDPatch();
            PdAudio.startAudio(this);

        } catch (IOException e) {
            finish();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        PdAudio.startAudio(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        PdAudio.stopAudio();
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN)
            if(v.getId() == R.id.bangButton) {
                PdBase.sendBang("mybang");
            }

        return false;
    }
}

これは私の pd パッチです:

PureData パッチ

#N canvas 0 22 902 577 24;
#X obj 46 24 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#X obj 47 248 dac~;
#X obj 48 193 readsf~;
#X obj 49 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 42 61 \; pd dsp \$1;
#X msg 50 155 open myfile.wav \, 1;
#X connect 0 0 4 0;
#X connect 2 0 1 0;
#X connect 3 0 5 0;
#X connect 5 0 2 0;
4

3 に答える 3

1

エラーは Pd パッチにあります。

mybangPd-patch 内のシンボルに強打を送信しています。

ただし、パッチでその名前に接続されているレシーバーがないように見えるため、イベントは Pd 内で何もトリガーしません。

  • [send mybang]オブジェクトによってトリガーされる別のものがありbngます(ただし、それは単にボイドに送信されます)。

  • [bng]オブジェクトには受信ラベルが設定されている場合がありますが、

    • スクリーンショットによると、受信ラベルがまったく設定されていません (そうであればインレットは消えますが、少し読みにくいです)。

    • receive-label があった場合mybang、クリックする[bng]と無限再帰がトリガーされます ( [bng]=> [s mybang]-> [bng]...)

一般的なエラー

output of [bng]:メッセージのファンアウト (1 つのアウトレットを複数のメッセージ インレットに接続する場合)を行うべきではありません。実行順序が未定義になるためです。これらの場合に使用[trigger]します。

[readsf~]:の最後のアウトレット[readsf~]は、デフォルトでモノプレーヤーです。このオブジェクトの最後のアウトレットはbang、サウンドファイルの再生が終了するたびに を提供します。bangの 2 番目のインレットに[dac~](シグナルを予期して) を送信すると、エラーになります。ステレオ サウンドファイル プレーヤーが必要な場合は、[readsf~ 2]

解決

したがって、パッチは次のようになります。

[bng]
|
[s mybang]

[r mybang]
|
[open myfile.wav, 1(
|
[readsf~ 2]
|     |
[dac~ ]
于 2015-08-26T10:25:39.040 に答える