我想在android手机中录制声音6秒钟,.wav中的采样率为8000hz

问题描述 投票:1回答:1
if(checkSelfPermissionFromDevice() )
    {
        btnRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pathSave= Environment.getExternalStorageDirectory()
                        .getAbsolutePath()+"/"
                        + UUID.randomUUID().toString()+"_audio_record.wav";
                mediaRecorder.setAudioChannels(1);
                mediaRecorder.setAudioSamplingRate(8000);
                mediaRecorder.setAudioEncodingBitRate(44100);
                setupMediaRecorder();

                try
                {
                    mediaRecorder.prepare();
                    mediaRecorder.start();
                }
                catch (IOException e)
                {
                    e.printStackTrace();

                }
                btnPlay.setEnabled(false);
                btnStop.setEnabled(false);

                Toast.makeText(MainActivity.this, "Recording...", Toast.LENGTH_SHORT).show();
                //add delay of 6 seconds+then stop recording

                //Toast.makeText(MainActivity.this, "Stopped Recording", Toast.LENGTH_SHORT).show();

                //then enable  play button()
                btnPlay.setEnabled(true);
                btnStop.setEnabled(false);

我想增加6秒的延迟,以便在此之后我可以停止记录,或者仅通过传递参数使用内置功能记录6秒,请指导...

java android audio mediarecorder
1个回答
0
投票

您可以使用android.os.Handler功能使用postDelayed延迟6秒运行一些代码。 Handler Documentation

示例代码:

Handler h = new Handler();
h.postDelayed(() -> {
    // stop the recording here
}, 6 * 1000);

一个关键点是,您不应使用Thread.sleep()之类的东西将主线程暂停6秒钟,因为那样会损害用户体验,并且android系统将显示一个对话框,表明该应用程序无响应。因此,您应该安排停止时间(例如使用处理程序),并同时让主线程运行,以便更新UI并做出响应。

© www.soinside.com 2019 - 2024. All rights reserved.