2016-12-01 3 views
0

を持っていますC#/ Consoleアプリケーションと、基本的なDirectSound機能にアクセスできるSharpDXパッケージが含まれています。私はちょうど最初の例で行くように2秒のメモ 'A'を作成し、演奏しようとしています。次のコードを実行すると、2秒間再生されますが、非常に静的です。私は計算に何かがあると仮定していますが、正確に何が分かるのかわかりません。誰もが自分のデジタルサウンドバッファーを書いた経験がありますか?私のDirectXサウンドバッファは、だから私は大学の割り当てに取り組んで楽しむ(シャープ自分のスキルの一部を維持するために)、私はこの1つに取り組むことにしましたスタティックノイズ

おかげで、 - ジェフ

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(); 
    } 
} 

答えて

0

ためvar bits = 16;の期待値は非常に単純new short[bufferDescription.BufferBytes];と最終的な計算にbufferDataを交換bufferData[sample] = (short)(value * short.MaxValue);できれば修正する必要があり、(-32768、+32767)短くすべきですノイズ

関連する問題