1
我正在嘗試設置一個偵聽器到音頻流。這裏是(縮短的)源代碼:如何在Xamarin中使用AudioRecord.SetRecordPositionUpdateLister?
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();
}
}
我的類繼承IOnRecordPositionUpdateListener。 _recorder.SetRecordPositionUpdateListener
期望這種類型作爲參數,但在運行時我得到一個「System.InvalidCastException:指定的轉換無效」。我不明白如何在Xamarin中設置更新偵聽器,Android示例非常不同,並且似乎沒有應用相同的邏輯。
謝謝。
非常感謝。我可以問你在哪裏找到這些信息?這在我找不到的任何地方的Xamarin文檔中都沒有提到... – Lukeyb
@Lukeyb任何需要在Android Java VM(ART或Dalvik)中使用的對象都需要基於Java(基於JNI)的包裝器,以便它可以調用回到Mono運行時並重定向到您的C#/ F#託管代碼。查看以下界面部分:https://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/android_callable_wrappers/ – SushiHangover