я запись звука в C# (WPF) и когда данные из звуковой карты доступна она называет это событие:параллельные операции с аудио потоком C#
void myWaveIn_DataAvailable(object sender, WaveInEventArgs e)
{
for (int index = 0; index < e.BytesRecorded; index += 2)//Here I convert in a loop the stream into floating number samples
{
short sample = (short)((e.Buffer[index + 1] << 8) |
e.Buffer[index + 0]);
samples32Queue.Enqueue(sample/32768f);
}
//***Do some Processing with data inside Queue
}
Как вы можете видеть, я нажимаю каждую пробу из записанного буфера очередь, объявленная так:
Queue<float> samples32Queue = new Queue<float>();
Как вы можете видеть внутри события после for loop
я хочу сделать некоторую обработку очереди. Я волнуюсь, что при обработке данных новые звуковые карты будут получены из звуковой карты, и моя обработка будет потеряна.
- Каков правильный подход к этому?
- Является ли обработка, которую я вызываю из события, является статическим методом/нестационарным?
ли это система RT? Если нет, вы можете буферизовать образцы и обрабатывать их позже. Если да, то у вас нет выбора - вы должны убедиться, что ваша функция обработки «быстрее», а затем входящие образцы. –
Привет, я пытаюсь сделать это RT – axcelenator
Выполняется ли обработка каждого образца ** ** до того, как придет новый образец? Или можно смоделировать дизайн производителя - потребителя? –