音楽CDを再生する(C/C++版)
音楽CDを再生するサンプルです。
サンプルの実行画面
ソースコード
[Sample2.c]
//--------------------------------------------------------------------------------------
// ■音楽CDを再生する■ Sample NO.2
//
//--------------------------------------------------------------------------------------
//リンクの設定
//リンクにwinmm.libを追加して下さい。
#include <windows.h>
//ボタンのID
#define ID_PLAY 1500
#define ID_PAUSE 1501
#define ID_STOP 1502
//コールバックプロシージャ
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
//------------------------------------------------------
//■関数 ScreenCenterX(ローカル)
//■用途 ウインドウを中央にする為にX座標(LEFT)を算出する
//■引数
// Width ...ウインドウの横幅
//------------------------------------------------------
int ScreenCenterX(int Width){
int X = (GetSystemMetrics(SM_CXSCREEN)- Width) / 2;
if (X<0) X=0;
return(X);
}
//------------------------------------------------------
//■関数 ScreenCenterY(ローカル)
//■用途 ウインドウを中央にする為にY座標(TOP)を算出する
//■引数
// Height ...ウインドウの縦幅
//------------------------------------------------------
int ScreenCenterY(int Height){
int Y= (GetSystemMetrics(SM_CYSCREEN)- Height) / 2;
if (Y<0) Y=0;
return(Y);
}
//------------------------------------------------------
//■関数 CreateMainWindow(ローカル)
//■用途 メインウインドウを作成する
//■引数
// Width ...ウインドウの横幅
// Height ...ウインドウの縦幅
// Caption ...タイトル名
// hInstance ...インスタンスハンドル
// nCmdShow ...ウインドウの表示形態
// lpfnWndProc...コールバックプロシージャ
// dwstyle ...ウインドウスタイル
// dwExstyle ...拡張ウインドウスタイル
// MenuID ...メニューのID
// hIcon ...アイコン
//■戻り値
// ウインドウのハンドル
//------------------------------------------------------
HWND CreateMainWindow(int Width,int Height,LPCTSTR Caption,HINSTANCE hInstance,
int nCmdShow,WNDPROC lpfnWndProc, DWORD dwstyle,DWORD dwExstyle,
LPCTSTR MenuID,HICON hIcon){
HWND hWnd; // メインウインドウのハンドル
WNDCLASS myClass; // WNDCLASS構造体
// WNDCLASS構造体を0で初期化
ZeroMemory(&myClass,sizeof(WNDCLASS));
//--->WNDCLASS構造体の設定&ウインドウクラスの登録
myClass.style = CS_HREDRAW | CS_VREDRAW; // ウインドウスタイルを設定
myClass.lpfnWndProc = lpfnWndProc; // コールバックプロシージャへのポインタ
myClass.hInstance = hInstance; // インスタンスハンドルを設定
myClass.hCursor = LoadCursor(NULL, IDC_ARROW);// カーソルの設定(Windows標準リソースを使用)
myClass.hbrBackground = (HBRUSH)COLOR_WINDOW; // ウインドウの背景を設定(デフォルトカラー)
myClass.lpszClassName = "TForm"; // クラス名の設定(Borland Delphi風)
myClass.hIcon = hIcon; // アイコンの指定
myClass.lpszMenuName = MenuID; // メニューの設定
// ウィンドウ クラスを登録
RegisterClass(&myClass);
//--->ウインドウの作成&表示
// メインウインドウの生成
hWnd = CreateWindowEx(
dwExstyle, // 拡張ウインドウスタイル
"TForm", // 登録されたクラス名のアドレス
Caption, // ウインドウ名
dwstyle, // ウインドウスタイルを設定
ScreenCenterX(Width), // X座標の位置設定
ScreenCenterY(Height),// Y座標の位置設定
Width, // 横幅を設定
Height, // 縦幅を設定
NULL, // 親ウインドウを設定
NULL, // メニューを設定
hInstance, // インスタンスを識別
NULL); // 作成したウインドウに渡すデータへのポインタ
// ウインドウの表示(表示方法はnCmdShowに従う)
ShowWindow(hWnd, nCmdShow);
return(hWnd);
}
//------------------------------------------------------
//■関数名 ControlCreate
//■用途 ウインドウ(コントロール)を作成
//■引数
// hwndParent ...親ウインドウのハンドル
// Left ...作成するウインドウの左隅のX座標
// Top ...作成するウインドウの左隅のY座標
// Width ...作成するウインドウの横幅
// Height ...作成するウインドウの縦幅
// dwExStyle ...ウインドウの拡張フラグ
// dwFlag ...ウインドウの作成フラグ
// Caption ...作成するウインドウのキャプション
// ClassName ...作成するウインドウクラス名
// ChildID ...子ウインドウの識別子
// hInstance ...インスタンスハンドル
//■戻り値
// 子ウインドウのハンドル
//------------------------------------------------------
HWND CreateControlWindow(HWND hwndParent, int Left, int Top,int Width, int Height,int dwExStyle ,
int dwFlag ,LPCTSTR Caption, LPCTSTR ClassName,HMENU ChildID,HINSTANCE hInstance){
return CreateWindowEx(dwExStyle,ClassName,Caption,WS_CHILD | WS_VISIBLE | dwFlag ,
Left, Top, Width, Height, hwndParent, ChildID, hInstance, NULL);
}
//--------------------------------------------------------
//■関数 WinMain
//■用途 メインの関数
//■引数
// hInstance ...現在のインスタンスのハンドル
// hPrevInstance...以前のインスタンスのハンドル
// pszCmdLine ...コマンド ラインのアドレス
// nCmdShow ...ウィンドウの表示状態
//--------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){
MSG msg;
//メインウインドウを作成
CreateMainWindow(350,150,"音楽CDを再生する",hInstance,nCmdShow,(WNDPROC)WindowProc,
WS_OVERLAPPEDWINDOW,WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE,NULL,LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION)));
//送られてくるメッセージを翻訳してプロシージャに渡す
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
//------------------------------------------------------
// ■関数 WindowProc
// ■用途 メインウインドウに送られるメッセージを処理
// ■引数
// hwnd ...ウインドウのハンドル
// uMsg ...メッセージID
// wParam ...第1メッセージ パラメータ
// lParam ...第2メッセージ パラメータ
//------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch (uMsg)
{
//メインウインドウ作成時
case WM_CREATE:
// 再生ボタン作成
CreateControlWindow(hwnd,20,10,100,100,0,BS_PUSHBUTTON,"再生","BUTTON",(HMENU)ID_PLAY,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE));
// 一時停止ボタン作成
CreateControlWindow(hwnd,121,10,100,100,0,BS_PUSHBUTTON,"一時停止","BUTTON",(HMENU)ID_PAUSE,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE));
// 停止ボタン作成
CreateControlWindow(hwnd,222,10,100,100,0,BS_PUSHBUTTON,"停止","BUTTON",(HMENU)ID_STOP,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE));
break;
// コマンドメッセージ
case WM_COMMAND:
switch LOWORD(wParam)
{
case ID_PLAY:
// ポートを開く
mciSendString("Open CDaudio", NULL, 0, 0);
// 音楽CDを再生
mciSendString("Play CDaudio", NULL, 0, 0) ;break;
case ID_PAUSE:
// 一時停止
mciSendString("Stop CDaudio",NULL, 0, 0) ;break;
case ID_STOP:
// 一時停止
mciSendString("Stop CDaudio", NULL, 0, 0) ;
// ポートをクローズ
mciSendString("Close CDaudio", NULL, 0, 0) ;
break;
}
break;
case WM_DESTROY:
mciSendString("Stop CDaudio", NULL, 0, 0);
mciSendString("Close CDaudio", NULL, 0, 0) ;
PostQuitMessage(0);
break;
// その他のメッセージはWindowsに任せる
default:return(DefWindowProc(hwnd, uMsg, wParam, lParam));
}
return (0);
}
ソースコード一式のダウンロード
capi_sample2.zip 2,741 バイト
動作環境
このサンプルは 「Windows98」及び「Microsoft Visual C++5.0」「Borland C++ Compiler 5.5」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。
Visual C++5.0でのコンパイル
VC5.0でサンプルをコンパイルする場合は新規プロジェクト(Win32Application)を作成後、各ファイルを追加してビルドしてください。
Borland C++ Compiler 5.5でのコンパイル
BCC5.5でサンプルをコンパイルする場合は「bcc32.exe」で*.c又は*.cppファイルをコンパイルします。リソースがある場合は「brc32.exe」で*resファイルを付与してください。
サンプルについて
このWindows APIサンプル集(C/C++版)は2000年頃にC/C++言語の学習の為に作成したものです。コードはエレガントではなく「初心者レベルのコーディング」です。仕事などの業務で利用する際にはエラー処理やメモリ解放などの再確認を必ずして下さい。
スポンサーリンク
関連記事
| 前の記事: | MIDIファイルを再生する(C/C++版) |
| 次の記事: | CDトレイを開閉する(C/C++版) |
公開日:2015年03月19日
記事NO:00458
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









