首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止失败,使用TarsosDSP的安卓应用程序

停止失败,使用TarsosDSP的安卓应用程序
EN

Stack Overflow用户
提问于 2014-07-03 20:42:02
回答 2查看 1.4K关注 0票数 1

我想在这个链接上使用TarsosDSP包实现一个安卓应用程序:

https://github.com/srubin/TarsosDSP/releases/tag/TarsosDSPAndroid-v3-MAD

我为startRecording和stopRecording创建了两个按钮,我的应用程序可以“启动”,但不能“停止”。我的MainActivity是这样的:

代码语言:javascript
复制
public class MainActivity extends ActionBarActivity {

    private Button start;
    private Button stop;

MicrophoneAudioDispatcher audioDispatcher = new MicrophoneAudioDispatcher(44100, 2048, 1024);

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

        setButtonHandlers();


        start = (Button) findViewById(R.id.btStart);
        stop = (Button) findViewById(R.id.btStop);
}

    private void setButtonHandlers() {
        ((Button)findViewById(R.id.btStart)).setOnClickListener(btnClick);
        ((Button)findViewById(R.id.btStop)).setOnClickListener(btnClick);
    }




    private void startRecording() {
        audioDispatcher.run();
       }

    private void stopRecording() { 
        audioDispatcher.stop();
    }

private View.OnClickListener btnClick = new View.OnClickListener() {

        public void onClick(View v) {

            switch(v.getId()){
            case R.id.btStart:{

                startRecording();
                break;
            }
            case R.id.btStop:{

                stopRecording();

                break;

            }
            }
        };
    };
}

"MicrophoneAudioDispatcher“类位于此链接上:

https://github.com/srubin/TarsosDSP/blob/master/src/be/hogent/tarsos/dsp/MicrophoneAudioDispatcher.java

我不明白这个错误。有人能帮我吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-12-24 10:35:11

您必须为AudioDispatcher初始化一个线程,以便直接调用AudioDispatcher.run()。

代码语言:javascript
复制
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
    dispatcher.addAudioProcessor(new PitchProcessor(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() {
                    mFrequencyView.setText(String.valueOf(pitchInHz));
                }
            });
        }
    }));
    new Thread(dispatcher, "Audio Dispatcher").start();

线程将一直运行,直到您调用AudioDispatcher.stop()。重要的是要避免线程停留在后台。

代码语言:javascript
复制
@Override
protected void onPause() {
    super.onPause();
    dispatcher.stop();
}
票数 4
EN

Stack Overflow用户

发布于 2014-09-25 17:45:00

首先,你提到的链接(TarsosDSPAndroid-v3-MAD)是一个兼容安卓的TarsosDSP分支。因为有一段时间不再需要它了,就像official site上描述的那样

不再需要GitHub用户

为加州大学伯克利分校的一项编程任务创建的TarsosDSP分支。

与你的主要问题相关的是,你不应该手动调用AudioDispatcher的run(),它应该像上面的链接中提到的那样从单独的线程中调用,类似这样:

代码语言:javascript
复制
new Thread(dispatcher,"Audio Dispatcher").start();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24554000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档