首页 > 解决方案 > 在 C# 中播放音频时出现白噪声

问题描述

我有一个由 AudioTrack 制成的音频播放器,它获取和写入 byte[] 包的音频数据(不是一次全部,而是更小的部分)。数据一直在播放,但有时 - 随机的,我会在那个音频上听到噪音,如果我稍等片刻,它就会正常播放。这是随机发生的。是因为缓冲区可能太小了吗?我正在播放 wav 文件。这是我的代码:

public void Read()
{
    System.Threading.Tasks.Task.Run(() =>
    {                
        int _bufferSize;
        AudioTrack _output;

        _bufferSize = AudioTrack.GetMinBufferSize(44100, ChannelOut.Stereo, Android.Media.Encoding.Pcm16bit);

        _output = new AudioTrack(Android.Media.Stream.Music, 44100, ChannelOut.Stereo, Android.Media.Encoding.Pcm16bit, _bufferSize, AudioTrackMode.Stream);
        _output.Play();

        while (mmInStream.CanRead)
        {
            try
            {
                byte[] myReadBuffer = new byte[10000];
                mmInStream.Read(myReadBuffer, 0, myReadBuffer.Length);
                _output.Write(myReadBuffer, 0, myReadBuffer.Length);
            }
            catch (System.IO.IOException ex)
            {
                _output.Stop();
                System.Diagnostics.Debug.WriteLine("Input stream was disconnected", ex);
            }
        }
        _output.Stop();
    }).ConfigureAwait(false);
}

标签: c#audioxamarin.forms

解决方案


AudioTrack文章中我们可以看到它说它允许将PCM音频缓冲区流式传输到音频接收器进行播放,wav不是PCm音频,因此会产生一些白噪声。

我找到了一篇关于使用 AudioTrack 播放 wav 文件的文章,你可以看看:

在 Android 中使用 AudioTrack 播放 WAV 文件


推荐阅读