トップページ > 過去ログ > 記事閲覧
機能要望:音ファイルの時間指定関連
名前:「たく」 日時: 2007/03/25 23:16

連投失礼します。この機能があるかどうかちょっと把握しきれていないの ですが・・・ 再生中の ogg ファイルや mp3 ファイル(あるいは wav ファイル)の ・ファイル再生の時間を取得する関数  extern int GetPlayTimeSoundMem( int SoundHandle ) ;  0以上:ファイル全体の再生時間 -1:異常終了(ハンドルが空等) ・何ミリ秒目を再生しているかの情報を取得する関数  extern int GetPlayPosSoundMem( int PlayTime, int SoundHandle ) ;  0以上:再生中の時間 -1:異常終了(ハンドルが空、時間指定ミス等) ・何ミリ秒目から再生するかを指定する関数(即再生)  extern int SetPlayPosSoundMem( int PlayTime, int SoundHandle ) ;  0:正常終了 -1:異常終了(ハンドルが空、時間指定ミス等) といった機能の追加実装は可能でしょうか。もしくは既存実装で同等の 機能実現は可能でしょうか。 現楽ファイルのループ地点を指定できる関数は存在しますから その機能の応用で上記関数の実装も可能ではないかと思いました。 よろしければご検討ください。

Page: 1 |

Re: 機能要望:音ファイルの時間指定関連 ( No.1 )
名前:管理人 日時:2007/03/26 14:03

 たくさんどうも、DXライブラリの管理人です。  御所望の機能は非公開ですが既に現在のバージョンにあります。 ===== バイト指定やサンプル指定版 ===== // サウンドハンドルの再生位置をバイト単位で変更する(再生が止まっている時のみ有効) int SetSoundCurrentPosition( int Byte, int SoundHandle ) ; // サウンドハンドルの再生位置をバイト単位で取得する int GetSoundCurrentPosition( int SoundHandle ) ; // サウンドハンドルの音の総時間を取得する(単位はミリ秒) int GetSoundTotalTime( int SoundHandle ) ; ===== ミリ秒指定版 ===== // サウンドハンドルの再生位置をミリ秒単位で設定する int SetSoundCurrentTime( int Time, int SoundHandle ) ; // サウンドハンドルの再生位置をミリ秒単位で取得する int GetSoundCurrentTime( int SoundHandle ) ; // サウンドハンドルの音の総時間を取得する(単位はサンプル) int GetSoundTotalSample( int SoundHandle ) ;  基本的にはミリ秒指定版で事足りると思いますが、より厳密な位置指定をする場合は バイト指定版を使用する必要があります。  因みに ogg ファイルは大丈夫ですが、mp3 ファイルでは各関数が正常に動作しない可能性が ありますのでご注意下さい。m(_ _;m  あと、注釈文だけでは使い方が分からない関数がありましたらご質問下さい。
Re: 機能要望:音ファイルの時間指定関連 ( No.2 )
名前:「たく」 日時:2007/04/07 02:45

お返事遅れました、「たく」です。 すでに実装されていたんですね、うれしい限りです。 で、ogg ファイルを使って調査してみたのですが、 GetSoundCurrentTime は正常に動作していますが、 SetSoundCurrentTime でint値を指定しても必ず 最初から再生されてしまいます。 int OGGHnd,i ; OGGHnd = LoadSoundMem("music.ogg") ; PlaySoundMem(OGGHnd,DX_PLAYTYPE_LOOP ) ; i = SetSoundCurrentTime(23000,OGGHnd) ; メモリーにロードしたoggファイルに対しては 何か特別な作法が必要でしょうか。 よろしくお願いします。
Re: 機能要望:音ファイルの時間指定関連 ( No.3 )
名前:管理人 日時:2007/04/08 14:02

 「たく」さんどうも、DXライブラリの管理人です。  申し訳ありません、明らかに説明不足でした。  まず、SetSoundCurrentTime は音が再生中の場合は正常に動作しませんので、 PlaySoundMem の前に実行してください。  そして、PlaySoundMem 関数はデフォルトで音の再生位置を先頭に戻してから 再生を開始しますので、それを行わないようにするために非公開関数の 第三引数 TopPositionFlag に FALSE を渡すようにして下さい。 (PlaySoundMem 関数は実際には以下の様に宣言されています) int PlaySoundMem( int SoundHandle, int PlayType, int TopPositionFlag = TRUE );  というわけで、「たく」さんが掲載されたプログラムを正常に動作 するように手を加えさせて頂きますと以下の様になります。 int OGGHnd,i ; OGGHnd = LoadSoundMem("music.ogg") ; i = SetSoundCurrentTime(23000,OGGHnd) ; PlaySoundMem(OGGHnd,DX_PLAYTYPE_LOOP,FALSE ) ;  また、Ogg Vorbis 形式の場合 SetCreateSoundDataType 関数で DX_SOUNDDATATYPE_MEMNOPRESS 以外を指定していると SetSoundCurrentTime 関係の 再生位置設定関数を使用しても再生位置が変更されないようになっていましたので、 もし DX_SOUNDDATATYPE_MEMNOPRESS 以外をお使いでしたらお手数ですが以下の 修正バージョンをお使いください。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: 機能要望:音ファイルの時間指定関連 ( No.4 )
名前:「たく」 日時:2007/04/17 20:46

丁寧な解説、ありがとうございました。 ちょっと他の部分の実装が立て込んでいて、 修正バージョンをダウンロードした段階で 止まっています。(^^;) 上記の説明でよく理解できましたので、 是非次回のバージョンアップの際にでも 上記修正を含めたものをリリースして いただければ幸いです。
Re: 機能要望:音ファイルの時間指定関連 ( No.5 )
名前:管理人 日時:2007/04/18 12:18

「たく」さんどうも、DXライブラリの管理人です。 > 是非次回のバージョンアップの際にでも > 上記修正を含めたものをリリースして > いただければ幸いです。  はい、近いうちに正式版としてアップすると思います。

Page: 1 |