トップページ > 記事閲覧
oggファイルのサンプリング周波数の取得方法とLOOPSTARTとLOOPLENGTHの編集方法について
名前:スーパー初心者 日時: 2020/03/14 00:39

音楽ファイルのサンプリング周波数の取得と、 oggファイルのLOOPSTARTとLOOPLENGTHの編集と保存を プログラムで行いたいのですが、何かいい方法はないでしょうか? 色々と試したところ、Oggファイルはそれ専用のライブラリ?があって それによって、エンコードしたりデコードしたりするような感じなのは なんとなく分かったのですが、そもそも英語の資料しかないのと デジタル音源について知識が浅すぎるため、どうにも進まず困っています・・・。 相も変わらずDXライブラリと直接関係のない質問で恐縮ですが、お返事頂けたら幸いです。 補足:当方の開発環境はVisualStudio2015のC#です。
メンテ

Page: 1 |

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の値を別ソフトで手書きして 保存するという方法を取ればいけそうです。 ご助力ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存