c# - 在 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);
}
解决方案
从AudioTrack文章中我们可以看到它说它允许将PCM音频缓冲区流式传输到音频接收器进行播放,wav不是PCm音频,因此会产生一些白噪声。
我找到了一篇关于使用 AudioTrack 播放 wav 文件的文章,你可以看看:
推荐阅读
- r - 从 SQL 查询中排除 NULL 值并在数据框中保留旧值
- autodesk-forge - 如何选择指定类型的所有对象,例如 IfcWallStandardCase?
- php - WooCommerce 中的样式 WooCommerce 单产品摘要
- angular - 更改网址时如何更改选择值
- macos - 卸载VS Mac时终端不接受密码字符
- android - 无法使用我用于签署 APK 的现有密钥签署 app bundle
- sql-server - SQL Server 性能相关
- ios - Xcode '找不到 Info.plist 路径。'
- docker - 如果 RUN 在多阶段构建中失败,则使 Docker 构建停止
- ansible - 如何在 Ansible 中将变量放入变量中?