Re: wavファイルのループ情報 ( No.1 ) |
- 名前:管理人 日時:2017/10/11 01:29
> と書かれていたのでループ情報を入れたwavファイルで試したのですが、
> ループ情報が反映されませんでした。
> Windows限定というわけではないですよね?
はい、Android でも機能するはずです
( ただ、本日は時間が無く最新バージョンでもループ情報付き wavファイルを正常に読み込むことができるかを
試せていません、すみません )
> なお、ループ情報は「wavosaur」というフリーソフトを使用して取り入れました。
私もこちらのサイトを参考に wavファイルにループポイントを設定しました
<Tsumiki Tech Times イントロ・アウトロ付き ループ効果音・BGMを設定する>
http://tsumikiseisaku.com/blog/how-to-make-loop-sound/
よろしければループ情報の付け方が同じかご確認ください m(_ _;m
> 1. ループ情報のサンプル数(Start - End)を取得する関数
> ループ個所から再生(SetCurrentPositionSoundMem()と併用)することが簡単になるので是非ほしいです。
リファレンスには載っていませんが、GetLoopAreaSamplePosSoundMem という関数で取得することができます
// サウンドハンドルにループ範囲を取得する(サンプル単位)
int GetLoopAreaSamplePosSoundMem( int *LoopStartSamplePosition, int *LoopEndSamplePosition, int SoundHandle ) ;
> 含まれていた場合に使用するか否か(B)を指定したいなと考えています。
すみません、ループ情報が含まれているサウンドハンドルをループ無しで再生することは現在できず、
できるようにするためにはDXライブラリ内部の処理をかなり変更しなければならないので、
申し訳ありませんがすぐに対応することはできません
加えてループ情報が含まれる wavファイルを読み込んだ場合は強制的に『ループ情報有りサウンドハンドル』に
なってしまうので、一つの wavファイルを『ループ情報有りサウンドハンドル』と『ループ情報無しサウンドハンドル』の
二つに読み分けることもできません
こちらについては『サウンドファイルに含まれるループ情報を無視して読み込むかどうかを設定する関数』を
追加することで容易に対応できますので、申し訳ありませんがすぐにできる対応としてはこちらの関数を
追加することのみとなります m(_ _;m
( なので『ループ情報有りwavファイル』『ループ情報無しwavファイル』の二つのファイルを用意する必要は
なくなりますが、サウンドハンドルは二つ必要になります )
|
Re: wavファイルのループ情報 ( No.2 ) |
- 名前:BayLeaf 日時:2017/10/11 02:47
> <Tsumiki Tech Times イントロ・アウトロ付き ループ効果音・BGMを設定する>
>
> よろしければループ情報の付け方が同じかご確認ください m(_ _;m
ループ情報の付け方は上記のサイトと同じでした。
> リファレンスには載っていませんが、GetLoopAreaSamplePosSoundMem という関数で取得することができます
ありがとうございます。
こちらの関数を使って値を取得したところ、該当音源のループ情報が0で返ってきました(音声もループ無しでした)。
ファイル名の末尾に「_Loop」と書いているので間違えてはいないと思います。
念のため、上記のサイトを見ながらもう一度設定をしてみましたが結果は変わりませんでした。
> すみません、ループ情報が含まれているサウンドハンドルをループ無しで再生することは現在できず、
> できるようにするためにはDXライブラリ内部の処理をかなり変更しなければならないので、
> 申し訳ありませんがすぐに対応することはできません
>
> 加えてループ情報が含まれる wavファイルを読み込んだ場合は強制的に『ループ情報有りサウンドハンドル』に
> なってしまうので、一つの wavファイルを『ループ情報有りサウンドハンドル』と『ループ情報無しサウンドハンドル』の
> 二つに読み分けることもできません
難しいのですね。
流石に内部処理まで変更していただくとなると大変になると思うので大丈夫です。
> こちらについては『サウンドファイルに含まれるループ情報を無視して読み込むかどうかを設定する関数』を
> 追加することで容易に対応できますので、申し訳ありませんがすぐにできる対応としてはこちらの関数を
> 追加することのみとなります m(_ _;m
> ( なので『ループ情報有りwavファイル』『ループ情報無しwavファイル』の二つのファイルを用意する必要は
> なくなりますが、サウンドハンドルは二つ必要になります )
ループ情報を無視することは容易なのですね。
では、その関数で対応できるのであればお願いします。
|
Re: wavファイルのループ情報 ( No.3 ) |
- 名前:管理人 日時:2017/10/12 00:13
Android版で wavosaur を使用してループ範囲を設定した wavファイルを読み込んでみましたが、
正常にループ範囲を読み込むことができました
最近ループ範囲関係の処理に関して手を加えた記憶はありませんが、
よろしければこちらの最新版をお試しになってみてください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用
因みにテストで使用したプログラムは以下の通りです
#include "DxLib.h"
int android_main( void )
{
int SoundHandle ;
int LoopStart, LoopEnd ;
SetBackgroundColor( 128,128,128 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// wavファイルの読み込み
SoundHandle = LoadSoundMem( "test_loop.wav" ) ;
// ループ範囲の取得
GetLoopAreaSamplePosSoundMem( &LoopStart, &LoopEnd, SoundHandle ) ;
// 再生開始
PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ;
SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
// 画面にループ範囲を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "LoopStart:%d LoopEnd:%d", LoopStart, LoopEnd ) ;
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
> ループ情報を無視することは容易なのですね。
> では、その関数で対応できるのであればお願いします。
上記の最新版では以下の関数が追加されています
// LoadSoundMem などで読み込むサウンドデータにループ範囲情報があっても無視するかどうかを設定する
// IgnoreFlag TRUE:無視する FALSE:無視しない( デフォルト )
int SetCreateSoundIgnoreLoopAreaInfo( int IgnoreFlag ) ;
LoadSoundMem などで wavファイルを読み込む前に SetCreateSoundIgnoreLoopAreaInfo( TRUE ) ; を
実行しておくとループ範囲の情報が wavファイルに含まれていても無視されるようになります
よろしければお試しください m(_ _)m
|
Re: wavファイルのループ情報 ( No.4 ) |
- 名前:BayLeaf 日時:2017/10/12 02:14
ループ情報が読めない原因がわかりました。
どうやら以前質問させていただいた際に使用していた
ソフトサウンドが原因のようでした。
再生自体には別のハンドルを使用していたのですが、一度でもLoadSoundMemFromSoftSound()を使用して
ソフトサウンドハンドルからそのハンドルに代入するとループ情報が消されるようでした。
ご確認よろしくお願いします。
もし、ソフトハンドル関連でループ情報を対応させていないのであれば対応させてほしいところです。
なお、管理人さんのプログラムでは正常に動いたことを確認しました。
|
Re: wavファイルのループ情報 ( No.5 ) |
- 名前:管理人 日時:2017/10/14 01:31
お察しの通りソフトサウンドハンドルはループ情報に対応していませんので、ソフトサウンドとして
読み込んだ後 LoadSoundMemFromSoftSound でサウンドハンドルにした場合はループ情報はありません
> もし、ソフトハンドル関連でループ情報を対応させていないのであれば対応させてほしいところです。
すみません、現在優先度の高い作業が予定より非常に遅れているので、必須ではない機能の実装は
なるべく避けたいと考えています
直接 LoadSoundMem で wavファイルを読み込むのでは何か不都合があるのでしょうか?
|
Re: wavファイルのループ情報 ( No.6 ) |
- 名前:BayLeaf(解決) 日時:2017/10/14 05:30
> お察しの通りソフトサウンドハンドルはループ情報に対応していませんので、ソフトサウンドとして
> 読み込んだ後 LoadSoundMemFromSoftSound でサウンドハンドルにした場合はループ情報はありません
了解です。
「特定の周波数の音量取得」でお聞きした際はLoadSoundMemFromSoftSound()とLoadSoundMem()が
同じであると書かれていたのでそのまま使用していました。
この時はまだ以前のバージョンなので当然と言えば当然ですね。
> すみません、現在優先度の高い作業が予定より非常に遅れているので、必須ではない機能の実装は
> なるべく避けたいと考えています
そうなのですね。私としては急ではないですので必須の作業を優先して構いません。
> 直接 LoadSoundMem で wavファイルを読み込むのでは何か不都合があるのでしょうか?
以前、ご相談させていただいた「特定の周波数の音量取得」のSoftSoundを使用して
FFT周波数分布の描写をしているので、別途LoadSoundMem()で読み込んだ音源を使用すると
2つの変数のFFT周波数分布が一致しなくなる可能性があるかなと思いましたが、
よく考えてみたらLoadSounndMem()の音源を基準にしているので
今回の場合はLoadSoundMem()にしたプログラムに書き直してみて大丈夫そうでした。
ただ、SoftSoundを(ソフトウエアサウンドプレイヤーを使用して)再生した場合、
ループがなくなるのでループありとの同時再生をした際に正常にできないもしくは処理の手間がかかるのではと思いました。
とはいえ、ひとまずループ情報については解決しました。
迅速な返信ありがとうございました。
どうしてもSoftSoundでループ情報が必要になったらまたここに書きに来ます。
|