编码为 PCM-Float 时无法从 AudioRecord 读取
Can't read from AudioRecord when encoding is PCM-Float
无论我做什么,我都无法让 Android AudioRecord class 与 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
总是returns-3,根据documentation是"ERROR_INVALID_OPERATION"。相同的代码适用于 Pcm-16 位。我不知道无效操作是什么,logcat 中没有任何错误,我可以看到。
谢谢。
AudioRecord as of API M and AudioTrack as of API LOLLIPOP support ENCODING_PCM_FLOAT.
因此在您的 API-21 / API-22 设备上您将没有 PcmFloat
可用
API-23 (Marshmallow) 为 AudioRecord
.
添加了对 PcmFloat
的支持
要将 PcmFloat 与 AudioRecord 一起使用,您必须使用重载:
AudioRecord.Read(float[], offset, count, readType)
.
问题是我向它传递了一个字节[],它似乎只适用于 Pcm8bit 和 Pcm16bit。
无论我做什么,我都无法让 Android AudioRecord class 与 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
总是returns-3,根据documentation是"ERROR_INVALID_OPERATION"。相同的代码适用于 Pcm-16 位。我不知道无效操作是什么,logcat 中没有任何错误,我可以看到。
谢谢。
AudioRecord as of API M and AudioTrack as of API LOLLIPOP support ENCODING_PCM_FLOAT.
因此在您的 API-21 / API-22 设备上您将没有 PcmFloat
可用
API-23 (Marshmallow) 为 AudioRecord
.
PcmFloat
的支持
要将 PcmFloat 与 AudioRecord 一起使用,您必须使用重载:
AudioRecord.Read(float[], offset, count, readType)
.
问题是我向它传递了一个字节[],它似乎只适用于 Pcm8bit 和 Pcm16bit。