同一音楽の多重再生。
同一音楽の多重再生。
大昔、ココの掲示板で、質問させてもらいましたが、解決しなかったので、再び質問させてください。
PlaySoundの非同期でも多重再生駄目(もちろん同期は無理)。追加してスレッドを使って、別スレッドでPlaySound使っても多重再生できません。
良く、3Dのゲームで敵を同時に倒すと、断末魔が複数聞こえる、のはどうやっているのでしょうか?
どうかよろしくお願いいたします。
PlaySoundの非同期でも多重再生駄目(もちろん同期は無理)。追加してスレッドを使って、別スレッドでPlaySound使っても多重再生できません。
良く、3Dのゲームで敵を同時に倒すと、断末魔が複数聞こえる、のはどうやっているのでしょうか?
どうかよろしくお願いいたします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 同一音楽の多重再生。
PlaySoundMem()でもダメでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 同一音楽の多重再生。
int DuplicateSoundMem( int SrcSoundHandle ) ;
では、どうでしょうか?
http://homepage2.nifty.com/natupaji/DxL ... html#R8N16
DirectX には、メモリに読み込んだ音データを、複製して、たくさん同時にならせるようにできる関数があります
たとえば、jyosyuaさんのおっしゃっている、同じ音を同時に複数発生させるという状況につかいます。
ひとつずつ、LoadSoundMem でもいいのですが、そのまま、ひとつずつメモリを消費します。
しかし、複製だと消費メモリが少なくなります。(と本には書いてます)
下にDxLibのサンプルをいじったのをのせます。これを応用すれば、できるかと思います。
では、どうでしょうか?
http://homepage2.nifty.com/natupaji/DxL ... html#R8N16
DirectX には、メモリに読み込んだ音データを、複製して、たくさん同時にならせるようにできる関数があります
たとえば、jyosyuaさんのおっしゃっている、同じ音を同時に複数発生させるという状況につかいます。
ひとつずつ、LoadSoundMem でもいいのですが、そのまま、ひとつずつメモリを消費します。
しかし、複製だと消費メモリが少なくなります。(と本には書いてます)
下にDxLibのサンプルをいじったのをのせます。これを応用すれば、できるかと思います。
include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int SHandle, DupSHandle[128];
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
SHandle = LoadSoundMem( "test.wav" ) ;
// sHandle (test.wav) を複製する
int i;
for( i=0; i<128; i++ )
DupSHandle[i] = DuplicateSoundMem( SHandle ) ;
// 読みこんだ音をノーマル再生します(『PlaySoundMem』関数使用)
PlaySoundMem( SHandle , DX_PLAYTYPE_NORMAL ) ;
// SHandle から複製した DupSHandle を128個、同時に鳴らします
for( i=0; i<128; i++ )
PlaySoundMem( DupSHandle[i] , DX_PLAYTYPE_NORMAL ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
Re: 同一音楽の多重再生。
PlaySoundMemでMSDNライブラリを探してしまいました(笑)。
win32APIだけでは無理ですかね。自分は自作関数を作ることはできないし、DirectX系統の関数を使うしかないみたいですね。
32APIだけで出来る方法をもしご存知でしたら教えていただけると有難いですが。
DirectX勉強する必要でてきました。
win32APIだけでは無理ですかね。自分は自作関数を作ることはできないし、DirectX系統の関数を使うしかないみたいですね。
32APIだけで出来る方法をもしご存知でしたら教えていただけると有難いですが。
DirectX勉強する必要でてきました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 同一音楽の多重再生。
PlaySoundMem()系でダメな理由を教えて下さい。
なぜ避けられるのか分かりません。
避ける理由が分かれば、ベストチョイスがあると思います。
なぜ避けられるのか分かりません。
避ける理由が分かれば、ベストチョイスがあると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 同一音楽の多重再生。
DXライブラリの使い方を覚えるのが大変な気がするというのと、どうせ覚えるならDirectXを覚えたい、というのがあります。
PlaySoundMemってDXライブラリの関数ですよね?
PlaySoundMemってDXライブラリの関数ですよね?
Re: 同一音楽の多重再生。
でも名前からして物凄い良さそうな関数ですよね。
Re: 同一音楽の多重再生。
あ、もしかして、DirectX と Dxライブラリ混合されてます?
私が紹介したのは Dxライブラリでの使い方ですよ
私が紹介したのは Dxライブラリでの使い方ですよ
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 同一音楽の多重再生。
DirectX と DXライブラリ の関係はDirectXの難しい所を隠したライブラリがDXライブラリで非常に簡単になっています。
生でDirectXを使うのは結構たいへんですし、大半のサンプルはC++で書かれていると思います。C++は大丈夫ですか?
サンプルはDirectXSDKをインストールするとDirectX Sample Browserで入手出来ます。
ちなみに効果音を多重に鳴らしたいなら、XAudio2が使えますがサンプルはDirectX Sample Browserで入手出来ます。
「XAudio2 の概要」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
もちろんPlaySoundMem()の方がたいへん簡単だと思います。
「PlaySoundMem」
http://homepage2.nifty.com/natupaji/DxL ... .html#R8N5
【追記】
次のような場合にはDirectXを選択するのは正しいと思いますが、それ以外の理由ならよく考えてみましょう。
・DXライブラリで実現不可能なことを行いたい。例えばDirectX10以上の機能など。
・難しくても良いから純粋にDirectXに興味がある。「ゲームよりもAPIの理解をしてライブラリを作成したい」と言うライブラリ作成指向の場合。
・ゲーム業界の就職の提出作品にはDirectXを使った方が良いと聞いたから(今時ならライブラリを使いこなしていれば、それなりに評価されますので、そこまで気にしなくて大丈夫です)。
生でDirectXを使うのは結構たいへんですし、大半のサンプルはC++で書かれていると思います。C++は大丈夫ですか?
サンプルはDirectXSDKをインストールするとDirectX Sample Browserで入手出来ます。
ちなみに効果音を多重に鳴らしたいなら、XAudio2が使えますがサンプルはDirectX Sample Browserで入手出来ます。
「XAudio2 の概要」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
もちろんPlaySoundMem()の方がたいへん簡単だと思います。
「PlaySoundMem」
http://homepage2.nifty.com/natupaji/DxL ... .html#R8N5
【追記】
次のような場合にはDirectXを選択するのは正しいと思いますが、それ以外の理由ならよく考えてみましょう。
・DXライブラリで実現不可能なことを行いたい。例えばDirectX10以上の機能など。
・難しくても良いから純粋にDirectXに興味がある。「ゲームよりもAPIの理解をしてライブラリを作成したい」と言うライブラリ作成指向の場合。
・ゲーム業界の就職の提出作品にはDirectXを使った方が良いと聞いたから(今時ならライブラリを使いこなしていれば、それなりに評価されますので、そこまで気にしなくて大丈夫です)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 同一音楽の多重再生。
おそれながら書きます
大昔と、同じ状況なのですね?
できなかったら、状況を分析しましょう。
大昔と、同じ方法 Win32API で、同じ状況で 音を多重に再生させる、同じ問題が発生、技術的にできない
そして、今回もつまづいた
これでは進化しません。改善しましょう
特に技術は日進進歩、プロではないので、かいつまんで習得するようなコツがあるといいでしょう
マルチスレッドまで実装できるのですから、DxLibの説明書を理解するのは苦にならないはずです
あとは、やる気になって、実行するだけです。
やる気にならない?
では、どうやったら自分はやる気になるか、考えてみましょう。
おなじところでつまづいていては、いつまでたっても完成しませんよ
大昔と、同じ状況なのですね?
できなかったら、状況を分析しましょう。
大昔と、同じ方法 Win32API で、同じ状況で 音を多重に再生させる、同じ問題が発生、技術的にできない
そして、今回もつまづいた
これでは進化しません。改善しましょう
特に技術は日進進歩、プロではないので、かいつまんで習得するようなコツがあるといいでしょう
マルチスレッドまで実装できるのですから、DxLibの説明書を理解するのは苦にならないはずです
あとは、やる気になって、実行するだけです。
やる気にならない?
では、どうやったら自分はやる気になるか、考えてみましょう。
おなじところでつまづいていては、いつまでたっても完成しませんよ
Re: 同一音楽の多重再生。
返信遅れてすいません。すいません、自分の都合で恐縮なのですが、この一年以上犯罪の被害に遭っていて自分の現状が大変なのです。だから、新しいことにチャレンジする気力も起きません。警察には相談しましたが、証拠がないと動けないと言われ、今に至っています。
DirectX勉強したいです。少しづつですがやってみようと思います。COMの勉強した後だと、この手続きはCOMの初期化も含んでるのかな?とか想像が膨らみますね^^。
DirectX勉強したいです。少しづつですがやってみようと思います。COMの勉強した後だと、この手続きはCOMの初期化も含んでるのかな?とか想像が膨らみますね^^。
Re: 同一音楽の多重再生。
お礼を忘れていました。皆様方の温かいご指導ありがたいです。ありがとうございました。
Re: 同一音楽の多重再生。
解決する方法を大きく分けて2つ教えてもらえ感謝です。DXとDirectXの2つ
Re: 同一音楽の多重再生。
警察はみんなのお金で動いていてて、しかも、逮捕とかできる権限があるので、そうそう動けません
警察の中の生活安全課に相談されてはどうでしょうか?
文体から、理論的なことではなく、精神的なものかと思っていたのですが
まず、生活態度からあらためたほうがいいかもしれません
たとえば、一日のパソコンの時間を制限するとか、睡眠時間を確保するとか
食事は1日3回、ちょっと運動する(有酸素系の運動がいいです)
日記をつけると効果的です
そして、頼りになる人を見つけましょう、作りましょう
親でもいいです、友達でもいいです、隣の部屋の人でもいいです
ネット上ではなく、リアルで見つけましょう
見つけにくいときは、メンタルクリニックの先生でもいいです
jyosyuaさんを見てくれる人を見つけましょう
技術的な問題ではなく、生活上の問題だと私は思います。
健康な状態になられてから、技術的なことを考えてもいいと思います。
その状態のほうが、頭もスッキリしていてて、効率もいいはずです。
警察の中の生活安全課に相談されてはどうでしょうか?
文体から、理論的なことではなく、精神的なものかと思っていたのですが
まず、生活態度からあらためたほうがいいかもしれません
たとえば、一日のパソコンの時間を制限するとか、睡眠時間を確保するとか
食事は1日3回、ちょっと運動する(有酸素系の運動がいいです)
日記をつけると効果的です
そして、頼りになる人を見つけましょう、作りましょう
親でもいいです、友達でもいいです、隣の部屋の人でもいいです
ネット上ではなく、リアルで見つけましょう
見つけにくいときは、メンタルクリニックの先生でもいいです
jyosyuaさんを見てくれる人を見つけましょう
技術的な問題ではなく、生活上の問題だと私は思います。
健康な状態になられてから、技術的なことを考えてもいいと思います。
その状態のほうが、頭もスッキリしていてて、効率もいいはずです。