重采样 WasapiLoopbackCapture
Resampling WasapiLoopbackCapture
我正在尝试将声卡 44100Hz, 16bit, 2 channel
波形中的 WasapiLoopbackCapture 输出重新采样为 16000Hz, 16bit, 1 channel
格式,以便以后在 System.Net.Sockets.NetworkStream
中使用(我想将转换后的字节写入网络流)
但我什至不知道如何开始!
我对信号处理真的很陌生,我试过搜索教程,但我就是不知道如何做。
这是我目前得到的结果:
void StartRecording()
{
capture = new WasapiLoopbackCapture(device); // device is an audiodevice picked from the user. speaker, headphones etc
capture.ShareMode = NAudio.CoreAudioApi.AudioClientShareMode.Shared;
capture.DataAvailable += capture_DataAvailable;
capture.RecordingStopped += capture_RecordingStopped;
capture.StartRecording();
}
void capture_DataAvailable(object sender, WaveInEventArgs e)
{
outputStream.Write(e.Buffer, 0, e.BytesRecorded); // here I want to output audio to the NetworkStream.
// But I have to resample it first, which brings me to my question.
}
我基本上想知道的是如何获得一个字节数组,该字节数组已经过重新采样并准备好发送到网络流的另一端!
非常感谢任何建议!提前谢谢你。
NAudio 包括几种不同的重采样器 - 一种使用 ACM (WaveFormatConversionStream
),一种使用 Media Foundation (MediaFoundationResampler
),另一种完全用托管代码编写 (WdlResamplingSampleProvider
)。我在 this post.
中讨论了每一个
对于你的情况,你想要进行 "input driven" 重采样,你知道你有多少输入样本并且只想将它们传递到重采样器中。这可能比 NAudio 中的输出驱动重采样更棘手。我已经写了另一个 post 关于如何做 input driven resampling using AcmStream。类似的技术可用于 Media Foundation 重采样器转换或 WDL 重采样提供程序,但恐怕我还没有可用的代码示例。
我正在尝试将声卡 44100Hz, 16bit, 2 channel
波形中的 WasapiLoopbackCapture 输出重新采样为 16000Hz, 16bit, 1 channel
格式,以便以后在 System.Net.Sockets.NetworkStream
中使用(我想将转换后的字节写入网络流)
但我什至不知道如何开始! 我对信号处理真的很陌生,我试过搜索教程,但我就是不知道如何做。
这是我目前得到的结果:
void StartRecording()
{
capture = new WasapiLoopbackCapture(device); // device is an audiodevice picked from the user. speaker, headphones etc
capture.ShareMode = NAudio.CoreAudioApi.AudioClientShareMode.Shared;
capture.DataAvailable += capture_DataAvailable;
capture.RecordingStopped += capture_RecordingStopped;
capture.StartRecording();
}
void capture_DataAvailable(object sender, WaveInEventArgs e)
{
outputStream.Write(e.Buffer, 0, e.BytesRecorded); // here I want to output audio to the NetworkStream.
// But I have to resample it first, which brings me to my question.
}
我基本上想知道的是如何获得一个字节数组,该字节数组已经过重新采样并准备好发送到网络流的另一端! 非常感谢任何建议!提前谢谢你。
NAudio 包括几种不同的重采样器 - 一种使用 ACM (WaveFormatConversionStream
),一种使用 Media Foundation (MediaFoundationResampler
),另一种完全用托管代码编写 (WdlResamplingSampleProvider
)。我在 this post.
对于你的情况,你想要进行 "input driven" 重采样,你知道你有多少输入样本并且只想将它们传递到重采样器中。这可能比 NAudio 中的输出驱动重采样更棘手。我已经写了另一个 post 关于如何做 input driven resampling using AcmStream。类似的技术可用于 Media Foundation 重采样器转换或 WDL 重采样提供程序,但恐怕我还没有可用的代码示例。