Мой звуковой буфер directx имеет статический шум. Пожалуйста помочь.
Поэтому мне нравится работать над заданиями в колледже (чтобы сохранить некоторые из моих навыков острыми), и я решил заняться этим:
Назначение программирования COS 126: назначение цифровой обработки сигналов[^]
Я запускаю приложение MSVS2015 C# / Console вместе с пакетом SharpDX, который дает мне доступ к некоторым базовым возможностям DirectSound. Я просто пытаюсь создать и сыграть 2-секундную ноту "а", как они идут в первом примере. Когда я запускаю следующий код, он воспроизводит 2 секунды,но он очень статичен. Я предполагаю, что что-то не так с моими расчетами, но я не могу понять, что именно. Есть ли у кого-нибудь опыт написания собственных цифровых звуковых буферов?
Спасибо,
- Джефф
Что я уже пробовал:
public class Execution : IDisposable { IntPtr Handle; DirectSound Device; SecondarySoundBuffer Buffer; public Execution() { Handle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; Device = new DirectSound(); Device.SetCooperativeLevel(Handle, CooperativeLevel.Priority); var rate = 44100; var bits = 16; var channels = 1; var waveFormat = new WaveFormat(rate, bits, channels); // Create a buffer with 2 seconds of sample data var seconds = 2; var bufferDescription = new SoundBufferDescription() { Format = waveFormat, BufferBytes = waveFormat.AverageBytesPerSecond * seconds }; Buffer = new SecondarySoundBuffer(Device, bufferDescription); var noteFrequency = 440f; // A var bufferData = new float[bufferDescription.BufferBytes]; var count = 0; for (var sample = 0; sample < bufferDescription.BufferBytes; sample++) { var sampleInSeconds = (float)sample / (float)bufferDescription.BufferBytes * (float)seconds; var value = (float)Math.Sin(2f * Math.PI * noteFrequency * sampleInSeconds ); bufferData[sample] = value; } Buffer.Write(bufferData, 0, LockFlags.EntireBuffer); } public void Execute() { Buffer.Play(0, 0); } public void Dispose() { Buffer.Dispose(); Device.Dispose(); } }