0

这是我在 SO 上的第一篇文章,我正在尝试将我的音乐技能与计算机科学结合起来。

我正在使用带有 gradle 4.5、Nexus 5X、API 25、Android 7.1.1、Windows 7 的 Android Studio 3.1.2。
我非常小心地遵循了这些说明:

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

  2. 下载.jarTarsosDSP 并包含在

    C:\Users\Carlos\AndroidStudioProjects\Pitchbender\app\libs\TarsosDSP-Android-latest
    
  3. 我检查了build.gradle我的项目:

    dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) }
    
  4. 在我的项目中,Android Studio自动完成了以下导入:

    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import be.tarsos.dsp.AudioEvent
    import be.tarsos.dsp.io.android.AudioDispatcherFactory
    import be.tarsos.dsp.pitch.PitchDetectionHandler
    import be.tarsos.dsp.pitch.PitchDetectionResult
    import be.tarsos.dsp.pitch.PitchProcessor
    import kotlinx.android.synthetic.main.activity_main.*
    import be.tarsos.dsp.pitch.PitchProcessor.PitchEstimationAlgorithm
    import be.tarsos.dsp.AudioProcessor
    import android.widget.TextView
    import be.tarsos.dsp.AudioDispatcher
    
  5. 我的清单文件中有此权限

    uses-permission android:name=”android.permission.RECORD_AUDIO”  
    
  6. Android Studio提供了将以下代码的第一行转换为 Kotlin 的选项:

    AudioDispatcher dispatcher =  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中是否有任何简单的项目,以便我可以看到我的错误是什么?

4

1 回答 1

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();
    }
于 2019-09-05T15:17:22.310 回答