这是我在stackoverflow中的第一篇文章。我正在尝试将音乐技能与计算机科学相结合。
我正在将Android Studio 3.1.2与gradle 4.5,Nexus 5X,API 25,Android 7.1.1,Windows 7配合使用
我非常仔细地遵循了说明:
创建一个名为Pitchbender的项目
从TarsosDSP下载.jar,并包含在C:\ Users \ Carlos \ AndroidStudioProjects \ Pitchbender \ app \ libs \ TarsosDSP-Android-latest
我检查了项目的build.gradle:
依赖项{ 实现fileTree(dir:'libs',包括:['* .jar'])…。
在我的项目中,我有以下由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
清单文件中有漏洞
uses-permission android:name =” android.permission.RECORD_AUDIO”
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中有任何简单的项目,所以我可以看到我的错误是什么
感谢一百万
道格拉斯·洛佩兹
答案 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();
}