CSCore - 将立体声转换为环绕声

时间:2015-06-09 20:35:16

标签: audio surround cscore

我必须解码立体声mp4文件并将L和R频道映射到5.1 or 7.1 surround。另外,我必须提供特定的输出格式:16bit pcm 44.1kHz。 将音频源转换为44100Hz 16bit没问题。唯一的问题是通道混合。 我有以下编码:

const string filename = @"stereo.mp3";
IWaveSource waveSource = CodecFactory.Instance.GetCodec(filename)
    .AppendSource(x => new CSCore.Streams.CachedSoundSource(x))
    .ChangeSampleRate(44100) //44.1kHz
    .ToSampleSource()
    .ToWaveSource(16); //16bit

这里的官方项目页面:http://cscore.codeplex.com/告诉我可以进行频道混音。我找到了CSCore.DSP.ChannelMatrix课程,但很难弄清楚如何使用它。 也许有人可以帮助我?

1 个答案:

答案 0 :(得分:1)

你是绝对正确的,你必须使用CSCore.DSP.ChannelMatrix类。 我为你创建了一个小例子并添加了一些评论。它应该是自我解释:

Data1

我强烈建议您使用预定义的通道矩阵。 当然,如果您需要一些自定义值,请在上面的示例中定义您自己的值。

顺便说一下。您还可以实时更改频道矩阵: 只需对myfun进行更改,然后再调用CommitChannelMatrixChanges(当然您必须存储static void Main(string[] args) { const string filename = @"stereo.mp3"; /* * First of all you need a channel matrix that fits your needs. * There are many ways to get one...: */ //Simply use one of the predefined... ChannelMatrix channelMatrix = ChannelMatrix.StereoToSevenDotOneSurround; //or //use some kind of factory to get one channelMatrix = ChannelMatrix.GetMatrix( ChannelMasks.StereoMask, ChannelMasks.SevenDotOneMask); //or //or create your own one (the matrix below equals the two above but of course you can use custom values) //the rows represent your input channels (the stereo signal) and the columns your output channels. //specify with a value from 0-1 how much percentage of the L (row index 0) or the R (row index 1) channel //you want to apply to the specific column (the columns are getting mapped to the output channel mask // -> the SevenDotOneMask ordered by the values of the certain flags inside of the channel mask). channelMatrix = new ChannelMatrix( ChannelMasks.StereoMask, ChannelMasks.SevenDotOneMask); channelMatrix.SetMatrix( new[,] { {0.222f, 0f, 0.157f, 0.022f, 0.189f, 0.116f, 0.203f, 0.090f}, {0f, 0.222f, 0.157f, 0.022f, 0.116f, 0.189f, 0.090f, 0.203f} }); IWaveSource waveSource = CodecFactory.Instance.GetCodec(filename) .AppendSource(x => new CSCore.Streams.CachedSoundSource(x)) .ChangeSampleRate(44100) //44.1kHz .AppendSource(x => new DmoChannelResampler(x, channelMatrix)) //append a channelresampler with the channelmatrix .ToSampleSource() .ToWaveSource(16); //16bit ... } 实例 - >使用channelMatrix进行更改DmoChannelResampler方法)。