Android.Media.MediaRecorder-录制音频时出现延迟,并保持沉默

时间:2020-02-01 11:25:14

标签: c# android xamarin mediarecorder android-mediarecorder

请帮助解决问题。要录制音频文件,我使用Android.Media.MediaRecorder。结果,在文件的开头和结尾,我得到了一个静音时间为650毫秒的节。结果发现,短语的开头和结尾部分都没有记录,只有静音。

public static async Task Record(CancellationToken token)
    {
        try
        {
            var filename = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/temp.amr";
            var tmp = new Java.IO.File(filename);
            if (tmp.Exists()) tmp.Delete();
            var recorder = new MediaRecorder();
            recorder.SetAudioSource(AudioSource.Mic);
            recorder.SetOutputFormat(OutputFormat.AmrNb);
            recorder.SetAudioEncoder(AudioEncoder.AmrNb);
            recorder.SetOutputFile(filename);
            recorder.Prepare();
            recorder.Start();
            try
            {
                var div = MAX_RECORD_TIME / 100;
                for(int i=0; i<div; i++)
                {
                    IncrementProgressBar(100 / div);
                    await Task.Delay(div, token);
                }
                fSave = true;
            }
            catch (OperationCanceledException) { }
            recorder.Stop();
        }
        catch (Exception e)
        {
            string s = context.GetText(Resource.String.err_unexpected) + "\r" + e.Message;
            handler.ToastMessage(s, ToastLength.Short);
        }
    }

2 个答案:

答案 0 :(得分:1)

此问题无法通过代码解决,似乎是硬件问题。 您可以在默认的“相机”应用中看到相同的延迟,该应用也使用MediaRecorder。 不幸的是,某些设备的行为会有所不同。

解决方案是使用AudioRecorder类,因为它更接近于硬件,因此更加灵活

答案 1 :(得分:0)

为自己找到了解决方案。以下代码正在运行,可能对某人有用。

        $(tableBody).find('tr').each(function () {
            if ($(this).find('input:checkbox').prop("checked") == true) {
                resultList.fill(parseInt($(this).find('input:checkbox').attr('result-id')));
            }
        });