NAudio.net — попытка отправить 2 канала с многоканального входа на стереовход.C#

Место общения программистов C#
Anonymous
NAudio.net — попытка отправить 2 канала с многоканального входа на стереовход.

Сообщение Anonymous »

Пожалуйста, помогите.
Я новичок.
Я пытаюсь создать инструмент, который будет разделять многоканальный вход на несколько стереовыходов.
Для начала я пытаюсь просто отправить первые два канала 6-канального входа на стереовыход
звук получается искаженным
Послушайте мой код — ПОЖАЛУЙСТА, ПОМОГИТЕ!

Код: Выделить всё

public partial class Form1 : Form
{
private WasapiCapture inputCupture;
WasapiLoopbackCapture waveIn;
private BufferedWaveProvider waveBuffer;
private MediaFoundationResampler resampler;
private ChannelDivider channelDivider;
private BufferedWaveProvider waveOutBuffer;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

MMDevice inputDevice = null;
MMDevice outputDevice = null;

MMDevice[] AudioDevices = new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active).ToArray();
foreach (MMDevice device in AudioDevices)
{
string deviceType = device.DataFlow == DataFlow.Capture ? "INPUT" : "OUTPUT";
string deviceLabel = $"{deviceType}: {device.FriendlyName}";
Console.WriteLine(deviceLabel);
if (device.FriendlyName.Contains("Line 2")) inputDevice = device;
if (device.FriendlyName.Contains("DELL")) outputDevice = device;
}
Console.WriteLine("input: " + inputDevice.FriendlyName);
Console.WriteLine("output: " + outputDevice.FriendlyName );

inputCupture = inputDevice.DataFlow == DataFlow.Render ? new WasapiLoopbackCapture(inputDevice) : new WasapiCapture(inputDevice, true, 10);
Console.WriteLine("ch: " +inputCupture.WaveFormat.Channels);
inputCupture.DataAvailable += OnDataAvailable;
WaveFormat f = inputCupture.WaveFormat;

channelDivider = new ChannelDivider(f);

inputCupture.StartRecording();

WaveFormat w = new WaveFormat(inputCupture.WaveFormat.SampleRate, inputCupture.WaveFormat.BitsPerSample, 2);
//w = new WaveFormat(44100, 16, 2);
Console.WriteLine("format: " + w.SampleRate + "," + w.BitsPerSample);
waveOutBuffer = new BufferedWaveProvider(w);

waveOutBuffer.DiscardOnBufferOverflow = true;
WasapiOut waveOut = new WasapiOut(outputDevice, AudioClientShareMode.Shared,true, 60);
waveOut.Init(waveOutBuffer);

waveOut.Play();

}

private void OnDataAvailable(object sender, WaveInEventArgs e)
{

//waveOutBuffer.AddSamples(e.Buffer, 0, e.BytesRecorded);

//for each channel
int channel = 1;
for (int i = 0; i < e.BytesRecorded; i += inputCupture.WaveFormat.BitsPerSample)
{
if (channel  inputCupture.WaveFormat.Channels) channel = 1;

}

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
inputCupture.StopRecording();
inputCupture.Dispose();
}
}
Я попытался разделить его на несколько каналов, взяв каждый набор битов из выборки (BitsPerSample), думая, что именно так выборка хранит разные данные для разных каналов.
п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... terio-inpu

Вернуться в «C#»