Как объединить тысячи файлов 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Разделить wav-файл на байтовые массивы с помощью NAudio
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Чтение файла wav, а затем записать файл wav в другой файл
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

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