C# 使用Naudio播放“波浪流”

C# 使用Naudio播放“波浪流”,c#,.net,wav,naudio,C#,.net,Wav,Naudio,我想更改wave文件的比特率 所以我在网上搜索,我发现wave文件包含一个长度为44字节的头文件,25、26、27和28字节用于存储wave文件的比特率 因此,我将波形存储在字节数组中,然后更改用于存储波形比特率的字节值 代码如下: private int sampleRate; private byte[] ByteArr; private MemoryStream ByteMem; ByteArr = null;

我想更改wave文件的比特率

所以我在网上搜索,我发现wave文件包含一个长度为44字节的头文件,25、26、27和28字节用于存储wave文件的比特率

因此,我将波形存储在字节数组中,然后更改用于存储波形比特率的字节值

代码如下:

        private int sampleRate;
        private byte[] ByteArr;
        private MemoryStream ByteMem;
        ByteArr = null;
        ByteMem = null;
        ByteArr = File.ReadAllBytes(pathOfWav.Text);
        sampleRate = BitConverter.ToInt32(ByteArr, 24) * 2;
        Array.Copy(BitConverter.GetBytes(sampleRate), 0, ByteArr, 24, 4);
        ByteMem = new MemoryStream(ByteArr);
在这里,我将波形文件的位置存储在
pathOfWav.Text
这是一个文本框中,然后我将波形文件的所有字节存储在
ByteArr
中,然后将4个字节(从25到28)转换为Int32,并将其乘以2以提高语音速度,并将值存储在
sampleRate
之后,我用比特率的新值修改前面的
ByteArr
,然后我引用一个新的MemoryStream


我的问题是,如何使用Naudio播放新的Wave stream???

您解决了这个问题吗?根据您的评论,如果您只需要更改采样器,那么为什么要使用NAudio?您可以使用默认的可用播放器,如MediaPlayer/SoundPlayer。如果是,您可以参考以下代码。我添加了一个更改采样率的方法。虽然您可以单独编写波形格式或附加波形格式,但我只提到了采样率及其相关字段。我正在阅读整个文件,先关闭,然后打开,一部分一部分地写

(C#:中“波头格式”的原始参考)

现在您可以调用上述方法并以不同的采样率播放wave文件:

    changeSampleRate(yourWaveFileToPlay, requiredSampleRate);

    MediaPlayer mp = new MediaPlayer();

    mp.Open(new Uri(yourWaveFileToPlay, UriKind.Absolute));

    mp.Play();

要更改WAV文件的比特率,不能只更新其格式块。实际上,您必须以新的采样率/位深度(假设它是PCM)对其重新编码,或者如果它不是PCM,则使用为编解码器选择的不同比特率对其重新编码。我写了一篇关于在各种音频格式之间转换的文章,包括在不同风格的PCM之间转换。同一篇文章还将解释如果你想更改采样率而不是比特率,该怎么办。

@Mark Heath你能帮个忙吗?也许如果你陈述你想做什么而不是如何做,我们可以提供一个合理的答案。@spender我想更改wave文件的比特率,例如,如果wave文件比特率是44100,我想将它乘以2,然后它变为88200,我想在这个变化后播放它;初始化并播放。此外,还需要更改其他相关字节(在采样率字段之后)。请查看下面的答案。此问题的标题似乎与您要问的不匹配。谢谢您的回答!你能解释一下你在这里做什么吗:bw.Write(sampleRate);写((int)(sampleRate*((BitsPerSample*通道)/8));写((短)((比特采样*通道)/8));/*您可以在这里保存相同的数据*/bw.Write(arrfile,34,arrfile.Length-34);由于希望设置不同的采样率,采样率字段将更新。接下来的字段是ByteRate和BlockAlign,需要根据采样率进行更新。相关字段表示从24到33的字节偏移量。您可以浏览此链接中的字段和相关公式:谢谢,但在某些情况下,在我更改采样比特率并希望播放文件后,会出现错误消息,说明波形头已损坏!!为什么?当使用内存流而不是文件时会出现错误消息我已经用上面的方法处理了相当多的语音文件,但我没有使用内存流。在那之前,你能通过Windows Media Player正常播放这个文件吗?
    changeSampleRate(yourWaveFileToPlay, requiredSampleRate);

    MediaPlayer mp = new MediaPlayer();

    mp.Open(new Uri(yourWaveFileToPlay, UriKind.Absolute));

    mp.Play();