BBS
  NewPost ┃Tree ┃Thread ┃Plain ┃Topic ┃Search ┃Setting ┃Top  
242 / 307 ツリー ←次へ | 前へ→

spc2midiで出来たMIDIのテンポ my 05/5/10(火) 10:42

Re:spc2midiで出来たMIDIのテンポ GIGO 05/6/8(水) 5:18
Re:spc2midiで出来たMIDIのテンポ norihi 05/6/8(水) 16:23

Re:spc2midiで出来たMIDIのテンポ
 GIGO  - 05/6/8(水) 5:18 -
  
▼norihiさん:

>テンポがずれるという事は、nsf2midiやspc2midiは単純な解析ーコンバートをしているのではなくて、リアルタイムに演奏してそれをmidiにキャプチャしているという理解でいいのでしょうか?
基本的にはそう言う事になります。
nsf2midiとspc2midiではそれぞれ事情が異なるため、一つずつ分けて説明します。

- nsf2midi
nsf(FC)の場合、ハードウェアの性質上、キーオンなどの更新タイミングは
秒間60回の解像度に縛られます。従って、秒間60回の更新タイミングにあわせて
その時の状態を記録してやればほぼ完全にタイミングを再現する事が出来ます。
nsf2midiでわずかにテンポがずれる場合と言うのは、元々の演奏のテンポが
秒間60回のタイミングから外れているため、それをそのまま再現すると
結局わずかにずれたものが出来上がると言うことです。
言い換えますと、FC上でも元から微妙にずれた状態で演奏されているので、
それをそのままキャプチャするとずれたものが出来上がる…と言うことです。

- spc2midi
spc(SFC)の場合、タイマーの更新タイミングは8kHzか64kHzを基準として
ドライバ側で可変となります。実際には8kHzなどでは細かすぎますので、
適宜設定を行い、音楽の再生に適した解像度に落とすのが普通です。
従って、このタイマーを基準としてキャプチャを行えば、正確に
タイミングが再現できると考えたのですが、うまくいきませんでした。
サウンドドライバ側で演奏する曲のテンポにあわせてタイマーの更新
タイミングを変えていれば良いのですが、大抵の場合はドライバ毎の
固有の値に固定されているため、結果としてFCの時と同じ問題が生じます。
(これに関しては、spc2midiの捕捉アルゴリズムにも問題があり、
まだ改善の余地もあると思います。
あと、単純にspc2midiのバグもある可能性も考えられます…

- 解析してノンリアルタイムでmidiに吐き出す
これは事実上無理かと思います。
GBA等では共通のサウンドドライバを用いていることが多いためか、
そのドライバ用のデータ構造を解析すると言った手法がある程度使えるようですが、
FCやSFCの場合、各社各タイトル毎に殆どまったく違うサウンドドライバ
が乗っているため、それを一つずつ解析する事は現実的ではありません。


>横やりですみません、スレッドに関連するのでここで質問させて下さい。
>テンポがずれるという事は、nsf2midiやspc2midiは単純な解析ーコンバートをしているのではなくて、リアルタイムに演奏してそれをmidiにキャプチャしているという理解でいいのでしょうか?
>それならnsfやspcを解析してノンリアルタイムでmidiに吐き出す...という風にすればテンポのずれもなくなると思うのですが、それは難しいのでしょうか。
>(全然知識がないのでずれていたらごめんなさい)
引用なし

Re:spc2midiで出来たMIDIのテンポ
 norihi  - 05/6/8(水) 16:23 -
  
なるほど、nsfなんかはもともとmidiと互換性があるぐらいに思っていたんですが、想像以上に複雑なんですね。。
詳細な解説ありがとうございます。
引用なし

  NewPost ┃Tree ┃Thread ┃Plain ┃Topic ┃Search ┃Setting ┃Top  
242 / 307 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:   
134,592
(SS)C-BOARD v3.5.4 is Free.