Вопрос по .net, naudio, c#, exception-handling, wpf – Уже выделенный вызов waveOutOpen ошибка

4
 private void receiveAudio(object sender)
        {
            IPEndPoint senderEP = new IPEndPoint(IPAddress.Any, 0);
            MemoryStream audioDataStream;
            BufferedWaveProvider bufferedWaveProvider; 
            //RawSourceWaveStream receivedRawAudioData;          
            byte[] receivedAudioData;
            waveOutStream = new WaveOut();

            while (IsAudioTransferActive)
            {
                receivedAudioData = audioUDPClient.Receive(ref senderEP);               
                audioDataStream = new MemoryStream(receivedAudioData);                
                //receivedRawAudioData = new RawSourceWaveStream(audioDataStream, audioFormat);
                bufferedWaveProvider = new BufferedWaveProvider(audioFormat);
//How can I feed "audioDataStream " to "bufferedWaveProvider "
                waveOutStream.Init(bufferedWaveProvider);
                waveOutStream.Play();
            } 
            waveOutStream.Stop();
            waveOutStream.Dispose();
        }

@Mark Heath: - Как вы сказали, я пытался использовать BufferedWaveProvider, но как я могу передать bufferedWaveProvider с & quot; audioDataStream & quot;

@abatishchev: -У меня есть waveOut, который воспроизводится внутри цикла, который получает данные из сокета UDP. Но, к сожалению, после 30 секунд выдает ошибку, в которой говорится, что «MemoryAllocationError вызывает waveOutOpen» или "MmException не обработан". Уже выделенный вызов waveOutOpen & quot; Smile Azeez
@abatishchev: - MmException не было обработано. Уже выделенный вызов waveOutOpen Smile Azeez
Вы пробовали это:naudio.codeplex.com/discussions/350724 ? Adrian Fâciu
Опубликуйте все исключения, пожалуйста. abatishchev
У меня есть waveOut, который играет внутри цикла, который получает данные из сокета UDP. Но, к сожалению, после 30 секунд выдает ошибку, в которой говорится, что «MemoryAllocationError вызывает waveOutOpen» или "MmException не обработан". Уже выделенный вызов waveOutOpen & quot; Smile Azeez

Ваш Ответ

2   ответа
0

WaveOut объекты с SineWaveProviders. Я натолкнулся на идею использования чего-то вроде списка звонков для обмена значениями разных провайдеров (частоты и амплитуды), поскольку, по крайней мере, в моем случае я не слышал никакой разницы выше 5 постоянных синусоидальных волн. Кроме того, в моих тестах на разных машинах, используя более 6-7WaveOut объекты сразу обычно приводят кMemoryAllocationErrorТаким образом, список звонков. Это то, что я вышел:

private Queue<SineWaveGenerator> generators;

// constructor
public Player()
{
    for (int i = 0; i < 5; i++)
    {
        var generator = new SineWaveGenerator();
        generator.Amplitude = 0.25f;

        generators.Enqueue(generator);
    }
}

// just a helper method
private SineWaveGenerator GetGenerator(int frequency)
{
    return generators.FirstOrDefault(x => x.Frequency == frequency);
}

private void Play(int frequency)
{
    var generator = GetGenerator(frequency);

    if (generator == null)
    {
        generator = generators.Dequeue(); // get generator from the top of the list
        generator.Frequency = GetFrequency(key); // modify the generator
        generators.Enqueue(generator); // and append it to the back
    }

    generator.Play();
}

private void Stop(int frequency)
{
    var generator = GetGenerator(frequency);

    if (generator != null)
    {
        generator.Stop();
    }
}

Обратите вниманиеSineWaveGenerator инициализирует новыйWaveOut в своем конструкторе.

3

которые не расположены, что является частью проблемы. Лучший подход в этой ситуации - создать один объект WaveOut и передать его с помощью BufferedWaveProvider. Затем, когда аудио станет доступным, запишите его в BufferedWaveProvider.

Я решаю ту же проблему. Как ты прошел через это, если я могу спросить?
Как "Марк Хит" сказал, что я пытался использовать BufferedWaveProvider, но как я могу кормить "BufferedWaveProvider"? с & quot; audioDataStream & quot; Smile Azeez

Похожие вопросы