Is it possible to generate a constant sound in C# while adjusting its frequency?

后端 未结 2 526
面向向阳花
面向向阳花 2021-01-12 05:52

Is it possible to generate a constant sound in C# and manipulate its frequency as it goes?

I tried something like this:

for (int i = 500; i < 1500         


        
2条回答
  •  盖世英雄少女心
    2021-01-12 06:48

    Code below generate sine wave. You can to change frequency and other parameters

        private void TestSine()
        {
            IntPtr format;
            byte[] data;
            GetSineWave(1000, 100, 44100, -1, out format, out data);
            WaveWriter ww = new WaveWriter(File.Create(@"d:\work\sine.wav"),
                AudioCompressionManager.FormatBytes(format));
            ww.WriteData(data);
            ww.Close();
        }
    
        private void GetSineWave(double freq, int durationMs, int sampleRate, short decibel, out IntPtr format, out byte[] data)
        {
            short max = dB2Short(decibel);//short.MaxValue
            double fs = sampleRate; // sample freq
            int len = sampleRate * durationMs / 1000;
            short[] data16Bit = new short[len];
            for (int i = 0; i < len; i++)
            {
                double t = (double)i / fs; // current time
                data16Bit[i] = (short)(Math.Sin(2 * Math.PI * t * freq) * max);
            }
            IntPtr format1 = AudioCompressionManager.GetPcmFormat(1, 16, (int)fs);
            byte[] data1 = new byte[data16Bit.Length * 2];
            Buffer.BlockCopy(data16Bit, 0, data1, 0, data1.Length);
            format = format1;
            data = data1;
        }
    
        private static short dB2Short(double dB)
        {
            double times = Math.Pow(10, dB / 10);
            return (short)(short.MaxValue * times);
        }
    

提交回复
热议问题