无论我做什么,我都无法让Android AudioRecord课程与Pcm-Float一起使用。
这是我的代码:
public AndroidAudioDriver(Sensor sensor, int desiredSampleRate)
{
_sensor = sensor;
if (!InitialiseSampleRate(desiredSampleRate))
{
throw new NotSupportedException("No supported audio sample rates found");
}
recorder = new AudioRecord(AudioSource.Mic, SampleRate, ChannelIn.Mono, Encoding.PcmFloat, _bufferSize);
_recorder.StartRecording();
var res = _recorder.Read(_audioData, 0, (int)(SampleRate * _readPortion));
}
private bool InitialiseSampleRate(int rate)
{
for (int i = rate; i < 48000; i += 100)
{ // add the rates you wish to check against
_bufferSize = AudioRecord.GetMinBufferSize(i, ChannelIn.Mono, Encoding.Pcm16bit) * 10;
if (_bufferSize > 0)
{
_audioData = new byte[_bufferSize];
SampleRate = i;
return true;
}
}
return false;
}
_recorder.read
始终返回-3,根据documentation是&#34; ERROR_INVALID_OPERATION&#34;。相同的代码适用于Pcm-16bit。我不知道无效操作是什么,并且我可以看到logcat中没有任何错误。
感谢。
答案 0 :(得分:2)
要将PcmFloat与AudioRecord一起使用,您必须使用重载:
<body>
<div class="wrapper">
<button class="buttonlogin" onclick="document.getElementById('id01').style.display='block'" style="width:10%;">Login</button>
</div>
</body>
。
问题是我传递了一个byte [],它似乎只适用于Pcm8bit和Pcm16bit。
答案 1 :(得分:1)
API API和AudioTrack的AudioRecord从API LOLLIPOP开始支持ENCODING_PCM_FLOAT。
因此,在您的API-21 / API-22设备上,您将无法使用xxxxxxxxx.azurewebsites.net
API-23(Marshmallow)为PcmFloat
添加了对PcmFloat
的支持。