Я кодирую деки, используя NAudio в качестве библиотеки для управления звуком.Одной из функций, которые я хочу реализовать, является возможность непрерывной записи одного (или нескольких) аудиовходов и возможность в любое время сохранять их.
Способ, которым я вижу это, заключается в том, чтобы держать циркулярбуфер последних примеров: 5 сэмплов, взятых аудиовходом.
Я также хочу избежать сохранения всех данных до того момента, когда они начались, поскольку я не хочу чрезмерно использовать память.
Я пробовал много подходов к этой проблеме:
- Использование кругового буфера и подача его с данными из события «DataAvailable»;
- Использование «Queue» и «BufferedWaveProvider»чтобы добавить данные буфера и преобразовать его в образец.
- Я попытался использовать 2 "BufferedWaveProvider" и чередование, которое заполнялось, в зависимости от того, что было заполнено.
- Я также пытался использовать 2 волнывходы и таймеры для чередования, который записывал.
Я попытался использовать массив байтов и использовать его в качестве циклического буфера.Я заполнил буфер, используя событие «DataAvailable» из «WaveInEvent».«WaveInEventArgs» имеет буфер, поэтому я добавил данные из него в циклический буфер.
private int _start = 0, _end = 0;
private bool _filled = false;
private byte[] _buffer; // the size was set in the constructor
// its an equation to figure out how many samples
// a certain time needs.
private void _dataAvailable(object sender, WaveInEventArgs e)
{
for (int i = 0; i < e.BytesRecorded; i++)
{
if (_filled)
{
_start = _end + 1 > _buffer.Length - 1 ? _end + 1 : 0;
}
if (_end > _buffer.Length - 1 && !_filled) _filled = true;
_end = _end > _buffer.Length - 1 ? _end + 1 : 0;
_buffer[_end] = e.Buffer[i];
}
}
Некоторые из попыток, которые я предпринял, сработали, но в большинстве случаев они работали в первый раз.5 секунд (я знаю, что использование «BufferredWaveProvider» может вызвать эту проблему. Я думаю, что часть проблемы заключается в том, что существует определенный объем данных, который требуется в начале буфера, и как только буфер запускаетсяПерезаписывая эти данные, аудиопроигрыватель не
Другая очень вероятная причина проблемы заключается в том, что я только начинаю использовать NAudio и пока не совсем понимаю его.
Я застрял сЭта проблема уже давно, и я благодарен за любую помощь, которую кто-либо может мне дать.
У меня есть еще немного кода, который я мог бы добавить, но я думал, что этот вопрос уже удлиняется.
Спасибозаранее!