Как объединить тысячи файлов WAV в один файл с помощью MixingSampleProvider от NAudio?C#

Место общения программистов C#
Ответить
Anonymous
 Как объединить тысячи файлов WAV в один файл с помощью MixingSampleProvider от NAudio?

Сообщение Anonymous »

Я ищу способ объединить тысячи файлов WAV в один файл с помощью MixingSampleProvider от NAudio. Я создаю барабанный сэмплер и хотел бы иметь возможность создать целую песню (на основе MIDI-информации), которую затем можно будет экспортировать в один файл WAV.
Проблема, с которой я столкнулся, заключается в том, что MixingSampleProvider имеет ограничение в 1024 источника и выдает исключение и выдает сообщение «Слишком много входов микшера», если это ограничение установлено. достиг. Я уверен, что это ограничение существует не просто так, я хотел бы знать, как достичь своей цели, несмотря на это.
Я просмотрел демоверсии NAudio и блог Марка Хита, но я не нашел там именно того, что мне нужно.
Я подумал, что можно разбить песню на более мелкие сегменты (до 1024 входов семплера) и объединить потом отдельные части. Это правильный путь или есть лучший? Спасибо за совет.
Вот часть моего кода:

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

public class DrumSampler
{
private readonly MixingSampleProvider _mixer;
private readonly Dictionary _cachedSamples = new();

public DrumSampler()
{
var waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(44100, 2);
_mixer = new MixingSampleProvider(waveFormat);

LoadSamples();
}

private void LoadSamples()
{
LoadSample("kick", @"C:\Samples\kick.wav");
LoadSample("snare", @"C:\Samples\snare.wav");
LoadSample("crash", @"C:\Samples\crash.wav");
}

private void LoadSample(string key, string filePath)
{
_cachedSamples.Add(key, SampleSource.CreateFromWaveFile(filePath, _mixer.WaveFormat));
}

public void ExportSong()
{
AddDrums();

WaveFileWriter.CreateWaveFile16("song.wav", _mixer);
}

private void AddDrums()
{
//simulate adding drum samples based on MIDI information
for (int i = 0; i < 1000; i++)
{
var sample = _cachedSamples["kick"];
var delayed = new DelayedSampleProvider(sample, TimeSpan.FromSeconds(123));
_mixer.AddMixerInput(delayed);
}
}
}
Реализация SampleSource взята из DrumMachineDemo компании NAudio.
Реализация DelayedSampleProvider основана на OffsetSampleProvider компании NAudio.
Реализация SampleSource взята из DrumMachineDemo компании NAudio.
Реализация DelayedSampleProvider основана на OffsetSampleProvider компании NAudio.
п>

Подробнее здесь: https://stackoverflow.com/questions/739 ... xingsample
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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