我的应用程序上有一个简单的逻辑,可以找到一定的音高
问题是逻辑是在应用程序的OnCreate方法中(它必须在应用程序运行的那一刻检测到音高)。
这有点难看,因为我打算在应用程序启动时添加更多逻辑
有没有人有任何建议如何将该代码移动到另一个类,以便可以从那里调用它?
该类仍然必须访问主要活动中的视图。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult,
AudioEvent audioEvent) {
final float pitchInHz = pitchDetectionResult.getPitch();
runOnUiThread(new Runnable() {
@Override
public void run() {
Float value = pitchInHz;
Toast.makeText(getApplicationContext(),value.tostring(), Toast.LENGTH_SHORT).show();
}
});
}
}));
foo = new Thread(dispatcher,"Audio Dispatcher");
foo.start();
}
答案 0 :(得分:1)
基本上,您有两种方法可以使代码更清晰。
onCreate()
中的所有代码(前两行除外)移到另一个方法中,假设为lookForPitch()
。然后,您可以在onCreate()
。如果您计划创建更多专注于音频处理的方法,则可以创建单独的类,例如AudioUtils.java
。此util类应包含公共静态方法,您可以从代码中的任何位置调用它们。如果是onCreate()
,您可以这样称呼它:AudioUtils.lookForPitch()
。此外,如果您想处理仅在您的Activity中可访问的视图,您可以将它们作为参数传递。因此,AudioUtils
中的方法可能如下所示:
public static void lookForPitch(TextView myTextView) {
// your code goes here
}
答案 1 :(得分:-1)
让它成为一种方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLongAndSweetMethod();
}
private void myLongAndSweetMethod(){
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult,
AudioEvent audioEvent) {
final float pitchInHz = pitchDetectionResult.getPitch();
runOnUiThread(new Runnable() {
@Override
public void run() {
Float value = pitchInHz;
Toast.makeText(getApplicationContext(),value.tostring(), Toast.LENGTH_SHORT).show();
}
});
}
}));
foo = new Thread(dispatcher,"Audio Dispatcher");
foo.start();
}
然后使用Android Studio的Code folding隐藏它。
答案 2 :(得分:-1)
如果你想提高你的代码的可读性,我可以推荐这本书"清洁代码:敏捷软件工艺手册"罗伯特C.马丁(又名叔叔鲍勃)。
这本书真的很棒!它帮助我做了很多工作,使我的代码更干净,更易于阅读。如果你想成为一名专业的软件开发人员,那么你应该阅读这本书。