CaptureSound Managed その3

1.  次は、Waveformatの選択画面です。

    Main.csで、captureをnewした時

 

このnewされたcaptureには、パソコン内で、使用可能な、デバイスが、表示され

しかも、使用可能な、Waveformatが、bool型で、既に、決まっているようです。

これを使って、愚鈍にも、一つ一つ、ListBoxに追加しました。

private void my_enumulateDevices()

{

WaveFormat format = new WaveFormat();

Capture capt = mf.capture;

if (capt.Caps.Format11KhzMono16Bit)

listBox1.Items.Add("11KhzMono16Bit");

if (capt.Caps.Format11KhzMono8Bit)

listBox1.Items.Add("11KhzMono8Bit");

if (capt.Caps.Format11KhzStereo16Bit)

listBox1.Items.Add("11KhzStereo16Bit");

if (capt.Caps.Format11KhzStereo8Bit)

listBox1.Items.Add("11KhzStereo8Bit");

if (capt.Caps.Format22KhzMono16Bit)

listBox1.Items.Add("22KhzMono16Bit");

if (capt.Caps.Format22KhzMono8Bit)

listBox1.Items.Add("22KhzMono8Bit");

.........

そして、my_enumulateDevices()なるメソッドを作成。(この命名は、まちがっとるな...my_enumerateFormats かな?)

FormatsFormのコンストラクタに記述。

そして、メインフォームのメンバ、mfをFormatsFormに追加する所は

前回と、同じです。

public partial class FormatsForm : Form

{

private MainForm mf=null;

public FormatsForm(MainForm mf3)

{

InitializeComponent();

this.mf=mf3;

}

そんで、OKボタンが押されたとき

WaveFormatを、決定します。

private void button2_Click(object sender, EventArgs e)

{

    this.DialogResult = DialogResult.OK;

    WaveFormat format = new WaveFormat();

    int index = listBox1.SelectedIndex;

    switch (index / 4)

    {

        case 0: format.SamplesPerSecond = 11025;

        break;

        case 1: format.SamplesPerSecond = 22050;

        break;

        case 2: format.SamplesPerSecond = 44100;

        break;

        case 3:

        format.SamplesPerSecond = 48000;

        break;

        case 4: format.SamplesPerSecond = 96000;

        break;

        default: break;

        }

    switch (index % 4)

    {

        case 0: format.Channels = 1; format.BitsPerSample = 16;

        break;

        case 1: format.Channels = 1; format.BitsPerSample = 8;

        break;

        case 2: format.Channels = 2; format.BitsPerSample = 16;

        break;

        case 3: format.Channels = 2; format.BitsPerSample = 8;

        break;

        default: break;

        }

    //これで、waveformatが決まった。

    format.BlockAlign =(short)((format.Channels) * (format.BitsPerSample / 8));

    format.AverageBytesPerSecond = format.BlockAlign * format.SamplesPerSecond;

    mf.myformat = format; //ここで、メインプログラムに、このformatを渡す。

    Close();

    }

 

これで、DirectX9 DirectSound Sample(CaptureSound)の、第2の画面操作が、終わりました。

次回から、いよいよ、本丸の、メインプログラムに、入ります。

これが、大事やねんけど、ちょっと、しんどいねん。

H.18.6.24