2011年06月04日

DirectSoundでマイクから録音するサンプルプログラムを作りました

DirectSoundを利用してマイクから録音するサンプルプログラムを作りました。

詳しくは以下のホームページにあります。

http://www.kana-soft.com/tech/sample_0011.htm

レイテンシを短くしようと試行錯誤したのですが、挫折しました。。。



posted by kana-soft at 22:18| Comment(0) | C/C++

2011年06月02日

MME利用してマイクから録音するサンプルプログラムを作りました

マルチメディアAPI(MME)利用してマイクから録音するサンプルプログラムを作りました。

詳しくは以下のホームページにあります。

http://www.kana-soft.com/tech/sample_0010.htm

依然作ったWAVファイルの再生プログラムをカスタマイズして作ったので、割と早く出来ました。


posted by kana-soft at 14:53| Comment(0) | C/C++

2011年05月28日

ASIOでサウンド再生を行うサンプルプログラムを作りました

ASIO SDKを利用してWAVEファイルを再生する簡単なサンプルプログラムを作りました。

詳しくは以下のホームページにあります。

http://www.kana-soft.com/tech/sample_0004.htm

とりあえず動作するサンプルプログラムですが、少々不明な点があります。 m(_ _)m


posted by kana-soft at 23:19| Comment(0) | C/C++

2011年05月20日

ユニコードを使用したときに文字化けするときの対処

Windowsのコンソールアプリケーションでユニコードを使用してwprintf()で日本語が文字化けする場合、「_wsetlocale」をプログラムの先頭で呼び出しておくと文字化けしないみたいです。



_wsetlocale( LC_ALL, L"japanese" );



原因はリソースファイルを組み込んでいない為だと思うのですが。。。。

posted by kana-soft at 15:29| Comment(0) | C/C++

2011年05月17日

タブオーダーを設定する

今まであまり意識していなかったのですが、ダイアログに貼り付けたボタンやテキストボックスのフォーカスの移動を[TAB]キーで行うときの移動する順番を「タブオーダー」というらしいです。

Visual BasicやC#の場合、各コントロールのプロパティ「TabIndex」に[TAB]キーでの移動順序を設定すればよいのですが、C/C++の場合どのように指定するのか判らなかったので調べてみました。

Visual Studio上でタブオーダーを設定する場合、リソースビューからタブオーダーを設定するダイアログを開いて、メニューの
[書式] - [タブオーダー]と選択するか、[Ctrl]キー + [D]を押すと、現在ダイアログで設定されている各コントロールのタブオーダーが表示されます。

ソースコード上で、どのようになっているかと言うと、リソース定義ファイル(.rc)に定義してある該当ダイアログに定義してある各コントロールの上から順番にタブオーダーが 1,2,3,... となるようです。



IDD_DIALOG1 DIALOGEX 0, 0, 338, 313
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
FONT 9, "MS UI Gothic", 0, 0, 0x1
BEGIN
EDITTEXT IDC_TEXT1,10,57,137,14, ES_AUTOHSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBOBOX1,58,18,110,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "OK",IDOK,281,7,50,16
PUSHBUTTON "キャンセル",IDCANCEL,281,25,50,16
END


この場合、タブオーダーは
1 → IDC_TEXT1
2 → IDC_COMBOBOX1
3 → IDOK
4 → IDCANCEL
の順になります。


プログラムから動的にタブオーダーを設定する場合、「SetWindowPos」を使用します。
MFCで書くと以下のようになります。



GetDlgItem( IDCANCEL )->SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
GetDlgItem( IDOK )->SetWindowPos( GetDlgItem( IDCANCEL ), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
GetDlgItem( IDC_COMBOBOX1 )->SetWindowPos( GetDlgItem( IDOK ), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
GetDlgItem( IDC_TEXT1 )->SetWindowPos( GetDlgItem( IDC_COMBOBOX1 ), 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );


この場合、タブオーダーは
1 → IDOK
2 → IDCANCEL
3 → IDC_COMBOBOX1
4 → IDC_TEXT1
の順になります。


因みにHTMLでタブオーダーを指定するときは、「tabindex」を使用します。



<form action="xx">
<input type="button" tabindex=3 value="a"><br>
<input type="button" tabindex=2 value="b"><br>
<input type="button" tabindex=1 value="c"><br>
</form>


この場合、タブオーダーは
1 → c
2 → b
3 → a
の順になります。


posted by kana-soft at 19:43| Comment(3) | C/C++