オーディオストリームにリスナーをセットアップしようとしています。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();
}
}
Myクラスは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