AlreadyAllocated调用waveOutOpen错误privatevoidreceiveAudio(objectsender){IPEndPointsenderEP=newIPEndPoint(IPAddress.Any,0);内存流音频数据流;缓冲波提供者缓冲波提供者;]收到音频数据;waveOutStream=newWaveOut();while(IsAudioTransferActive){receivedAudioData=audioUDPClient.Receive(refsenderEP);audioDataStream=newMemoryStream(receivedAudioData);//receivedRawAudioData=newRawSourceWaveStream(audioDataStream,audioFormat);bufferedWaveProvider=newBufferedWaveProvider(audioFormat);//如何将“audioDataStream”提供给“bufferedWaveProvider”waveOutStream.Init(bufferedWaveProvider);waveOutStream.Play();}waveOutStream.Stop();waveOutStream.Dispose();}@MarkHeath:-正如您所说,我尝试使用BufferedWaveProvider但我如何为bufferedWaveProvider提供“audioDataStream”您一直在while循环中创建未处理的WaveOut对象,这是问题的一部分。在这种情况下,最好的方法是创建一个WaveOut对象并使用BufferedWaveProvider提供它。然后,当音频可用时,将其写入BufferedWaveProvider。我在使用SineWaveProviders初始化新的WaveOut对象时遇到了类似的问题。我想到了使用类似于环列表的东西来交换不同提供者的值(频率和振幅),至少在我的情况下我听不到超过5个恒定正弦波的任何差异。此外,在我对不同机器的测试中,一次使用超过6-7个WaveOut对象通常会导致MemoryAllocationError作为铃声列表。这就是我得到的:私有队列生成器;//构造函数publicPlayer(){for(inti=0;ix.Frequency==frequency);}privatevoidPlay(intfrequency){vargenerator=GetGenerator(frequency);if(generator==null){generator=generators.出列();//从列表生成器的顶部获取生成器。频率=GetFrequency(键);//修改生成器generators.排队(生成器);//并追加到后面}generator.Play();}privatevoidStop(intfrequency){vargenerator=GetGenerator(frequency);if(generator!=null){generator.Stop();注意:WaveOut在其构造函数中初始化一个新的WaveOut。以上就是C#学习教程的全部内容:AlreadyAllocated调用waveOutOpen错误分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
