SharpDX.XAudio2によりSin波(440Hz)を再生させるサンプルソースをご参考に貼り付けます。
このままコンパイルしてもSharpDXがないのでエラーになります。SharpDXはMS VisualStdioのパッケージ管理ツール(NuGet PackageManager)を使ってお使いのPC環境にインストールしてからビルトしてください。
using System; using System.Collections; 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 SharpDX.XAudio2; using SharpDX.Multimedia; using SharpDX.IO; using SharpDX; namespace SinWaveTest { public partial class Form1 : Form { XAudio2 xaudio2; MasteringVoice masteringVoice; SourceVoice sourceVoice; DataStream dataStream; int bufferSize; AudioBuffer audioBuffer; WaveFormat waveFormat; const int PLAYTONE = 440; // play A440 Hz const int PLAYSEC = 100; // data for 100msec const int SAMPLING = 44100; // sampling rate const int BITDEPTH = 16; const int CHANNELS = 1; bool isPlaing = false; int numberOfSamples = 0; public Form1() { InitializeComponent(); soundSetup(); } private void button1_Click(object sender, EventArgs e) { if (!isPlaing) // check playing or not.. Unskilful coding.. mmm { sourceVoice.Start(); isPlaing = true; } } private void button2_Click(object sender, EventArgs e) { // stop sourceVoice.Stop(); isPlaing = false; } void soundSetup() { xaudio2 = new XAudio2(); masteringVoice = new MasteringVoice(xaudio2); waveFormat = new WaveFormat(SAMPLING, BITDEPTH, CHANNELS); sourceVoice = new SourceVoice(xaudio2, waveFormat); bufferSize = waveFormat.ConvertLatencyToByteSize(PLAYSEC); dataStream = new DataStream(bufferSize, true, true); numberOfSamples = bufferSize / waveFormat.BlockAlign; audioBuffer = new AudioBuffer { Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize, LoopCount = AudioBuffer.LoopInfinite }; generateSinWave(PLAYTONE); // 440Hz sourceVoice.SubmitSourceBuffer(audioBuffer, null); } void generateSinWave(int freq) { Int16 value; dataStream.Position = 0; for (int i = 0; i < numberOfSamples; i++) { value = (Int16)(Math.Sin(2 * Math.PI * freq * i / waveFormat.SampleRate) * System.Int16.MaxValue); dataStream.Write(value); } } } }
NuGet PackageManagerでSharpDXをローカルにインストールしているところ
サンプルを実行した画面(上記はForm.csだけなので、プロジェクトの各種設定が必要ですが。。)
■引用先
あちこちのサイトからSharpDXのサンプルを引用させていただきました。情報ありがとうございます。どのサイトから引用したか?は下記の記事を参照ください。
http://d.hatena.ne.jp/chakoku/20150815/1439623261
DirectSoundで音を出す(C#)→かなり難航→SharpDXを使うと良さそうだ