【发布时间】:2013-12-01 14:32:19
【问题描述】:
我需要能够实时播放一个填充了 16 位 PCM 值(解码后)的 short[] 数组。 数组越来越长,玩家应该可以在数组“增长”时播放它。
我是用 C# 编写的。
谢谢你, 奥菲克
编辑: 我使用了 BufferedWaveProvider,代码如下所示:
Class Player
{
Private WaveFormat waveForamt=new WaveFormat(8000,16,1);
private BufferedWaveProvider bufferedWaveProvider;
public Player()
{
bufferedWaveProvider=new BufferedWaveProvider(waveFormat);
}
public void AddSamples(byte[] array)
{
bufferedWaveProvider.AddSamples(array,0,array.length);
WaveOut waveout=new WaveOut();
waveout.Init(bufferedWaveProvider);
waveout.Play();
}
}
AddSamples func 得到的数组是 32000 长我可以看到参数 bufferedWaveProvider.BufferedBytes = 32000 bufferedWaveProvider.BufferedBytes = 80000 bufferedWaveProvider.BufferedDuration = 00:00:02 bufferedWaveProvider.BufferDuration = 00:00:05
当我记录数组时,我会说 2 秒钟,然后说:“一、二、三……” 问题是当我播放它时,我只听到一个快速的声音,和我说的完全不同..
关于哪里出了问题有什么想法吗?
Thnaks, Ofek
编辑 2: 现在我的代码看起来像这样,我从 Capture 类中调用 AddSamples 函数。 每次调用 waveout.Play() 函数后 - 我清除缓冲区并等待它再次填满。一旦它又满了,我就玩它,依此类推。问题是,在我第二次播放缓冲区时,声音开始很快,然后变慢......我听说过一些关于使用两个缓冲区的事情......你知道吗? 非常感谢!
这里是调用 player.AddSamples 的类
【问题讨论】:
-
不要多发。改为改进您的原始问题。详情请见How to Ask。
-
这不是同一个问题——这是关于实时播放的。
-
好的,下次知道了
-
屏幕照片?我认为您从字面上理解“屏幕截图”。