Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Naudio wav格式问题_C#_Wpf_Wav_Naudio - Fatal编程技术网

C# Naudio wav格式问题

C# Naudio wav格式问题,c#,wpf,wav,naudio,C#,Wpf,Wav,Naudio,我想在NAudio BufferedWaveProviders上播放具有此格式的wav文件:WaveFormat.CreateIeeeFloatWaveFormat(8000,1) 我的波形文件格式为16位PCM:44kHz 2通道。 我从文件中读取字节,并将它们作为示例添加到bufferedWaveProvider。对于我想要使用的格式(应用程序中已经存在),根本没有音频。使用标准格式(new WaveFormat()),音频工作正常。是否可以操纵波形文件数据以按要求的格式播放 buffere

我想在NAudio BufferedWaveProviders上播放具有此格式的wav文件:WaveFormat.CreateIeeeFloatWaveFormat(8000,1)

我的波形文件格式为16位PCM:44kHz 2通道。 我从文件中读取字节,并将它们作为示例添加到bufferedWaveProvider。对于我想要使用的格式(应用程序中已经存在),根本没有音频。使用标准格式(new WaveFormat()),音频工作正常。是否可以操纵波形文件数据以按要求的格式播放

bufferedWaveProvider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(8000, 1);
player = new WaveOut();
player.DeviceNumber = -1;
player.Init(bufferedWaveProvider);
player.Play();
using (WaveFileReader reader = new WaveFileReader ("filePath")
    {
        int end = (int)reader.Length;
        byte[] buffer = new byte[336];
        while (reader.Position < end)
        {
             int bytesRequired = (int)(end - reader.Position);
             if (bytesRequired > 0)
             {
                 int bytesToRead = Math.Min(bytesRequired,buffered.Length);
                 int bytesRead = reader.Read(buffer, 0 , bytesToRead);
                 if (bytesRead > 0)
                 {
                 bufferedWaveProvider.AddSamples(buffer, 0, bytesRead);
                 }
             }
        }
    }
bufferedWaveProvider=新的bufferedWaveProvider(WaveFormat.CreateEEFloatWaveFormat(8000,1);
player=新的WaveOut();
player.DeviceNumber=-1;
player.Init(bufferedWaveProvider);
player.Play();
使用(WaveFileReader=新的WaveFileReader(“文件路径”)
{
int end=(int)reader.Length;
字节[]缓冲区=新字节[336];
while(reader.Position0)
{
int bytesToRead=Math.Min(bytesRequired,buffered.Length);
int bytesRead=reader.Read(缓冲区,0,bytesToRead);
如果(字节读取>0)
{
AddSamples(缓冲区,0,字节读取);
}
}
}
}
我还有一个附带的问题,在我弄清楚如何流式传输wave文件数据时,我不得不试验要发送的字节缓冲区大小,因为如果它太小,音频就会断断续续,如果它太大,缓冲区就会溢出。
通过反复试验,我发现336是16位、44100采样率、2个通道的波形格式的最佳缓冲区大小。您应该如何计算样本大小,以便我能够自动知道什么大小适用于任何给定的格式?

您可以将其重采样到所需的频率。多产的Mark Heath有

输出:

8000 Hz, 1 channel, IeeeFloat

您可以从重采样器中读取数据,因为它是一个
ISampleProvider
,并根据需要添加到缓冲区或输出。

为什么要使用BufferedWaveProvider?为什么不直接播放WAV文件?因为它需要流式传输到多个客户端。它以任何配置跨网络将耳机分组,并广播音频e从一个耳机或一个wave文件到组中的任何耳机,所以如果一个操作员想要耳机A听到一些东西,他可以创建一个频道,包括耳机和流他想要的任何东西。这是一个拖拽,所以如果有人在一个传输过程中把一个头放到一个组中,它会在数据流的中间拾取。
8000 Hz, 1 channel, IeeeFloat