ERI Developer's BBS
  新規投稿 ┃ ツリー表示 ┃ 一覧表示 ┃ トピック表示 ┃ 検索 ┃ 設定 ┃ ホーム  
53 / 57 ツリー ←次へ | 前へ→

MIOのデコードがうまくいかないです(ι´Д`) /|/ |/ 01/12/9(日) 3:07
┗ Re:MIOのデコードがうまくいかないです(ι´Д`) L.Entis 01/12/9(日) 10:11
 ┗ Re:MIOのデコードがうまくいかないです(ι´Д`) /|/ |/ 01/12/9(日) 14:13
  ┗ Re:MIOのデコードがうまくいかないです(ι´Д`) L.Entis 01/12/9(日) 17:26
   ┣ あ、それと L.Entis 01/12/9(日) 17:32
   ┗ Re:MIOのデコードがうまくいかないです(ι´Д`) /|/ |/ 01/12/9(日) 20:47
    ┗ タグ情報とか…。 L.Entis 01/12/9(日) 22:51
     ┗ Re:タグ情報とか…。 /|/ |/ 01/12/13(木) 23:24
      ┗ Re:タグ情報とか…。 L.Entis 01/12/14(金) 8:20

MIOのデコードがうまくいかないです(ι´Д`)
 /|/ |/  - 01/12/9(日) 3:07 -

引用なし
パスワード
   Sound Player Lilith 用の MIO プラグインを作成してみてるのですが、
どうもデコードが正常に出来ません。

一見正常に動いているように見えるのですが、
デコードされて出てきたPCMデータが明らかに変です。

デコードには、MIODynamicPlayerクラスを使っていますが、
何か使い方に問題があるのでしょうか……?

色々試行錯誤はしてみたものの、
原因がサッパリです。
もうお手上げ状態です……(ι´Д`)

プラグインのソースコードは、こちらにおいてあります。
御時間がありましたら、見ていただけないでしょうか?

http://royalmuse.virtualave.net/dev/

MIO.cabがそうです。

鯖の認証パスは、別途メールで送らせていただきます。
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)@ce3158503-a.edgwa1.kn.home.ne.jp>

Re:MIOのデコードがうまくいかないです(ι´Д`)
 L.Entis  - 01/12/9(日) 10:11 -

引用なし
パスワード
   ▼/|/ |/さん:
>Sound Player Lilith 用の MIO プラグインを作成してみてるのですが、
>どうもデコードが正常に出来ません。
>
>一見正常に動いているように見えるのですが、
>デコードされて出てきたPCMデータが明らかに変です。

 とりあえず、良くあるミスに、eriInitializeLibrary 関数を呼び出していないことが考えられますがいかがでしょうか?
 ソースのほうに検索を掛けてみただけですが、eriInitializeLibrary 関数を呼び出している部分が見当たりません。
 因みに、eriInitializeLibrary を呼び出さなくても可逆フォーマットは再生できると思います。
※ライブラリ自体の仕様としては、何はともあれ eriInitializeLibrary 関数を呼び出すことになっているわけですが
<Mozilla/4.75 [ja] (Windows NT 5.0; U)@tokyo-fa1-192.kcom.ne.jp>

Re:MIOのデコードがうまくいかないです(ι´Д`)
 /|/ |/  - 01/12/9(日) 14:13 -

引用なし
パスワード
   ▼L.Entisさん:
> とりあえず、良くあるミスに、eriInitializeLibrary 関数を呼び出していないことが考えられますがいかがでしょうか?
> ソースのほうに検索を掛けてみただけですが、eriInitializeLibrary 関数を呼び出している部分が見当たりません。
> 因みに、eriInitializeLibrary を呼び出さなくても可逆フォーマットは再生できると思います。
>※ライブラリ自体の仕様としては、何はともあれ eriInitializeLibrary 関数を呼び出すことになっているわけですが

はうっΣ( ̄▽ ̄;)
まさしくそれでした(ι´Д`)
erinaf.docの方ばかり見ていて、
specifications.docは途中までしか見ていませんでした……Σ( ̄▽ ̄;)
おかげさまで、正常動作させることができました。
ありがとうございます。

#いつもDLLとか、最初のメソッド呼び出し時に自動でInitializeするタイプの
#ライブラリしか使って無かったので、明示的に呼び出すって概念が、
#すっかり抜けてしまっていましたΣ( ̄▽ ̄;)

ところで、ココで新たな疑問が湧いたのですが、
eriInitializeTask() と eriCloseTask()が必要になると、
スレッド間で共有する場合とかに、どうなっちゃうのでしょうか?

例えば、今のLilithでは、
メインスレッドでデコーダオブジェクトの作成(デコーダの初期化)が行われ、
サウンドライブラリ側の再生スレッド内でデコードが行われます。
eriInitializeTask() と eriCloseTask()が必要な形に変わった場合、
正常な動作は期待できなくなるのでしょうか?
そうすると、デコードとデコーダの初期化は、
同一スレッド上で行うようにしなくてはならないですよね。
オブジェクト自体を今までのように任意のスレッドで共有できるようにするには、
デコーダオブジェクト内でスレッドを生成して、
そこですべての動作を行う非同期モデルに変更する必要があります。
そのあたり、どうなる予定でしょうか?

また、LibraryおよぼTaskのInitializeとCloseには、
参照カウントがありますか?
それとも、各々1回ずつでなくてはダメなのでしょうか?
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)@ce3158503-a.edgwa1.kn.home.ne.jp>

Re:MIOのデコードがうまくいかないです(ι´Д`)
 L.Entis  - 01/12/9(日) 17:26 -

引用なし
パスワード
   ▼/|/ |/さん:
>ところで、ココで新たな疑問が湧いたのですが、
>eriInitializeTask() と eriCloseTask()が必要になると、
>スレッド間で共有する場合とかに、どうなっちゃうのでしょうか?

 特に問題はないと思います。

>そうすると、デコードとデコーダの初期化は、
>同一スレッド上で行うようにしなくてはならないですよね。

 そうする必要もないと思います。

>オブジェクト自体を今までのように任意のスレッドで共有できるようにするには、
>デコーダオブジェクト内でスレッドを生成して、
>そこですべての動作を行う非同期モデルに変更する必要があります。
>そのあたり、どうなる予定でしょうか?

 なぜライブラリ全体の初期化関数とは別にスレッドの初期化関数があるかと言えば、スレッドのコンテキストを初期化するためです。
 現在は、eriInitializeTask では、FPUユニットとXMMユニットを初期化しています。(OSが正しく行っているはずですが、OSの初期状態が未定義なので、意図的に丸めなどを設定しています)
 それと、将来この関数に他の機能がつくとすれば、TLSにライブラリのスレッド固有の情報を書き出すことです。(多分ないです)

>また、LibraryおよぼTaskのInitializeとCloseには、
>参照カウントがありますか?
>それとも、各々1回ずつでなくてはダメなのでしょうか?

 現在は参照カウンタは使っていません。(Close関数は何もしないので)
 もし、将来Close関数が何らかのリソースを開放するような動作をするような場合には、Initialize関数を呼び出した回数Close関数を呼び出すまではリソースは開放されなくなります。

 スレッドでどうこうと言う話ですが、オブジェクトへの操作(メンバ関数呼び出しやメンバ変数へのアクセス)が複数のスレッドから同時に行われても問題ないように(普通マルチスレッドプログラミングでそうするように)外側で作ってやればまったく問題はありません。
<Mozilla/4.75 [ja] (Windows NT 5.0; U)@tokyo-fa1-192.kcom.ne.jp>

あ、それと
 L.Entis  - 01/12/9(日) 17:32 -

引用なし
パスワード
    音声のエンコードのパラメータの設定関数 SetCompressionParameter のプロトタイプが変更になる予定です。
 画像の圧縮パラメータと同様に構造体で渡す形になる予定です。
 もしエンコーダーも書くことがありましたらご注意ください。バージョンのβがのくまでは他にも変更があるかも…。
 今のところの予定はそれだけですが…。
<Mozilla/4.75 [ja] (Windows NT 5.0; U)@tokyo-fa1-192.kcom.ne.jp>

Re:MIOのデコードがうまくいかないです(ι´Д`)
 /|/ |/  - 01/12/9(日) 20:47 -

引用なし
パスワード
   とりあえず、マルチスレッドでのライブラリの使用に関しては、
特に意識する必要はないということですね。
スレッド用の初期化関数が用意されてるので、
TLSとかの関係で依存性があるのかと思ってしまいました。

1つだけ気になるのが、
>現在は、eriInitializeTask では、FPUユニットとXMMユニットを初期化しています。
>(OSが正しく行っているはずですが、OSの初期状態が未定義なので、
>意図的に丸めなどを設定しています)

この部分なんですが、スレッドの開始時
(というよりは、最初にeriInitializeTaskを呼んだ時)
に設定した後、あとはそのままということでしょうか?
そうすると、間に入る他のプログラムによって変更された場合、
大丈夫なのでしょうか?
たぶん、『念のため』設定しているだけで、
実際に必要な部分では、処理単位で変更しているのだと思われますが、
一応確認しときます。
私もアセンブラとかいじるので、最初に変更したのをあてにされてると、
私のコードで変更したことでおかしな動作になったりするかもしれないので。

>音声のエンコードのパラメータの設定関数 SetCompressionParameter
> のプロトタイプが変更になる予定です。

了解です。SDKがバージョンアップされたら、こちらも変更します。
基本的に、今はヒマがあるため、なるべく最新のモノを使うようにしてるので、
本家でバージョンアップがあれば、すぐ対応できると思います。


あとは、タイトルやアーティスト名などの、いわゆるタグ情報については、
特に規定が無いのでしょうか?
CopyrightとDescriptionとが書き込めるようになっているのには気づいたのですが、
Descriptionの方にでも書式化して埋め込むのでしょうか?
あるいは、それとは別個に用意されているのでしょうか?
書式や文字コードとか決まっていたり、
あるいはこれから定義する予定でしたら、
それに従わせていただきたいです。

とりあえず、デコード/エンコードとも一通り動くようになったので、
身内でのテストを済ませたあと、
2〜3日中にテスト版をHPで公開させていただきます。
折りをみて、著作権表示や動作などに問題がないかどうか、ご確認ください。
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)@ce3158503-a.edgwa1.kn.home.ne.jp>

タグ情報とか…。
 L.Entis  - 01/12/9(日) 22:51 -

引用なし
パスワード
   ▼/|/ |/さん:
>>(OSが正しく行っているはずですが、OSの初期状態が未定義なので、
>>意図的に丸めなどを設定しています)
>
>この部分なんですが、スレッドの開始時
>(というよりは、最初にeriInitializeTaskを呼んだ時)
>に設定した後、あとはそのままということでしょうか?
>そうすると、間に入る他のプログラムによって変更された場合、
>大丈夫なのでしょうか?

 関数の呼び出し規約では、フラグレジスタをはじめとするすべてのコントロールレジスタの内容は、関数復帰時に呼び出し時の状態に戻さなければならないことになっているはずです。
 まあ、高速化のために関数単位ではやらない場合も多いとは思いますが、そういうことをやっている処理単位の中では上手くいかないかもしれないですね。
 それは他の関数でも同じことだと思います。
 ただ、eriInitializeTask では、コントロールレジスタをプロセッサの初期状態に設定しているだけなので、普通問題はないはずです。

>あとは、タイトルやアーティスト名などの、いわゆるタグ情報については、
>特に規定が無いのでしょうか?

 実は今のところ公開はしてないです。
 一応、音声フォーマットのときのみ Description の方に以下のフォーマットで格納することになっています。

# <tag-name> <cr/lf>
<contents-text> <cr/lf>
...

 # 記号から始まる行がタグの始まりで、<tag-name> には以下のものが指定できます。ただ、## から始まる行は # から始まる <contents-text> に置き換えられます。

<tag-name>  : <内容>
title    : 曲名など
vocal-player : 歌手名や奏者など
comment   : コメント

 以上。(^^;
 かなり緩やかな指定です。なぜか、"vocal-player" って、1つになってます。(^^;
 これ以外のタグが必要でしたら、各アプリケーションで付け足してくださいと言う感じです、とりあえずは。(^^;;;;
<Mozilla/4.75 [ja] (Windows NT 5.0; U)@tokyo-fa1-192.kcom.ne.jp>

Re:タグ情報とか…。
 /|/ |/  - 01/12/13(木) 23:24 -

引用なし
パスワード
   タグ情報なんですが、独自の実装をしてしまったのですがよろしかったでしょうかΣ( ̄▽ ̄;)

・ERIAnimationWriter::WriteDescription()は任意のバイナリデータを書き込める。
・ERIFileは、descriptを、先頭が0xFFFE以外の場合、'\0'で終わるShift-JISの文字列として扱う

以上2点から、'\0'で終わる任意の文字列の後ろに、バイナリデータを埋め込めるので、それを悪用してみました。
他のソフトでは、ERIFileの仕様によって、"MIO"という3文字のコメントに見えますが、その後ろに'\0'を挟んでLilithプラグイン標準仕様のコメントデータが埋め込まれてます。

テキスト文字列の解釈が面倒なので、そのまま使えるバイナリデータで
お茶を濁してしまったのですが、ダメですか……?Σ( ̄▽ ̄;)
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)@ce3158503-a.edgwa1.kn.home.ne.jp>

Re:タグ情報とか…。
 L.Entis  - 01/12/14(金) 8:20 -

引用なし
パスワード
   ▼/|/ |/さん:
>以上2点から、'\0'で終わる任意の文字列の後ろに、バイナリデータを埋め込めるので、それを悪用してみました。
>他のソフトでは、ERIFileの仕様によって、"MIO"という3文字のコメントに見えますが、その後ろに'\0'を挟んでLilithプラグイン標準仕様のコメントデータが埋め込まれてます。

まあ、とりあえずOKなのではないでしょうか?(^^;
近いうち、画像圧縮の際の省メモリや、MIOの圧縮オプションの設定、あと、現状では、MIODynamicPlayer クラスを派生させないとメンバ変数の m_erif にアクセス出来ないのをちゃんとできるようにしたり、と言うのをやる予定ですが、これに付け加えて、タグ情報の解析クラスなども追加する予定ですので、その時に対応してもらえれば嬉しいです。
<Mozilla/4.75 [ja] (Windows NT 5.0; U)@tindacil.zeroeks.co.jp>

  新規投稿 ┃ ツリー表示 ┃ 一覧表示 ┃ トピック表示 ┃ 検索 ┃ 設定 ┃ ホーム  
53 / 57 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
7920 C-BOARD v3.02 is not Free?