zkunがいろんなことを横書きするブログのようですw(含み笑)
これまで、ピッチベンドのMIDIデータ送受信についてあまり深く考えたことはなかったんだけど、今回ピッチベンドフィルターを作るにあたって、はじめて詳しく研究する機会をもてたyo 色々手広くやってると、さまざまな勉強をする機会が自動的にやってくるので、ますます賢くなるようですw(微笑)
ベンド値は-8192から+8191までの間で、最低から最大の間を常に占めるらしいw その幅は16384で、それは128x128の値と等しいようです。128とは8*16と等しく、よって、16進数で表すと、00Hから7FHまでで表される2つの値で表現されているということのようですw(複雑な笑)
その数値幅は一定なまま、ピッチベンドレンジによって、最大最小のときの実際の高低差が指定されるので、つまり、同じ「7F 7F」の値でも、レンジが24半音なら2オクターブ、レンジが2半音ならわずか1全音差のベンドにしかならないというややこしい数値管理をしているようですw(苦笑)
なので、どのようなプログラムを作ったとしても、実際にギターシンセ本体のピッチベンドレンジをいくつに設定しているかによって挙動が変わってしまうので注意が必要だし、それはアプリ側から監視しきれないので、あくまで「推奨値=12ですw」とアピールして、使用者に注意を促すしかないだろうne まあ、あくまでそういうものだということに留意しておく必要はあるyo(微笑)
レンジ12にしておくと、たいして力もいれずにチョーキングしたときの音程の上がり具合が、実際のギターの感覚に一番近いと感じるので、それが「レンジ=12」を推奨している理由だyo(妥当笑) これに設定していると、チョーキングして「半音」上げるのに要するベンド値の理論的な数値が「+683」になるようですw つまり、半音分意識して上げるチョーキングをするまではベンドを認識させないようにしたいとするならば、ピッチベンドフィルターは中心値から683未満の変動を無視するように記述すればいいということになるわけですw ただ、それではあまりにも直前ギリギリ過ぎるので、実際にはもうちょっと手前くらいから認識しはじめるくらいで普通に自然に聴こえると思うので、まあ、600付近を最大値と考えればよく、逆に全然効いてない状態は0になるので最小値は0と考えればいいようですw つまり、効き具合の調整スライダーを作るならば、値の範囲は0-600程度がよいだろうということになるようですw(論理的笑)
ベンド値は「7F 7F」の形で表されると書きましたが、中央値は常にその真ん中の「40 00」になるようですw 「41 00」だと、80H=128のぶんだけ数値が大きくなったことになるので、その約5倍上げたければ「45 00」として、128x5=640ぶんだけ上げればいいことになりますw これはちょうど「+683」のちょっと手前になるので、非常に区切りがいいようですww(快笑) よって、調整スライダーとしては、下位バイトは無視して、上位バイトのみを対象にして、上は「45 (00)」未満、下は「3B (00)」以上を境目として、しきい値を動かせるようにプログラミングすればいいということになるようですw まあ、あくまでピッチベンドレンジを12と設定している場合の話ですがw
まあ、アプリの画面上にピッチベンドレンジ設定のセレクタを置いてあるので、それと連動させて、レンジが異なる場合もすべて条件式を記述して自動対応させればいいだろと思うかもしれませんが、それをやると、ただでさえリアルタイム処理でいろいろやらなくちゃいけないことがたくさんあって重くなりがちな挙動を、さらに苦しくすることになるので、できれば推奨値だけの一発処理で済ませたいところのようですw さらに言えば、レンジ12以外でチョーキングして「ちょうどいい」「気持ちいい」「自然だ」と感じるバカはまずいないと思うので、このレンジ=12の推奨は、ほぼ絶対守ってもらうべきものなので、それ以外での使用を許すような仕様にはむしろしないほうがいいと思われるので、やはりレンジ=12であるという専用挙動でいいようですw(確信笑)
とまあ、こんなことをダラダラと書きながら、v0.95bのスライダーをどのように修正したらいいかが理論的にハッキリしたので、このとおりに直すようですw 説明してるようなふりをして、実は自分で整理してただけだったようですw このようにzkunくらいのレベルになってくると、自分で勉強しながら人に教えることも同時にできてしまうので、教育者の鑑のような存在といってもいいようですw(凄過ぎ笑)
ベンド値は-8192から+8191までの間で、最低から最大の間を常に占めるらしいw その幅は16384で、それは128x128の値と等しいようです。128とは8*16と等しく、よって、16進数で表すと、00Hから7FHまでで表される2つの値で表現されているということのようですw(複雑な笑)
その数値幅は一定なまま、ピッチベンドレンジによって、最大最小のときの実際の高低差が指定されるので、つまり、同じ「7F 7F」の値でも、レンジが24半音なら2オクターブ、レンジが2半音ならわずか1全音差のベンドにしかならないというややこしい数値管理をしているようですw(苦笑)
なので、どのようなプログラムを作ったとしても、実際にギターシンセ本体のピッチベンドレンジをいくつに設定しているかによって挙動が変わってしまうので注意が必要だし、それはアプリ側から監視しきれないので、あくまで「推奨値=12ですw」とアピールして、使用者に注意を促すしかないだろうne まあ、あくまでそういうものだということに留意しておく必要はあるyo(微笑)
レンジ12にしておくと、たいして力もいれずにチョーキングしたときの音程の上がり具合が、実際のギターの感覚に一番近いと感じるので、それが「レンジ=12」を推奨している理由だyo(妥当笑) これに設定していると、チョーキングして「半音」上げるのに要するベンド値の理論的な数値が「+683」になるようですw つまり、半音分意識して上げるチョーキングをするまではベンドを認識させないようにしたいとするならば、ピッチベンドフィルターは中心値から683未満の変動を無視するように記述すればいいということになるわけですw ただ、それではあまりにも直前ギリギリ過ぎるので、実際にはもうちょっと手前くらいから認識しはじめるくらいで普通に自然に聴こえると思うので、まあ、600付近を最大値と考えればよく、逆に全然効いてない状態は0になるので最小値は0と考えればいいようですw つまり、効き具合の調整スライダーを作るならば、値の範囲は0-600程度がよいだろうということになるようですw(論理的笑)
ベンド値は「7F 7F」の形で表されると書きましたが、中央値は常にその真ん中の「40 00」になるようですw 「41 00」だと、80H=128のぶんだけ数値が大きくなったことになるので、その約5倍上げたければ「45 00」として、128x5=640ぶんだけ上げればいいことになりますw これはちょうど「+683」のちょっと手前になるので、非常に区切りがいいようですww(快笑) よって、調整スライダーとしては、下位バイトは無視して、上位バイトのみを対象にして、上は「45 (00)」未満、下は「3B (00)」以上を境目として、しきい値を動かせるようにプログラミングすればいいということになるようですw まあ、あくまでピッチベンドレンジを12と設定している場合の話ですがw
まあ、アプリの画面上にピッチベンドレンジ設定のセレクタを置いてあるので、それと連動させて、レンジが異なる場合もすべて条件式を記述して自動対応させればいいだろと思うかもしれませんが、それをやると、ただでさえリアルタイム処理でいろいろやらなくちゃいけないことがたくさんあって重くなりがちな挙動を、さらに苦しくすることになるので、できれば推奨値だけの一発処理で済ませたいところのようですw さらに言えば、レンジ12以外でチョーキングして「ちょうどいい」「気持ちいい」「自然だ」と感じるバカはまずいないと思うので、このレンジ=12の推奨は、ほぼ絶対守ってもらうべきものなので、それ以外での使用を許すような仕様にはむしろしないほうがいいと思われるので、やはりレンジ=12であるという専用挙動でいいようですw(確信笑)
とまあ、こんなことをダラダラと書きながら、v0.95bのスライダーをどのように修正したらいいかが理論的にハッキリしたので、このとおりに直すようですw 説明してるようなふりをして、実は自分で整理してただけだったようですw このようにzkunくらいのレベルになってくると、自分で勉強しながら人に教えることも同時にできてしまうので、教育者の鑑のような存在といってもいいようですw(凄過ぎ笑)
PR