同一音楽の多重再生。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

同一音楽の多重再生。

#1

投稿記事 by jyosyua » 11年前

大昔、ココの掲示板で、質問させてもらいましたが、解決しなかったので、再び質問させてください。
PlaySoundの非同期でも多重再生駄目(もちろん同期は無理)。追加してスレッドを使って、別スレッドでPlaySound使っても多重再生できません。
良く、3Dのゲームで敵を同時に倒すと、断末魔が複数聞こえる、のはどうやっているのでしょうか?
どうかよろしくお願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 同一音楽の多重再生。

#2

投稿記事 by softya(ソフト屋) » 11年前

PlaySoundMem()でもダメでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dic
記事: 657
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: 同一音楽の多重再生。

#3

投稿記事 by dic » 11年前

int DuplicateSoundMem( int SrcSoundHandle ) ;
では、どうでしょうか?
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 ;      // ソフトの終了
}

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#4

投稿記事 by jyosyua » 11年前

PlaySoundMemでMSDNライブラリを探してしまいました(笑)。
win32APIだけでは無理ですかね。自分は自作関数を作ることはできないし、DirectX系統の関数を使うしかないみたいですね。
32APIだけで出来る方法をもしご存知でしたら教えていただけると有難いですが。
DirectX勉強する必要でてきました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 同一音楽の多重再生。

#5

投稿記事 by softya(ソフト屋) » 11年前

PlaySoundMem()系でダメな理由を教えて下さい。
なぜ避けられるのか分かりません。
避ける理由が分かれば、ベストチョイスがあると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#6

投稿記事 by jyosyua » 11年前

DXライブラリの使い方を覚えるのが大変な気がするというのと、どうせ覚えるならDirectXを覚えたい、というのがあります。
PlaySoundMemってDXライブラリの関数ですよね?

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#7

投稿記事 by jyosyua » 11年前

でも名前からして物凄い良さそうな関数ですよね。

high

Re: 同一音楽の多重再生。

#8

投稿記事 by high » 11年前

Dxライブラリはサンプル豊富で簡単ですよ。
逆にあれを覚えるのが大変とか言ってたらDirectXとか無理だと思います。

dic
記事: 657
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: 同一音楽の多重再生。

#9

投稿記事 by dic » 11年前

あ、もしかして、DirectX と Dxライブラリ混合されてます?

私が紹介したのは Dxライブラリでの使い方ですよ

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 同一音楽の多重再生。

#10

投稿記事 by softya(ソフト屋) » 11年前

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を使った方が良いと聞いたから(今時ならライブラリを使いこなしていれば、それなりに評価されますので、そこまで気にしなくて大丈夫です)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dic
記事: 657
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: 同一音楽の多重再生。

#11

投稿記事 by dic » 11年前

おそれながら書きます

大昔と、同じ状況なのですね?

できなかったら、状況を分析しましょう。

大昔と、同じ方法 Win32API で、同じ状況で 音を多重に再生させる、同じ問題が発生、技術的にできない
そして、今回もつまづいた
これでは進化しません。改善しましょう
特に技術は日進進歩、プロではないので、かいつまんで習得するようなコツがあるといいでしょう
マルチスレッドまで実装できるのですから、DxLibの説明書を理解するのは苦にならないはずです
あとは、やる気になって、実行するだけです。

やる気にならない?
では、どうやったら自分はやる気になるか、考えてみましょう。
おなじところでつまづいていては、いつまでたっても完成しませんよ

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#12

投稿記事 by jyosyua » 11年前

返信遅れてすいません。すいません、自分の都合で恐縮なのですが、この一年以上犯罪の被害に遭っていて自分の現状が大変なのです。だから、新しいことにチャレンジする気力も起きません。警察には相談しましたが、証拠がないと動けないと言われ、今に至っています。
DirectX勉強したいです。少しづつですがやってみようと思います。COMの勉強した後だと、この手続きはCOMの初期化も含んでるのかな?とか想像が膨らみますね^^。

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#13

投稿記事 by jyosyua » 11年前

お礼を忘れていました。皆様方の温かいご指導ありがたいです。ありがとうございました。

jyosyua
記事: 65
登録日時: 13年前
住所: 八王子市
連絡を取る:

Re: 同一音楽の多重再生。

#14

投稿記事 by jyosyua » 11年前

解決する方法を大きく分けて2つ教えてもらえ感謝です。DXとDirectXの2つ

dic
記事: 657
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: 同一音楽の多重再生。

#15

投稿記事 by dic » 11年前

警察はみんなのお金で動いていてて、しかも、逮捕とかできる権限があるので、そうそう動けません
警察の中の生活安全課に相談されてはどうでしょうか?

文体から、理論的なことではなく、精神的なものかと思っていたのですが
まず、生活態度からあらためたほうがいいかもしれません
たとえば、一日のパソコンの時間を制限するとか、睡眠時間を確保するとか
食事は1日3回、ちょっと運動する(有酸素系の運動がいいです)
日記をつけると効果的です

そして、頼りになる人を見つけましょう、作りましょう
親でもいいです、友達でもいいです、隣の部屋の人でもいいです
ネット上ではなく、リアルで見つけましょう
見つけにくいときは、メンタルクリニックの先生でもいいです
jyosyuaさんを見てくれる人を見つけましょう

技術的な問題ではなく、生活上の問題だと私は思います。
健康な状態になられてから、技術的なことを考えてもいいと思います。
その状態のほうが、頭もスッキリしていてて、効率もいいはずです。

閉鎖

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