画像+音

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
trx

画像+音

#1

投稿記事 by trx » 16年前

たびたびすみませんが、
前回の問題は、解決しました。
皆様、どうも有り難うございました。
ですが、また問題が出てきました。
今度は、音は出ますが、画像が出てきません。
プログラムの順番を変えると、今度は、音が出ないで、画像だけが出てきます。
audio.cppを上にして、音だけ出るファイルにしたいのですが、何処を取り除けば良いのか解らなくて...
何度も投稿してすみません。
これで最後のこのプログラムに関する、新規投稿、にするつもりです。
audio.cppを添付しました。

trx

Re:画像+音

#2

投稿記事 by trx » 16年前

Graphic.cppです。

kazuoni

Re:画像+音

#3

投稿記事 by kazuoni » 16年前

前回の続きで質問でいいかと思いますよ^^;
とりわけ質問内容が変わるわけではないので。

気になるのは、 ken[61] = 207;です。
何を表示しようとしているのですか?
DrawGraph()はLoadGraph()で得られたグラフィックハンドルが必要です。

trx

Re:画像+音

#4

投稿記事 by trx » 16年前

kazuoniさん、回答ありがとうございます。
ken[61] = 207;は、省き忘れていました。
有難う御座いました。
それと一つ、言い忘れていましたが、現在のファイルを実行すると、全面モードになってしまいます。
ChangeWindowMode(TRUE)ですのに、なぜなのですか?
回答よろしくお願いします。
audio.cppを添付しました。

trx

Re:画像+音

#5

投稿記事 by trx » 16年前

ChangeWindowMode(FALSE)から
ChangeWindowMode(TRUE)に変えた
Graphic.cppです。

kazuoni

Re:画像+音

#6

投稿記事 by kazuoni » 16年前

少なくとも、Graph.cppはウィンドウモードになると思いますよ。
(実行してませんが。)
SetGraphMode( 1479 , 600 , 32 ) ;
をif文の前に持っていかないと、
640*480のウィンドウが描写されるのでは?

audio.cppにはChangeWindowModeが記述されていませんが?

ねこ

Re:画像+音

#7

投稿記事 by ねこ » 16年前

ちょっと確認したいのですが「audio.cpp」と「graph.cpp」はもしかして同じプロジェクトにありますか?
そうだとしたらWinMainが2個存在するのがおかしいです。
もしそうでないならウィンドウモードの設定はDXLIBの機能なので、関数が正常に動いてない可能性があります。
本家の掲示板で調べるかグラボの情報と共に管理人さん向けに質問すると良いです。

で、前も同じ事言った気がしますがphを描画しようとしてますが、画像読んでません。

trx

Re:画像+音

#8

投稿記事 by trx » 16年前

回答有難う御座います。
SetGraphMode( 1479 , 600 , 32 ) ;
をif文の前に持ってくると言うのは、
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
の前のことですか?
前に持ってきましたが、一瞬で消えてしまいます。
ただ今の状態は、ウィンドーモードのはずなのに、全面モードみたいに、上の罰点などがある、バーが在りません。でも全面には、成っていません。これも一つの問題ですが、マイナーな問題だと思いましたので、気にしていませんでした。もしかしたらこれが原因ですか?
「audio.cpp」と「graph.cpp」は同じプロジェクトに在ります。
説明が不十分ですみませんでした。
WinMainを一個にするには、何処の何を改良るれば良いのですか?
>グラボの情報と共に管理人さん向けに質問すると良いです。
どう言う意味ですか?
メールを管理人さんに、する事ですか?
>画像読んでません。
と言うのは、画像が出てこないと言うことですか?
phは、でています...

回答よろしくお願いします。
少し変えた、graphic.cppを添付します。

ねこ

Re:画像+音

#9

投稿記事 by ねこ » 16年前

<「audio.cpp」と「graph.cpp」は同じプロジェクトに在ります。
全体的な改良になるので、どっちかのソースをもう一方に移植した方が早そうです。

<グラボ関連
単にWinMain2個ある問題のようなので無視して良いです。

<ph
恐らくtrxさんはAudio.cppのphとGraphc.cppにあるphとを「同じ物」と認識しているのではないでしょうか?
それぞれの関数内で宣言しているphは別物ですので、それぞれで必要な画像を読み込む必要があります。
audio.cpp側のphは宣言しているだけなので画像が出ません。

trx

Re:画像+音

#10

投稿記事 by trx » 16年前

回答有難う御座います。
ソースコードを別にしたのには、訳があるので一つには出来ません。
audio.cppは、GetHitKeyStateAll_2
graphic.cppは、GetHitKeyStateAllを使っています。
ですので、二つで動く方法を教えてください。
phは、前にGraphic.cppとAudio.cppが一つに成っていた時から消し忘れていました。
phなどを消した、audio.cpp

ねこ

Re:画像+音

#11

投稿記事 by ねこ » 16年前

えーっと、「GetHitKeyStateAll_2」関数は「GetHitKeyStateAll」に1回押し、押し時間対応した関数という認識で、分ける意味が分からないのですが・・・

何故分けてるのでしょうか?
そこが分からないと組み合わすにも手が出せません。

trx

Re:画像+音

#12

投稿記事 by trx » 16年前

回答有難う御座います。
分けるのは、前に誰かに分けた方が良いと言われたので分けています。
ですが、一つにできるのでしたら、一つにしてみます。

kazuoni

Re:画像+音

#13

投稿記事 by kazuoni » 16年前

>前に誰かに分けた方が良い
関数化し、機能を分割するっという意味合いが強いかと思いますよ。
もしくは分割コンパイルとか。

一度、入門ページの「関数」の復習をされることをお勧めします。

trx

Re:画像+音

#14

投稿記事 by trx » 16年前

回答有難う御座います。
一個にまとめたのですがエラーが...
エラー E2034 C:\MyC\piano2\audio.cpp 105: 'char *' 型は 'int *' 型に変換できない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
エラー E2342 C:\MyC\piano2\audio.cpp 105: パラメータ 'KeyStateBuf' は int * 型として定義されているので char * は渡せない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )

charをintに変えると今度はまた別の問題が...
エラー E2034 C:\MyC\piano2\audio.cpp 296: 'int *' 型は 'char *' 型に変換できない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
エラー E2342 C:\MyC\piano2\audio.cpp 296: パラメータ 'KeyStateBuf' は char * 型として定義されているので int * は渡せない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
どうすればよいのでしょうか。
回答よろしくお願いします

pooka

Re:画像+音

#15

投稿記事 by pooka » 16年前

1個にまとめたということですが
105行目ではGetHitKeyStateAll_2(KeyBuf)
296行目ではGetHitKeyStateAll(KeyBuf)
と同じ変数でGetHitKeyStateAllとGetHitKeyStateAll_2が使われています。
GetHitKeyStateAllはchar型の配列、GetHitKeyStateAll_2はint型の配列を使用しなければならないので、
KeyBufの型を変えてもどちらかでエラーが発生します。

あと現在while文が2つあり、上の方は画像が表示されず音だけが鳴り、エスケープキーを押した後下の方で画像だけが表示されるという風になっています。

やはり分けた方が良いというのは、kazuoniさんが書かれているようなことだと思いますので、
音を鳴らす関数、画像を表示する関数に分けて、1つのwhile文でそれぞれの関数を呼ぶようにすればいいのではないでしょうか?

trx

Re:画像+音

#16

投稿記事 by trx » 16年前

回答有難う御座います。
kazuoniさんが書かれているように分けるのでしたら、一個にまとめた方と、分けてある方、どっちを元にした方が良いのでしょうか?
あとずいぶん前に質問した事なのですが、なぜフルスクリーンモードになってしまうのですか?
回答よろしくお願いします。

trx

Re:画像+音

#17

投稿記事 by trx » 16年前

後もう一つ問題を言い忘れていました。
二つに分ける場合、Winmainが二つ存在してしまいます。
WinmainをAudio.cppから消したいのですが、どうすれば良いのでしょうか?
ただ単に、消すだけでは、エラーばかり出てしまいます。
この事も前に質問した事ですが、回答が来なかったのでよろしくお願いします。

zwi

Re:画像+音

#18

投稿記事 by zwi » 16年前

色々と混乱されているみたいですが、とりあえずファイルを分けるのは後回しにして1つのファイルにまとめるのが良いかと思います。
まとめる場合は、2つのソースの同じところは捨てて違う部分だけを移植します。ソースを見た感じからAudio.cppをGraphic.cppに統合するのが良いかと思います。
その場合、whileループ前、中、後に分けてそれぞれ合成してください。つまりwhileループの中身はwhileループの中身と合成する必要があります。
KeyStateBufの問題については、KeyStateBufをKeyStateBuf1とKeyStateBuf2に分けてはどうでしょうか?
GetHitKeyStateAll_2にはKeyStateBuf2を使い、GetHitKeyStateAllにはKeyStateBuf1を使います。

その他にも直したいところは沢山あるのですが、これ以上言っても混乱されると思いますのでこれまでとしておきます。
ちゃんとしたプログラムにしたい場合は、Cの関数、ファイル分割、モジュール化の手法、データ構造、アルゴリズムの勉強をされる事をお勧めします。特にif文が大量に羅列している部分は、テーブル化したらものすごくすっきりしますよ。何事も基本を疎かにしては成り立ちません。

>あとずいぶん前に質問した事なのですが、なぜフルスクリーンモードになってしまうのですか?
この件については、うまくウィンドウモードになるはずですがとしか言えません。
SetGraphMode( 1479 , 600 , 32 ) ;
と言うやたら横にデカイ画面サイズが関係するのかも知れませんので、サイズを変えるとか色々実験してみてください。

trx

Re:画像+音

#19

投稿記事 by trx » 16年前

回答有難う御座います。
KeyStateBufをKeyStateBuf1とKeyStateBuf2に分けたらできました。
有難うございました。
DrawBox(0, 0, 1470, 600, 00000, TRUE);
を消したら、ウィンドーモードに成りました。
ですが、画像を置いていない所は、透明に成ってしまっています。
それと、ウィンドーモードの罰点を押しても閉じませんので、Alt+F4を押さないと消えません。
そこをどうにかしたいのですが...
回答よろしくお願いします。
今の段階のものを添付します。

zwi

Re:画像+音

#20

投稿記事 by zwi » 16年前

まず、ソースの問題からwhileループ中にScreenFlip()が2回出てきますが1つしか要りません。
各関数の意味と言うか役目を調べてなぜ必要か理解するようにしてくださいね。

>DrawBox(0, 0, 1470, 600, 00000, TRUE);を消したら、ウィンドーモードに成りました。ですが、画像を置いていない所は、透明に成ってしまっています。
このDrawBox()の意味は理解されていますか?背景をクリアするために存在します。
なので、消したら透明になるのは当たり前なんですよ。
で、DrawBox(0, 0, 740, 600, 00000, TRUE);
と書いたらどうですか?ウィンドウモードで半分だけクリアされますでしょうか?
もしOKなら、
DrawBox(740, 0, 740, 600, 00000, TRUE);
を付け加えてみてください。
これでもウィンドウモードでしょうか?実験をお願いします。
前から疑問なんですが、お使いのパソコンのデスクトップは横幅が1480ドット以上あるんでしょうか?
いや、あるなら問題ないです。ないなら、それが問題なのではと思います。

>それと、ウィンドーモードの罰点を押しても閉じませんので、Alt+F4を押さないと消えません。
そこをどうにかしたいのですが...
とりあえず、終了できるはずですが・・。
ALT+F4に反応するならXを押しても終了するはずなんですけどね。
あとECSキーで終了するか試してみてください。

Mist

Re:画像+音

#21

投稿記事 by Mist » 16年前

これが原因かどうかはわかりませんが、DrawBoxに限らずColorに渡す値はGetColorの戻り値を使用するべきだと思いますが。

DrawBox(0, 0, 1470, 600, GetColor(0,0,0), TRUE) ;

DXライブラリのリファレンスをよく読んで、各関数の機能や使い方を十分理解されるべきではないでしょうか 。

trx

Re:画像+音

#22

投稿記事 by trx » 16年前

添付して在るのは、
DrawBox(0, 0, 740, 600, 00000, TRUE);
を試してみた結果です。
ウィンドーモードに成らないと言うより、ウィンードーが被さっている、と言う方が適切だったと思います。
あと、
DrawBox(740, 0, 740, 600, 00000, TRUE);
は、何もでないでただ透明に成りました。
一応、ウィンドーモードです。
パソコンのデスクトップは横幅が1480ドット以下だった場合は、SetGraphModeの値を減らせば良いのでしょうか?ですがこうした場合、右端が切れてしまいます。
この状態で、
DrawBox(740, 0, 740, 600, 00000, TRUE);
を試してみたらウィンードーが被さっている、状態に成りました。

zwi

Re:画像+音

#23

投稿記事 by zwi » 16年前

DrawBoxを入れている位置が間違っている気がしますが?
while直後に入れていますか?

>パソコンのデスクトップは横幅が1480ドット以下だった場合は、SetGraphModeの値を減らせば良いのでしょうか?ですがこうした場合、右端が切れてしまいます。

デスクトップサイズを超えるサイズのウィンドウは作れませんから、ウィンドウサイズを合わせるしかありません。端が切れるなら、表示するグラフィックを小さなものにしてデスクトップのサイズ以下になるように変更してください。
将来的に他の人に配布を考えているのなら横幅1000ドットが限界だと思います。

trx

Re:画像+音

#24

投稿記事 by trx » 16年前

while文の、直前、中、直後、どれに入れても結果は、変わりませんでした。

zwi

Re:画像+音

#25

投稿記事 by zwi » 16年前

では、デバッグの基本に則って問題の原因を絞り込みましょう。
まず、次の組み合わせで実験してみてください
(1)SetGraphMode( 740 , 600 , 32 );と定義。DrawBox(0, 0, 740, 600, 00000, TRUE); をwhile直後に。
(2)SetGraphMode( 740 , 600 , 32 );と定義。DrawBoxはなし。
で、(1)と(2)で問題は出ますでしょうか?

trx

Re:画像+音

#26

投稿記事 by trx » 16年前

実行中には、何も違いも在りませんでしたが、
(1)は、閉じた後、黒い四角DrawBox(0, 0, 740, 600, 00000, TRUE);
の後が残りました。
それと、前と比べると(1440 , 600 , 32 の時)、罰点で消える様になりました。

zwi

Re:画像+音

#27

投稿記事 by zwi » 16年前

であれば、状況から推察できる事はひとつ。
ウィンドウサイズがデスクトップサイズを超えているのが全ての原因でしょう。
これは、たぶん解決しようが無いのでデスクトップサイズを超えないように作るしかないです。

trx

Re:画像+音

#28

投稿記事 by trx » 16年前

色々と試してみて、出た自分なりの結論は、
SetGraphModeの、( X , Y , Z)
の、Xの値が、1440以下、1431以上
の場合、変なウィンドーモード、
1440以上の場合、透明
1431以下の場合、正常

zwi

Re:画像+音

#29

投稿記事 by zwi » 16年前

どうしても納得できない&気になるようでしたらDXライブラリ配布もとの本家サイトでお尋ねください。
http://homepage2.nifty.com/natupaji/DxLib/
こちらでは根本的解決はできませんので。

trx

Re:画像+音

#30

投稿記事 by trx » 16年前

別の質問なのですが、
SetPanSoundMemなどで、
サウンドハンドルを入れる所に、
配列で、ken[0]~ken[60]まで入れたいのですが、
for文で、どの様に、書けば良いのでしょうか?
回答よろしくお願いします。

softya

Re:画像+音

#31

投稿記事 by softya » 16年前

int i;
for( i=0 ; i<60 ; i++ ) {
SetPanSoundMem( 0, ken );
}
って意味の質問ですか?
もし、このレベルが分かんないと流石にC言語の勉強をしないとまずいと思いますよ。
勉強しないと、このままプログラムを作っていく事は難しいです。
前から勉強の話だけは、何のコメントもしていらっしゃらないのでどうお考えなんでしょうか?

下記サイトでの勉強をお勧めします。
http://homepage3.nifty.com/mmgames/c_guide/
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
http://www.geocities.jp/ky_webid/c/index.html

trx

Re:画像+音

#32

投稿記事 by trx » 16年前

何方か、音声の、waveを変える関数、知りませんか?
回答よろしくお願いします。

trx

Re:画像+音

#33

投稿記事 by trx » 16年前

後、もう一つ、音声の音量(amplitude)をチェックする、関数は在りますか?

kazuoni

Re:画像+音

#34

投稿記事 by kazuoni » 16年前

>音声の、waveを変える関数
??

>音声の音量(amplitude)をチェックする

ChangeVolumeSoundMem

ですかね。
DxLib.hを見ると結構公式ページに載ってない関数
があります。

#このスレの行方は・・・?

trx

Re:画像+音

#35

投稿記事 by trx » 16年前

ChangeVolumeSoundMemは、再生中か再生中ではないかを調べる関数なのでは?
今、知りたい関数は、再生中の音声の音量を調べる関数です。
Waveと言うのは、響き具合と言えば良いのでしょうか?
Waveは、音の波の、間隔です。
ちょっと違うのですが、図が在りました。

kazuoni

Re:画像+音

#36

投稿記事 by kazuoni » 16年前

>再生中か再生中ではないかを調べる関数
それはCheckSoundFileです。

詳しくは本家をご覧下さい。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_sound.html


>Waveは、音の波の、間隔です。
Waveは波を指すのであって、間隔を指すものではありません。
っというか、音の間隔は少しあいまいな表現です。
音の大きさ=波の振幅
音の高さ=波の周波数
今回知りたいのは、振幅ですよね。
自分もかなり興味があるのですが、
まだ、ゴリゴリ解析をしたことがありません。
最善の方法ではないかもしれませんが、
以下のサイトの基本はまずおさえなくてはいけませんね。
WisdomSoft -マルチメディア API
ttp://wisdom.sakura.ne.jp/system/winapi/media/index.html

もしもっと音声関連で知識が欲しいなら、
書籍がたくさんあります。
「サウンドプログラミング」
で探せばいろいろあるかと。
時間がある時に、自分もやろうかと思います。
DirectXが便利な気がしますけどね^^;

trx

Re:画像+音

#37

投稿記事 by trx » 16年前

回答有難うございます。
ですが、先が長い話みたいなので、諦めます今は...
今まで皆様、どうも有り難う御座いました。

閉鎖

“C言語何でも質問掲示板” へ戻る