C# 在Xamarin Android中录制时访问MediaRecorder字节
我想在录制过程中访问由C# 在Xamarin Android中录制时访问MediaRecorder字节,c#,android,xamarin,audio-recording,mediarecorder,C#,Android,Xamarin,Audio Recording,Mediarecorder,我想在录制过程中访问由MediaRecorder录制的音频字节,以便将它们与UdpClient一起发送到服务器应用程序 我可以通过AudioRecord执行以下操作(注意while(true)循环) 但是我不知道如何从MediaRecorder中提取字节,这样我就可以做类似的事情了。我看到的大多数示例仅在录制完成后使用文件,如和中的以下示例代码 我不想在开始发送之前等待完整的录音。我不需要MediaRecorder来录制文件,只要让我访问字节即可。但是,如果既可以写入文件,又可以发送字节,那就很
MediaRecorder
录制的音频字节,以便将它们与UdpClient一起发送到服务器应用程序
我可以通过AudioRecord
执行以下操作(注意while(true)
循环)
但是我不知道如何从MediaRecorder中提取字节,这样我就可以做类似的事情了。我看到的大多数示例仅在录制完成后使用文件,如和中的以下示例代码
我不想在开始发送之前等待完整的录音。我不需要
MediaRecorder
来录制文件,只要让我访问字节即可。但是,如果既可以写入文件,又可以发送字节,那就很好了。有没有办法做到这一点,也许是通过使用ParcelFileDescriptor
或其他什么方法?你有没有发现这个问题?没有,我只是坚持用AudioRecord
。有人找到了答案吗?
endRecording = false;
isRecording = true;
audioBuffer = new Byte[1024];
audioRecord = new AudioRecord (
// Hardware source of recording.
AudioSource.Mic,
// Frequency
11025,
// Mono or stereo
ChannelIn.Mono,
// Audio encoding
Android.Media.Encoding.Pcm16bit,
// Length of the audio clip.
audioBuffer.Length
);
audioRecord.StartRecording ();
while (true) {
if (endRecording) {
endRecording = false;
break;
}
try {
// Keep reading the buffer while there is audio input.
int numBytes = await audioRecord.ReadAsync (audioBuffer, 0, audioBuffer.Length);
//Send the audio data with the DataReceived event where it gets send over UdpClient in the Activity code
byte[] encoded = audioBuffer; //TODO: encode audio data, for now just stick with regular PCM audio
DataReceived(encoded);
} catch (Exception ex) {
Console.Out.WriteLine (ex.Message);
break;
}
}
audioRecord.Stop ();
audioRecord.Release ();
isRecording = false;