Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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# 音频文件以错误的速度播放_C#_Naudio - Fatal编程技术网

C# 音频文件以错误的速度播放

C# 音频文件以错误的速度播放,c#,naudio,C#,Naudio,我在C#应用程序中使用NAudio,我的问题是,播放速度取决于采样率。我使用了两个Wav文件,其中包含一个1000Hz的正弦波,Fs=44100Hz和Fs=88200 Hz。我用示波器检查声卡的输出信号。事实证明,我的文件Fs=44100在预期时间的一半后就结束了,而输出频率是原来的两倍(2kHz)。在其他播放机(如windows media player、audacity)中使用文件时,一切看起来都很好。调试时,我查看了这些文件的波形,一切看起来都很好。我还改变了位分辨率,结果没有什么不同。我

我在C#应用程序中使用NAudio,我的问题是,播放速度取决于采样率。我使用了两个Wav文件,其中包含一个1000Hz的正弦波,Fs=44100Hz和Fs=88200 Hz。我用示波器检查声卡的输出信号。事实证明,我的文件Fs=44100在预期时间的一半后就结束了,而输出频率是原来的两倍(2kHz)。在其他播放机(如windows media player、audacity)中使用文件时,一切看起来都很好。调试时,我查看了这些文件的波形,一切看起来都很好。我还改变了位分辨率,结果没有什么不同。我不确定我是否错过了什么

我在这个问题第一次出现的另一个程序中使用了它。因此,我做了一个小的基本程序,看看我是否已经在我更大的应用程序中犯了错误,同样的问题也存在

如果有人能帮我的话,我会非常感激的。 问候 狮子座

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用NAudio.波;
命名空间WindowsFormsApp2
{
公共部分类Form1:Form
{
Asiout Asiout;
音频文件阅读器afr4;
音频文件阅读器afr8;
音频文件阅读器afr0;
混合波发生器32 mwp;
int playingID=0;
int channelID;
布尔音频播放=假;
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
asioOut=新asioOut();
afr4=新的音频文件读取器(“../wavs/sin1000Hz_1.75s_16位_44100Hz_ramp50ms.wav”);
afr8=新的音频文件读取器(“../wavs/sin1000Hz_1.75s_16位_88200Hz_ramp50ms.wav”);
afr0=新的音频文件读取器(“../wavs/sin14607Hz_180秒_20msRamp_fs96000_24位_mono_doppelt.wav”);
mwp=新的混合波Provider32();
afr4.体积=1.0f;
afr8.体积=1.0f;
对于(int i=0;i
您不能使用
mixingwaveprovider 32
将具有不同
波形的流混合在一起。您需要选择一个
波形格式
,并将其传递给构造函数。然后,您应该只添加具有
WaveFormat
的项目,尽管
MixingWaveProvider32
在您一次只有一个项目时并没有强制执行,就像您为我做的那样。谢谢你的建议。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio.Wave;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        AsioOut asioOut;
        AudioFileReader afr4;
        AudioFileReader afr8;
        AudioFileReader afr0;
        MixingWaveProvider32 mwp;

        int playingID = 0;
        int channelID;
        Boolean audioplaying = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            asioOut = new AsioOut();
            afr4 = new AudioFileReader("../wavs/sin1000Hz_1.75s_16bit_44100Hz_ramp50ms.wav");
            afr8 = new AudioFileReader("../wavs/sin1000Hz_1.75s_16bit_88200Hz_ramp50ms.wav");
            afr0 = new AudioFileReader("../wavs/sin14607Hz_180sec_20msRamp_fs96000_24bit_mono_doppelt.wav");
            mwp  = new MixingWaveProvider32();



            afr4.Volume = 1.0f;
            afr8.Volume = 1.0f;

            for (int i = 0; i < asioOut.DriverOutputChannelCount; i++) {
                Console.WriteLine(i + ": " + asioOut.AsioOutputChannelName(i));
                if (asioOut.AsioOutputChannelName(i).Equals("Analog 3 (1)")) {
                    channelID = i;
                }
            }
            asioOut.ChannelOffset = channelID;
            asioOut.Init(mwp);
            asioOut.PlaybackStopped += OnPlaybackStopped;
        }

        //a button to play the Fs = 44100Hz File
        private void button1_Click(object sender, EventArgs e)
        {
            if (audioplaying == false) {
                mwp.AddInputStream(afr4);
                afr4.Position = 0;

                audioplaying = true;
                playingID = 4;

                asioOut.Play();
            }           
        }

        //a button to play the Fs = 88200Hz File
        private void button2_Click(object sender, EventArgs e)
        {
            if (audioplaying == false) {
                mwp.AddInputStream(afr8);
                afr8.Position = 0;

                audioplaying = true;
                playingID = 8;

                asioOut.Play();
            }
        }

        //a button to play just another audiofile
        private void button4_Click(object sender, EventArgs e)
        {
            if (audioplaying == false) {
                mwp.AddInputStream(afr0);
                afr0.Position = 0;

                audioplaying = true;
                playingID = 0;

                asioOut.Play();
            }
        }

        //after playback every Input gets removed again to setup for new playback
        protected virtual void OnPlaybackStopped(object sender, EventArgs e) {            
            if (playingID == 4) {
                mwp.RemoveInputStream(afr4);
            } else if (playingID == 8) {
                mwp.RemoveInputStream(afr8);
            } else {
                mwp.RemoveInputStream(afr0);
            }
            audioplaying = false;

        }

        private void button3_Click(object sender, EventArgs e)
        {
            asioOut.Stop();
        }       
    }
}