• もっと見る

<< 2024年06月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
診療記録の検索
検索語句
種類別アーカイブ
タグクラウド
最新の診療記録
最新コメント
最新トラックバック
リンク集
※修理技術に関すること以外で、おもちゃ病院に関するご意見・ご感想等がありましたら、ぜひ下のブログからコメント入力してください。
ゆりかご日記
230131 yurikagoプロジェクト(orgel7_5対応) [2023年01月31日(Tue)]

【経緯】

愛用する PIC電子オルゴールが、新年早々に oregl7_5 にバージョンアップされた。
ご本家に倣い、当方の分家プロジェクトも orgel7_5_yurikago として公開する。

開発者のブログを拝見し、新バージョンでは半音単位の上下移調も動的変更が可能(いわゆる「曲中での転調」も可能)と知れば、是非とも試してみたいと思うのは当然。
今回もまた開発者にご指導いただきつつ、分家プロジェクトのバージョンアップと同時に、曲中での転調デモ曲データを作成する。

用意した楽譜は、文部省唱歌「虫の声」
単純なメロディゆえに、リピートだけでは物足りず、「半音上げて」のリピートに期待したい。


「曲演奏途中での転調設定や、いかに?」

mushinokoe_c.png

※画像クリックで mp3再生、音量注意



【新バージョンの確認】

「名張市つつじが丘おもちゃ病院」の関連ブログは必読。
(日々進化しているため、予告なく更新されることがある)



何はともあれ、本家の新バージョンを入手しないと始まらない。


ダウンロード・解凍したフォルダの中から、プロジェクトロケーションフォルダをコピーして、自分のパソコンにフォルダ丸ごと貼り付け。
当方で、パソコンのルートドライブである「C:」に貼り付けて、「C:\orgel7_5」というフォルダが出来上がる。
このフォルダ・パス名には多バイト文字を含まないように留意。(全角文字は、IDE で文字化けするため)

MPLAB X IDE から好みのプロジェクトを開いて、いよいよ、新バージョンの PIC電子オルゴールにご対面。
当方で、よく使うデバイスのプロジェクトを一つずつ開き、ビルドや書き込みでエラーが出ないことを一とおり確認。
今後は、ここを当方の作業場所「yurikagoプロジェクトロケーション」として区別するため、フォルダ名を「orgel7_5_yurikago」に変更。


【旧バージョンからの移行】

開発者のブログを熟読、新・旧バージョンの違いを見ると、アプリ記述部分は互換性が確認されているようだ。
既存レパートリーの曲データは、開発者により新バージョンに移行完了済。いつもながら、素早い対応に驚き!

アプリソースファイルは、旧バージョンの「orgel7_4_yurikago」用が、そのまま使えるが、SWの論理極性を事前に宣言する方式に改変。
プロジェクト(根のソース)ファイルも、旧バージョン用が、そのまま使える。SPI音声再生は2線接続でCVDタッチセンスも併せて実装できる。バージョン表記を更新。(SPI4線(3線)接続ではピン割当ての変更を要す)
昨年末にハマった、レトロ時計の目覚し機能復元プロジェクトも、同様に改変したうえでバージョン表記を更新して追加。

<yurikagoプロジェクト関連ファイルの移行>

apl_Alarm.asm →(SW論理宣言を改変)apl_SW_Alarm.asm
apl_yurikago.asm →(SW論理宣言を改変)apl_SW_yurikago.asm
yurikago_15325_SW.asm → yurikago_SW_15325.asm
yurikago_LF1840_SW.asm → yurikago_SW_LF1840.asm
Alarm_1822_SW.asm → Alarm_SW_1822.asm

追加・更新した当方のプロジェクトは、直後に再ビルドしてエラーが出ないことを確認。
なお、本家で公開されたサンプルプロジェクトの多くは、当方の分家プロジェクト内では割愛し、スリム化。


【新曲データ作成】

新曲データの作成では、新バージョンにおけるマクロ記述などの留意点や不明点もあり、今回も開発者にサポートを依頼。感謝申し上げる。


新バージョン移行済の曲データ、「となりのトトロ」を参照しつつ、当方では、先ず表計算ソフトのエクセルシート上で下書き。
音符一つ一つのデータ化ではエクセル関数や複数行の挿入複写を駆使して、単純反復作業をできるだけ軽減。
音高データは、階名読み(ドレミ)をローマ字入力するだけなので、とっても簡単。

<参考資料>

下書きができたら、IDEで新規ソースファイルを作成、エディタ画面上に必要個所を少しずつ(範囲指定)複写していく。

<新曲データ関連ファイル>

song_MUSIKOE.asm 2KB(新規追加)
onpu_MUSIKOE.asm 6KB(新規追加)
song.inc 11KB(既存ファイルに上書き更新)


採譜データ作成の全体的な作業時間は、従来の約半分くらいと体感。
開発者からは、虫の声も、アクセントになっていていい感じ、と好評価。


【ダウンロード】

なお、これらのプロジェクトは(拙作の曲データも含めて)、複製・改変・再配布は自由であることを、あらためて付け加えておく。

【参考情報】

以下、曲データ採譜で必要な定義を抜粋して再掲する。
(内容は、2023年3月14日現在で更新済)


出典:下記リンク先は必読のこと。
(日々進化しているため、予告なく更新されることがある)

【Ver7_5での改善点】

@音高テーブルと音価テーブルを全曲共通にし、メモリ削減を行う。
A動的なキートランスポーズ機能をサポートする。
 これは、音高テーブルを全曲共通にすることで実現可能になる。
Bonpuファイルで、音高コードはオクターブ+音名で指定できるようにする。
 また音価コードは4分音符や8分音符などの音符の種類で記述できるようにする。
C制御用音符データの枠組みを1ワードの14ビットをフルに使うようにして、
 波形データ切り替え以外の音符データは1ワードに収める。


【設計】

@キートランスポーズのやり方を変える、
・キートランスポーズの単位を半音階とすれば、音高コードを整数値で増減すれば済む。
 つまり、移調するということ。
・音高テーブルを全曲共通にすることで、音符データでは音高コードとして
 絶対的な音高(オクターブ番号+音名)を指定することが可能となる。

A音高テーブルの持ち方を変える。
・音高テーブルには(オクターブ番号+音名)を持たせて、(オクターブ番号+音名)を
 サンプル飛び数へ変換するテーブルを別に設ける。
 オクターブ番号は3ビット、音名は4ビット、合計7ビットで表すことができるので、
 音高テーブルのメモリ量を半分にできる。

Bサポートする音高の範囲
・市販されているキーボードは61鍵盤の商品が多くあり、6ビットで表現可能な
 63半音をorgelのサポート範囲とする。
・音高の具体的な範囲は65.4Hz(中央Doの2オクターブ下)〜2489Hz(Re)とする。

Cテンポの変更についてもキートランスポーズと同様の問題があった。
・テンポの変更は頻繁に起きることでないことと8ビット乗算で済むため、乗算を
 ソフト実装することで対処する。
 計算時間は20us以下であるため、演奏のアンダーランには至らない。

D音高テーブルと音価テーブルを全曲共通にすることで、
 音符データで指定する音高コードはオクターブ+音名、音価コードは音符記号に替える。
 これにより採譜がやり易くなる。

【実装】

音符データで記述する音価記号の定義
//========================================
//音価記号の定義
//========================================
#define kR32 1 //32分3連符
#define kR16 2 //16分3連符
#define kK32 3 //32分音符
#define kR8 4 //8分3連符
#define kP32 5 //付点32分音符
#define kK16 6 //16分音符
#define kR4 7 //4分3連符
#define kP16 8 //付点16分音符
#define kK8 9 //8分音符
#define kR2 10 //2分3連符
#define kP8 11 //付点8分音符
#define kK4 12 //4分音符
#define kR1 13 //全3連符
#define kP4 14 //付点4分音符
#define kK2 15 //2分音符
#define kP2 16 //付点2分音符
#define kK1 17 //全音符
#define kW80 18 //80
#define kW84 19 //84
#define kW168 20 //168
#define kW255 21 //255

 kKは基本音符、kPは付点音符、kRは3連符を表す。
 数字は4分音符では4、8分音符では8のように表す。


音符データで記述する音高記号の定義
//========================================
//音高記号の定義
//========================================
#define DoF -1
#define Do 0
#define DoS 1
#define ReF 1
#define Re 2
#define ReS 3
#define MiF 3
#define Mi 4
#define MiS 5
#define FaF 4
#define Fa 5
#define FaS 6
#define SoF 6
#define So 7
#define SoS 8
#define LaF 8
#define La 9
#define LaS 10
#define SiF 10
#define Si 11
#define SiS 12

 12半音分のみを定義していて、これにオクターブ番号を付加して音高を指す。
 オクターブ番号は、orgelの設計ではC2(65.4Hz)〜B2(123.5Hz)を0、
 C3(130.8Hz)〜B3(246.9Hz)を1、と増加する。

音符データの設定マクロは以下のとおり
//========================================
//通常音符設定マクロ
//ttt:タイ・スラー(0=無し、1=有り)
//kkk:音価コード(1起算)
//ooo:オクターブ番号(0起算)
//nnn:音名コード(0起算)
//========================================
onp_mac macro ttt,kkk,ooo,nnn
dw kkk*256+ttt*128+ooo*12+nnn
endm


転調設定マクロは以下のとおり
//========================================
//カレントに対する転調設定マクロ
///kkk:カレントの調からの転調度[半音階](-15〜+15)
//==============================================
kec_mac macro kkk //転調度[半音階]
dw 0x0020+((kkk+16)&&0x1f) //バイアスを加算する
endm

 可変範囲は−15〜+15で、転調設定マクロはどれか一つのパートのみで使う。
 パラメータが「0」のときは転調設定を解除してSONGファイルの設定値に戻す。


トラックバック
※トラックバックの受付は終了しました
コメント