如何在 Xamarin 中使用 AudioRecord.SetRecordPositionUpdateLister?
How to use AudioRecord.SetRecordPositionUpdateLister in Xamarin?
我正在尝试为音频流设置监听器。这是(缩短的)来源:
class AndroidAudioDriver : AudioRecord.IOnRecordPositionUpdateListener
{
private AudioRecord _recorder;
private byte[] _audioData;
private int _bufferSize;
private Sensor _sensor;
public AndroidAudioDriver(Sensor sensor, int desiredSampleRate)
{
_recorder = new AudioRecord(AudioSource.Mic, SampleRate, ChannelIn.Mono, Encoding.PcmFloat, _bufferSize);
_recorder.SetRecordPositionUpdateListener(this);
_recorder.SetPositionNotificationPeriod(_bufferSize / 2);
}
public void OnMarkerReached(AudioRecord recorder)
{
//not used
}
public void OnPeriodicNotification(AudioRecord recorder)
{
var count = _recorder.Read(_audioData, 0, _bufferSize / 2);
var floats = DataConversion.ConvertBytesToFloatsBigEndian(_audioData.Take(count).ToArray());
NewAudio(_sensor, floats);
}
public void Dispose()
{
throw new NotImplementedException();
}
}
我的class继承了IOnRecordPositionUpdateListener。 _recorder.SetRecordPositionUpdateListener
期望此类型作为参数,但在运行时我得到 "System.InvalidCastException: Specified cast is not valid"。我不明白如何在 Xamarin 中设置更新侦听器,Android 示例非常不同,似乎没有应用相同的逻辑。
谢谢。
My class inherits the IOnRecordPositionUpdateListener
您正在实现接口,但您需要从Java.Lang.Object
继承。
完成后,为将要生成的 ACW(Android 可调用包装器)创建 class public。
删除 public void Dispose()
,因为 Java.Lang.Object
实现了它。如果需要,override
它并处理您的任何资源,例如硬件的 Sensor
对象。
public class AndroidAudioDriver : Java.Lang.Object, AudioRecord.IOnRecordPositionUpdateListener
{
~~~
}
我正在尝试为音频流设置监听器。这是(缩短的)来源:
class AndroidAudioDriver : AudioRecord.IOnRecordPositionUpdateListener
{
private AudioRecord _recorder;
private byte[] _audioData;
private int _bufferSize;
private Sensor _sensor;
public AndroidAudioDriver(Sensor sensor, int desiredSampleRate)
{
_recorder = new AudioRecord(AudioSource.Mic, SampleRate, ChannelIn.Mono, Encoding.PcmFloat, _bufferSize);
_recorder.SetRecordPositionUpdateListener(this);
_recorder.SetPositionNotificationPeriod(_bufferSize / 2);
}
public void OnMarkerReached(AudioRecord recorder)
{
//not used
}
public void OnPeriodicNotification(AudioRecord recorder)
{
var count = _recorder.Read(_audioData, 0, _bufferSize / 2);
var floats = DataConversion.ConvertBytesToFloatsBigEndian(_audioData.Take(count).ToArray());
NewAudio(_sensor, floats);
}
public void Dispose()
{
throw new NotImplementedException();
}
}
我的class继承了IOnRecordPositionUpdateListener。 _recorder.SetRecordPositionUpdateListener
期望此类型作为参数,但在运行时我得到 "System.InvalidCastException: Specified cast is not valid"。我不明白如何在 Xamarin 中设置更新侦听器,Android 示例非常不同,似乎没有应用相同的逻辑。
谢谢。
My class inherits the IOnRecordPositionUpdateListener
您正在实现接口,但您需要从Java.Lang.Object
继承。
完成后,为将要生成的 ACW(Android 可调用包装器)创建 class public。
删除 public void Dispose()
,因为 Java.Lang.Object
实现了它。如果需要,override
它并处理您的任何资源,例如硬件的 Sensor
对象。
public class AndroidAudioDriver : Java.Lang.Object, AudioRecord.IOnRecordPositionUpdateListener
{
~~~
}