C言語でMIDIを鳴らしたいです。
現在Microsoft Visual C++ Express Edition 2010(または2008)を使ってC言語(C++ではなく)の勉強をしているのですが、
Express EditionではMIDIを鳴らすことはできないのでしょうか?
midiファイルを読み込んで再生するのではなく、Win32APIなどで特定の音を鳴らすようにしたいです。
例えば、ボタンを押したらドの音が鳴るという程度のプログラムです。
サンプルプログラムをいくつか検索してコンパイルしてみたのですが、バージョンが古いからなのか、Express Editionでは無理なのかエラーが出てしまいます。
どのようなプログラムを作れば音を鳴らすことができるのでしょうか?
できればソースを示していただけるとありがたいです。
No.2ベストアンサー
- 回答日時:
プログラム全体を載せようとしましたが、文字数オーバーでした。
多分、「プリコンパイル済みヘッダー」の使用を許可しているためにおかしいのだと思う。
ちなみに以下のように設定を変更したら出来た。
●「プロジェクト」「プロパティ」「構成プロパティ」「全般」「文字セット」
(Unicode文字セットをしようする。)を(マルチバイト文字セットを使用する)
●「プロジェクト」「プロパティ」「構成プロパティ」「コンパイル済みヘッダー」「プリコンパイル済みヘッダーの作成/使用」
(プリコンパイル済みヘッダーを使用しない)に変更
ヘッダファイルの読み込みを修正
_tWinMainをWinMainに変更
以下の行の追加
#pragma comment (lib, "winmm.lib")
これで、vista + Express Edition2008 で音が出せています。
この回答への補足
返答ありがとうございます。
今まで2010で行っていたのですが、2008でやってみたところ、次のソースで再生ができました。
#include <windows.h>
#pragma comment (lib, "winmm.lib")
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
HMIDIOUT hmo;
if (midiOutOpen(&hmo, MIDI_MAPPER, 0, 0, CALLBACK_NULL) != MMSYSERR_NOERROR)
return 0;
midiOutShortMsg(hmo, 0x00703C90); // 発音
Sleep(1000); // 1秒休む
midiOutShortMsg(hmo, 0x00703C80); // 消音
MessageBox(NULL, TEXT("消音しました。"), TEXT("OK"), MB_OK);
midiOutClose(hmo);
return 0;
}
2010では以前述べたエラーが出るようです。
設定は「プリコンパイル済みヘッダーを使用しない」「Univode文字を使用する」にしてあります。
2010では何か大きく変わったのでしょうか?
No.3
- 回答日時:
C言語でMIDIを鳴らすということから少しずれてるかもしれませんが、いちおうC言語を使っている
ということで、まあ参考までに。新規作成でwindowsフォームアプリケーションを選択。フォーム上にボタンを一つ
配置してそのボタンをダブルクリック。自動生成されたコードのなかに
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
HMIDIOUT hMidi;
midiOutOpen(&hMidi,0,0,0,0);
midiOutShortMsg(hMidi,0x603c90);
System::Threading::Thread::Sleep(500);
midiOutShortMsg(hMidi,0x003c80);
midiOutClose(hMidi);
}
Form1.h で一番上に
#include <windows.h>
//#include <mmsystem.h> //これも必要なはずだけど自分の環境vc++2008express editionでは
//省略できた。
#pragma comment(lib, "winmm.lib")//これは必要
いちおうプロジェクトのプロパティーを構成プロパティー>全般ー>共通言語ランタイムサポート
を /clr にしておいたほうがいいかもしれません。
No.1
- 回答日時:
発生しているエラーが何なのか分からないので的確なアドバイスが出来ません。
しかし、MFC等を使わずにWindows-APIだけを使用して音を鳴らす例なら以下のURLに記載されているようです。
http://wisdom.sakura.ne.jp/system/winapi/media/m …
http://eternalwindows.jp/winmm/midi/midi01.html
この回答への補足
http://eternalwindows.jp/winmm/midi/midi01.html
のほうのサンプルをビルドしてみたのですが、
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(7): error C2065: 'HMIDIOUT' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(7): error C2146: 構文エラー : ';' が、識別子 'hmo' の前に必要です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(7): error C2065: 'hmo' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(9): error C2065: 'hmo' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(9): error C2065: 'MIDI_MAPPER' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(9): error C2065: 'CALLBACK_NULL' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(9): error C3861: 'midiOutOpen': 識別子が見つかりませんでした
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(14): error C2065: 'hmo' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(14): error C3861: 'midiOutShortMsg': 識別子が見つかりませんでした
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(18): error C2065: 'hmo' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(18): error C3861: 'midiOutShortMsg': 識別子が見つかりませんでした
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(22): error C2065: 'hmo' : 定義されていない識別子です。
1>e:\nuages\software\midi\midi3\midi3\midi.cpp(22): error C3861: 'midiOutClose': 識別子が見つかりませんでした
という結果になりました。
これをどうすれば修正できるのかよくわかりません。
ちなみにコンソールアプリケーションではなく、Windowsアプリケーションの制作を想定しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- 作詞・作曲 DTM DAWとmidiキーボードについて 1 2022/10/20 16:41
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 作詞・作曲 iMacでMIDIデータを良い音で再生するための音源をインストールする方法を教えて下さい 4 2022/07/09 17:51
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- 作詞・作曲 MIDIキーボード内蔵オーディオインターフェイス 1 2022/06/04 08:35
- 楽器・演奏 電子ピアノの音が鳴る時と鳴らない時と最大音量で鳴らない時がある。なぜ? 電子ピアノY-115を持って 2 2022/09/04 06:01
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
” OS ビルド ” の意味が分か...
-
1 つ以上の複数回定義されてい...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
ビルドとリビルドの違いを教え...
-
<math.h>があるのにsqrtが・...
-
Emacsでのgccのインクルードパ...
-
プログラムのファイルの保存
-
セミコロンについて
-
[c++] <pthread.h>がinclude で...
-
MFCのエラーについて
-
COBOL85での実行ファイルの作成...
-
不要な #include
-
asp.net
-
gcc で シフトJISを通す方法を...
-
visual C++
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
ILSpyで、デコンパイルできない。
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
戻り値について
-
C言語でmからnまでの合計を求め...
-
C++コンパイル時に『 C1083: in...
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
【VC++6.0(MFC)】警告「LINK : ...
-
[c++] <pthread.h>がinclude で...
おすすめ情報