Проблема, с которой я столкнулся, заключается в том, что 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);
}
}
}
Реализация DelayedSampleProvider основана на OffsetSampleProvider компании NAudio.
Реализация SampleSource взята из DrumMachineDemo компании NAudio.
Реализация DelayedSampleProvider основана на OffsetSampleProvider компании NAudio.
п>
Подробнее здесь: https://stackoverflow.com/questions/739 ... xingsample