c# - Android.Media.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);
}
}
解决方案
这个问题无法通过代码解决,看来是硬件问题。您可以在默认的相机应用程序中看到相同的延迟,该应用程序也使用MediaRecorder
. 不幸的是,某些设备的行为会有所不同。
解决方案是使用AudioRecorder
更灵活的类,因为它更接近硬件
推荐阅读
- haskell - ReaderT 设计模式:参数化环境
- ionic-framework - 带有用于whatsapp的pdf文件的Ionic SocialSharing
- java - 为什么创建方法比将变量声明为字段更好?
- java - RadioButton值增量减量使用Java
- spring - Spring Boot - 如何检查连接池中的活动连接数
- c# - 在 Windows 窗体中实现 MediaPlayer 和 MediaTimeline
- python - 字符串列表:获取“类型错误”浮动对象不可下标
- r - 如何通过 bookdown::render_book 构建乳胶 kable?
- subset - 子集缺失值
- maven - 如何将 maven 插件转换为 gradle 插件(maven-surefire-puglin)?