以异步方式刷新 Xamarin.Android 中的 AudioTrack
Flush AudioTrack in Xamarin.Android in an async way
AudioTrack.Flush 没有完成他的工作,我发现当 AudioTrack 正在刷新时(在另一个线程中),如果我写入一些数据,它会停止刷新,所以我试图在 AudioTrack 刷新时锁定它刷新(无变化),所以我试图在 AudioTrack 以 100 毫秒的简单睡眠刷新时忽略数据写入并且它有效,我想 AudioTrack.Flush 创建一个刷新缓冲区的新线程,但有人可以解释我这个(对我来说)奇怪的行为?
P.S。要写入缓冲区的数据长度为一个样本并且被垃圾邮件发送(来自 UDP dgrams)
P.s: audioTrack = new AudioTrack(Android.Media.Stream.Music, 16000, ChannelOut.Mono, Android.Media.Encoding.Pcm16bit, 8, AudioTrackMode.Stream, 0);
new Thread(() =>
{
while(true)
{
Thread.Sleep(2000);
canwrite_to_buffer = false;
audioTrack.Flush();
Thread.Sleep(100);
canwrite_to_buffer = true;
}
}).Start();
解决方案:当尝试在刷新时将一些数据写入 AudioTrack 流时,它停止刷新,所以我必须在刷新时等待,我没有找到以回调或异步方式刷新的方法同步方式,所以我等待了 100 毫秒,但这不是最好的解决方案
AudioTrack.Flush 没有完成他的工作,我发现当 AudioTrack 正在刷新时(在另一个线程中),如果我写入一些数据,它会停止刷新,所以我试图在 AudioTrack 刷新时锁定它刷新(无变化),所以我试图在 AudioTrack 以 100 毫秒的简单睡眠刷新时忽略数据写入并且它有效,我想 AudioTrack.Flush 创建一个刷新缓冲区的新线程,但有人可以解释我这个(对我来说)奇怪的行为? P.S。要写入缓冲区的数据长度为一个样本并且被垃圾邮件发送(来自 UDP dgrams) P.s: audioTrack = new AudioTrack(Android.Media.Stream.Music, 16000, ChannelOut.Mono, Android.Media.Encoding.Pcm16bit, 8, AudioTrackMode.Stream, 0);
new Thread(() =>
{
while(true)
{
Thread.Sleep(2000);
canwrite_to_buffer = false;
audioTrack.Flush();
Thread.Sleep(100);
canwrite_to_buffer = true;
}
}).Start();
解决方案:当尝试在刷新时将一些数据写入 AudioTrack 流时,它停止刷新,所以我必须在刷新时等待,我没有找到以回调或异步方式刷新的方法同步方式,所以我等待了 100 毫秒,但这不是最好的解决方案