2013年6月22日土曜日

オーディオコーデックの数を取得:Window Media SDK


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要
 
#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")
 
void main(void)
{
 printf("コンソール表示開始\n");
 
 HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);
 
 IWMCodecInfo3* pCodecInfo = NULL;
 IWMProfileManager* pProfileManager = NULL;
 HRESULT hr = S_FALSE;
 DWORD   cCodecs  = 0;
 
 hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 
 hr = WMCreateProfileManager(&pProfileManager);
 
 hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\
 
 //システム上でサポートされているオーディオコーデックの数を取得します。
 hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);
 
 if(SUCCEEDED(hr))
  printf("オーディオコーデックの数: %d\n\n", cCodecs);
 else
 {
  printf("オーディオコーデックの数を取得できませんでした。\n");
  return;
 }
 
 MessageBox(0,0,TEXT("OK"),0);
}

コーデックの数が正しいか調べてみたがよく分からない。

Windows Media Player のヘルプ-バージョン情報-テクニカルサポート情報
でコーデックを確認してみた。

コーデック名の取得
参考:http://msdn.microsoft.com/ja-jp/library/windows/desktop/dd743771(v=vs.85).aspx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要
 
#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")
 
void main(void)
{
 printf("コンソール表示開始\n");
 
 HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);
 
 IWMCodecInfo3* pCodecInfo = NULL;
 IWMProfileManager* pProfileManager = NULL;
 HRESULT hr = S_FALSE;
 DWORD   cCodecs  = 0;
 WCHAR*  pwszCodecName  = NULL;
 DWORD   cchCodecName     = 0;
 
 hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 
 hr = WMCreateProfileManager(&pProfileManager);
 
 hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\
 
  //システム上でサポートされているオーディオコーデックの数を取得します。
  hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);
 
 if(SUCCEEDED(hr))
  printf("オーディオコーデックの数: %d\n\n", cCodecs);
 else
 {
  printf("オーディオコーデックの数を取得できませんでした。\n");
  return;
 }
 
 /* ----------- オーディオコーデックの名前を取得 ----------- */
 //すべてのオーディオコーデックをループ。
 for(DWORD dwCodecIndex = 0; dwCodecIndex < cCodecs; dwCodecIndex++)
 {
  //まず、名前のサイズを取得する。
  hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio, dwCodecIndex, NULL, &cchCodecName);
 
  if(FAILED(hr))
  {
   printf("コーデック名のサイズを取得できませんでした。\n");
   return;
  }
 
  //適切なサイズの文字列を割り当てます。
  pwszCodecName = new WCHAR[cchCodecName];
  if(pwszCodecName == NULL)
  {
   printf("メモリを割り当てられませんでした\n");
   return;
  }
 
  // コーデック名を取得します。
  hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio,dwCodecIndex,pwszCodecName,&cchCodecName);
  if(FAILED(hr))
  {
   delete[] pwszCodecName;
   printf("コーデック名を取得できませんでした。\n");
   return;
  }
 
  // コーデック名を出力する。
  printf("%d %S\n", dwCodecIndex, pwszCodecName);
 
  // 次の繰り返しのためにクリーンアップします。
  delete[] pwszCodecName;
  pwszCodecName = NULL;
  cchCodecName  = 0;
 }
 
 MessageBox(0,0,TEXT("OK"),0);
}


よくわからないな・・・・・

0 件のコメント:

コメントを投稿