【发布时间】:2014-08-12 20:13:23
【问题描述】:
我正在尝试播放一分钟的声音。我可以这样做,但我这样做的方式会首先生成声音缓冲区然后播放它,这需要太多时间,有很大的延迟。所以现在我正在尝试在播放时生成声音缓冲区。所以不会有延迟。它播放了 4 秒然后停止,但我无法再次单击我的按钮一分钟。所以我认为即使我什么都听不见,代码仍在运行。
这是我的代码:
public void play()
{
short[] buffer = new short[44100];
track = new AudioTrack (Stream.Music, 44100, ChannelOut.Mono, Encoding.Pcm16bit, 5292000, AudioTrackMode.Static);
track.SetPlaybackRate (44100);
while (n2 < 5292000) {
for (int n = 0; n < 44100; n++) {
float temp1 = (float)( Amplitude * Math.Sin ((2 * Math.PI * Frequency * n2) / 44100D));
byte[] bytes = BitConverter.GetBytes (temp1);
buffer [n] = (short)(temp1 * short.MaxValue);
n2++;
}
int buffer_number = track.Write (buffer, 0, buffer.Length);
track.Play();
}
track.Release();
}
我尝试使用 AudioTrackMode Stream 但是当程序到达 Track.play 时会抛出运行时错误: play() 在未初始化的 AudioTrack 上调用。
那我做错了什么?
【问题讨论】:
标签: c# android audio xamarin xamarin-studio