Android Studio中的TarsosDSP

时间:2018-10-01 14:14:05

标签: android-studio tarsosdsp

这是我在stackoverflow中的第一篇文章。我正在尝试将音乐技能与计算机科学相结合。

我正在将Android Studio 3.1.2与gradle 4.5,Nexus 5X,API 25,Android 7.1.1,Windows 7配合使用

我非常仔细地遵循了说明:

  1. 创建一个名为Pitchbender的项目

  2. 从TarsosDSP下载.jar,并包含在C:\ Users \ Carlos \ AndroidStudioProjects \ Pitchbender \ app \ libs \ TarsosDSP-Android-latest

  3. 我检查了项目的build.gradle:

    依赖项{ 实现fileTree(dir:'libs',包括:['* .jar'])…。

  4. 在我的项目中,我有以下由android studio自动完成的导入:

    导入android.support.v7.app.AppCompatActivity

    导入android.os.Bundle

    导入android.view.View

    导入be.tarsos.dsp.AudioEvent

    导入be.tarsos.dsp.io.android.AudioDispatcherFactory

    导入be.tarsos.dsp.pitch.PitchDetectionHandler

    导入be.tarsos.dsp.pitch.PitchDetectionResult

    导入be.tarsos.dsp.pitch.PitchProcessor

    导入kotlinx.android.synthetic.main.activity_main。*

    导入be.tarsos.dsp.pitch.PitchProcessor.PitchEstimationAlgorithm

    导入be.tarsos.dsp.AudioProcessor

    导入android.widget.TextView

    导入be.tarsos.dsp.AudioDispatcher

  5. 清单文件中有漏洞

    uses-permission android:name =” android.permission.RECORD_AUDIO”

  6. Android Studio允许将以下代码的第一行转换为Kotlin:

    AudioDispatcher调度程序=

    AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

如果我对kotlin转换回答“否”,则出现以下编译错误:

分隔符“ AudioDispatcher”没有任何伴随对象,因此必须在此处初始化。该怎么办?

如果我对kotlin转换问题回答“是”,则该陈述将转换为  val dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0)

,然后,当我运行此程序时,android通知存在错误并关闭我的项目,并继续关闭我的项目。该怎么办?

请帮助至少运行完整代码的第一条指令:

PitchDetectionHandler pdh = new PitchDetectionHandler() {
    @Override
    public void handlePitch(PitchDetectionResult res, AudioEvent e){
        final float pitchInHz = res.getPitch();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                processPitch(pitchInHz);
            }
        });
    }
};
AudioProcessor pitchProcessor = new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
dispatcher.addAudioProcessor(pitchProcessor);

Thread audioThread = new Thread(dispatcher, "Audio Thread");
audioThread.start();

问题:

您在android studio中有任何简单的项目,所以我可以看到我的错误是什么

感谢一百万

道格拉斯·洛佩兹

1 个答案:

答案 0 :(得分:0)

当我尝试运行此示例时遇到了类似的问题,而我的解决方案(2019年9月)是添加记录许可权的运行时确认。我不确定是否是同样的情况,buuuut

这是我的代码:

private boolean permissionToRecordAccepted = false;
    private String [] permissions = {Manifest.permission.RECORD_AUDIO};
    private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case REQUEST_RECORD_AUDIO_PERMISSION:
                permissionToRecordAccepted  = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                break;
        }
        if (!permissionToRecordAccepted ) finish();
    }