トップページ > 過去ログ > 記事閲覧
GetFrequencySoundMemについて(解決済み)
名前:sy(サイ) 日時: 2011/09/04 21:31

最近のアップデートで変わったと思うのですが、 GetFrequencySoundMemで取得できる周波数が読み込んだ直後のファイル固有のものではなく、 DxLibで変更された現在の周波数が返ってくるようになったみたいですね。 元の値からランダムで変更するという処理をしたい為、 ファイル固有の周波数を取得できる関数の追加をお願いしたいです。 無理なら別の方法を考えますので、よろしくお願いします。

Page: 1 |

Re: GetFrequencySoundMemについて ( No.1 )
名前:tare 日時:2011/08/15 10:15

読み込み時に周波数を保存しておく配列を一つ追加すれば済む気もしますが、それでは問題ありますでしょうか。
Re: GetFrequencySoundMemについて ( No.2 )
名前:sy(サイ) 日時:2011/08/15 15:38

問題ないですよ。問題はいつの間にか仕様が変わっていた事なのです。 仕様が変わった理由が分かれば、それで納得するのでー。
Re: GetFrequencySoundMemについて ( No.3 )
名前:管理人 日時:2011/08/21 04:57

処理の変更が発生してしまったということで、申し訳ありません 仕様を変更した理由ですが、他のサウンドハンドルの情報を取得する関数である GetPanSoundMem や GetVolumeSoundMem が SetPanSoundMem や SetVolumeSoundMem などの実行結果を 踏まえた現在の値が返ってくるのに、GetFrequencySoundMem だけがサウンドファイルの時点での サンプリング周波数を返していたので、統一性を持たせるために GetFrequencySoundMem も SetFrequencySoundMem で値を変更された場合はその値を返すようにしました 変更したタイミングは Ver3.04e です
Re: GetFrequencySoundMemについて ( No.4 )
名前:sy(サイ) 日時:2011/08/21 18:37

その統一はよく意味が分かりません。 パンやボリュームは、最初が真ん中であることや、マックス値である事が想像されますが、 周波数は最初が、44100であるとは限らないからです。 周波数だけが特別なのはその使用方法が違うためと十分認識できると思います。
Re: GetFrequencySoundMemについて ( No.5 )
名前:管理人 日時:2011/09/03 23:55

SetFrequencySoundMem がファイル読み込み時の周波数に対して何倍の周波数にするか・・・ というような関数だったら丁度 SetPanSoundMem や SetVolumeSoundMem と同類の機能になってましたね うーん、実装時に気づけたら良かったんですが・・・ GetFrequencySoundMem は SetFrequencySoundMem で設定した値を返す、という仕様はそのままで行こうと思いますが、 代わりに再生周波数をハンドル生成時の状態に戻すという ResetFrequencySoundMem という関数を追加しました // メモリに読み込んだWAVEデータの再生周波数を読み込み直後の状態に戻す int ResetFrequencySoundMem( int SoundHandle ) ; この関数を実行した後に GetFrequencySoundMem を使用すればファイル固有の周波数を得ることができます 実装したバージョンをこちらにアップしましたので、よろしければお使い下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: GetFrequencySoundMemについて ( No.6 )
名前:sy(サイ)(解決) 日時:2011/09/04 21:31

返信、実装ありがとうございます。 >SetFrequencySoundMem がファイル読み込み時の周波数に対して何倍の周波数にするか・・・ 確かにこの実装なら筋が通ります。 使用目的は再生速度の変更なので、どのファイルが来ても同じ意味になります。 void SetFrequencySoundMem2( float a_speed, int SoundHandle ) { ResetFrequencySoundMem( SoundHandle ) ; float frequency = (float)( GetFrequencySoundMem( SoundHandle ) ); SetFrequencySoundMem( int(frequency*a_speed), SoundHandle ); } 成否チェックしてませんがこれならそういう意味?
Re: GetFrequencySoundMemについて(解決済み) ( No.7 )
名前:管理人 日時:2011/09/18 18:08

はい、「元の周波数の何倍か」を指定する仕様でしたら 載せていただいた関数のようになると思います

Page: 1 |