c# cscore如何即时播放loopback捕获记录的字节
c# cscore how to instantly play loopback capture recorded bytes
伙计们,又是我的菜鸟问题。所以这次我用cscore来录制windows声音,然后通过套接字将录制的字节发送到另一台电脑,让他们在那里播放。
我只是不知道如何在 DataAvailable 回调下播放获取的字节...
我尝试将获得的字节写入文件并播放该文件,但声音播放不正确,好像也听到了一些意想不到的声音。
所以这是我的代码:
WasapiCapture capture = new WasapiLoopbackCapture();
capture.Initialize();
capture.DataAvailable += (s, e) =>
{
WaveWriter w = new WaveWriter("file.mp3", capture.WaveFormat);
w.Write(e.Data, e.Offset, e.ByteCount);
w.Dispose();
MemoryStream stream = new MemoryStream(File.ReadAllBytes("file.mp3"));
SoundPlayer player = new SoundPlayer(stream);
player.Play();
stream.Dispose();
};
capture.Start();
任何帮助将不胜感激;-;。
如果你想听听声音是怎么发出来的,我会把结果录下来。
注意:如果我只是将声音录制到一个文件中并稍后打开,它就可以完美地工作,但如果我立即编写和播放,就会听到意想不到的声音......
使用 SoundInSource
作为适配器。
var capture = new WasapiCapture(...)
capture.Initialize(); //initialize always first!!!!
var soundInSource = new SoundInSource(capture)
{ FillWithZeros = true }; //set FillWithZeros to true, to prevent WasapiOut from stopping for the case WasapiCapture does not serve any data
var soundOut = new WasapiOut();
soundOut.Initialize(soundInSource);
soundOut.Play();
伙计们,又是我的菜鸟问题。所以这次我用cscore来录制windows声音,然后通过套接字将录制的字节发送到另一台电脑,让他们在那里播放。
我只是不知道如何在 DataAvailable 回调下播放获取的字节...
我尝试将获得的字节写入文件并播放该文件,但声音播放不正确,好像也听到了一些意想不到的声音。
所以这是我的代码:
WasapiCapture capture = new WasapiLoopbackCapture();
capture.Initialize();
capture.DataAvailable += (s, e) =>
{
WaveWriter w = new WaveWriter("file.mp3", capture.WaveFormat);
w.Write(e.Data, e.Offset, e.ByteCount);
w.Dispose();
MemoryStream stream = new MemoryStream(File.ReadAllBytes("file.mp3"));
SoundPlayer player = new SoundPlayer(stream);
player.Play();
stream.Dispose();
};
capture.Start();
任何帮助将不胜感激;-;。 如果你想听听声音是怎么发出来的,我会把结果录下来。
注意:如果我只是将声音录制到一个文件中并稍后打开,它就可以完美地工作,但如果我立即编写和播放,就会听到意想不到的声音......
使用 SoundInSource
作为适配器。
var capture = new WasapiCapture(...)
capture.Initialize(); //initialize always first!!!!
var soundInSource = new SoundInSource(capture)
{ FillWithZeros = true }; //set FillWithZeros to true, to prevent WasapiOut from stopping for the case WasapiCapture does not serve any data
var soundOut = new WasapiOut();
soundOut.Initialize(soundInSource);
soundOut.Play();