Re: oggファイルのサンプリング周波数の取得方法とLOOPSTARTとLOOPLENGTHの編集方法について ( No.1 ) |
- 名前:管理人 日時:2020/03/15 02:04
音楽ファイルのサンプリング周波数は関数 LoadSoftSound でoggファイルを読み込んで得られる
ソフトウェアサウンドハンドルを関数 GetSoftSoundFormat で使えば簡単に取得することができます
// LoadSoftSound で読み込み
int SoftSoundHandle = LoadSoftSound( "Test.ogg" ) ;
// GetSoftSoundFormat でチャンネル数、量子化ビット深度、サンプリング周波数を取得
int Channels, BitsPerSample, SamplesParSec ;
GetSoftSoundFormat( SoftSoundHandle, &Channels, &BitsPerSample, &SamplesParSec ) ;
// DeleteSoftSound でソフトウェアサウンドハンドルを削除
DeleteSoftSound( SoftSoundHandle ) ;
Oggファイルの LOOPSTART と LOOPLENGTH の編集については、少し調べてみましたが中々骨が折れそうです
( 因みにDXライブラリにはOggファイルの LOOPSTART と LOOPLENGTH の編集機能はありません )
DXライブラリの LoadSoundMem で読み込むサウンドファイルのループ位置設定でしたら、
DXライブラリのパッケージの中にある SoundLoopAreaEditor でループ位置を記した txtファイルを生成でき、
その txtファイルを使ってサウンドのループを行うことができるのですが( 詳細はパッケージの中の
Tool\SoundLoopAreaEditor\readme.txt を参照してください )
編集されたい OggファイルはDXライブラリで使用するものではないのでしょうか?
|
Re: oggファイルのサンプリング周波数の取得方法とLOOPSTARTとLOOPLENGTHの編集方法について ( No.2 ) |
- 名前:スーパー初心者 日時:2020/03/15 09:04
ご返信ありがとうございます。
LoadSoftSoundやGetSoftSoundFormatを知りませんでした・・・。
これは隠し関数なのですね。
これについて一点質問なのですが、LoadSoundMemで得られるサウンドハンドルと
LoadSoftSoundで得られるサウンドハンドルはどう違うのでしょうか?
前に雑談掲示板の方で質問させて頂いた折に、LoadSoundMemで取得したサウンドハンドルは
LOOPSTARTとLOOPLENGTHを自動的に取得するということを知ったので
DXライブラリで読む方法はあるのだと推測していましたが、SoundLoopAreaEditorの存在は
知りませんでした・・・。
DotNet版では、Tool類が含まれていないので見逃してしまったようです。
ちなみに、Oggファイルに含まれるLOOPSTARTとLOOPLENGTHを取得する方法は
存在するのでしょうか?
上記の通り、自動で取得しているからには取得する機構が存在するのは推測できるのですが
公開されている関数で取得する方法を見つけられませんでした。
よろしければご教示願います。
そして・・・OggファイルのLOOPSTARTとLOOPLENGTHを編集するのは難しいのですね・・・。
メタデータとして存在するからには、編集する方法もあるのかと勝手に思っていましたが
自分でも色々と調べた通り、難しそうだということが分かりました。
>>編集されたい OggファイルはDXライブラリで使用するものではないのでしょうか?
今の所はDXライブラリでの使用を前提としていますが、Oggファイルはメタデータで
LOOPSTARTとLOOPLENGTHが用意されているので、それが編集できるのであれば
対応している再生媒体であれば、ファイル単体のみを渡すだけで流用可能なので
汎用的に使えるという点で、編集したかったというのが本音です。
|
Re: oggファイルのサンプリング周波数の取得方法とLOOPSTARTとLOOPLENGTHの編集方法について ( No.3 ) |
- 名前:管理人 日時:2020/03/16 03:23
> これについて一点質問なのですが、LoadSoundMemで得られるサウンドハンドルと
> LoadSoftSoundで得られるサウンドハンドルはどう違うのでしょうか?
LoadSoundMem で得られるサウンドハンドルは主に再生専用の機能です
LoadSoftSound で得られるソフトウェアサウンドハンドルは主に音の波形を加工したり
参照したりするために使用する機能です、一応再生する機能もありますが、
LoadSoundMem のサウンドハンドルより機能は少なく、CPU負荷も高いです
> ちなみに、Oggファイルに含まれるLOOPSTARTとLOOPLENGTHを取得する方法は
> 存在するのでしょうか?
GetLoopAreaTimePosSoundMem という関数で取得することができます
// サウンドハンドルにループ範囲を取得する(サンプル単位)
int GetLoopAreaSamplePosSoundMem( LONGLONG *LoopStartSamplePosition, LONGLONG *LoopEndSamplePosition, int SoundHandle ) ;
ただ、ループ開始位置とループ終了位置なので、LOOPLENGTH を得たい場合は以下のように
LoopEndSamplePosition で得られた値から LoopStartSamplePosition で得られた値を引く必要があります
LONGLONG LoopStartSamplePosition ;
LONGLONG LoopEndSamplePosition ;
LONGLONG LoopSampleLength ;
GetLoopAreaSamplePosSoundMem( &LoopStartSamplePosition, &LoopEndSamplePosition, SoundHandle ) ;
LoopSampleLength = LoopEndSamplePosition - LoopStartSamplePosition ;
> 今の所はDXライブラリでの使用を前提としていますが、Oggファイルはメタデータで
> LOOPSTARTとLOOPLENGTHが用意されているので、それが編集できるのであれば
> 対応している再生媒体であれば、ファイル単体のみを渡すだけで流用可能なので
> 汎用的に使えるという点で、編集したかったというのが本音です。
ご返答ありがとうございます
了解しました
oggファイルのコメント編集という点ではお力になれずすみません
DXライブラリでの使用を前提とされるのでしたら、ひとまず SoundLoopAreaEditor を
使用していただくのが一番簡単な解決方法だと思います
|
Re: oggファイルのサンプリング周波数の取得方法とLOOPSTARTとLOOPLENGTHの編集方法について ( No.4 ) |
- 名前:スーパー初心者 日時:2020/03/17 20:57
お返事ありがとうございます。
LoadSoftSoundとLoadSoundMemの違いがなんとなく分かりました。
普通に使う分にはLoadSoundMemを使用するという認識で良さそうですね。
とりあえずは、編集に必要な情報の取得方法も分かったことですし、LOOPSTARTとLOOPLENGTHを
指定したテキスト(曲名_loop.txt)を作れば再生に問題はなさそうなので
実際にOggファイルそのものに対して編集する場合には
DXライブラリで作成した曲名_loop.txtの値を別ソフトで手書きして
保存するという方法を取ればいけそうです。
ご助力ありがとうございました!
|