「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



ニコニコ動画で、PC-8801系の動画をいくつか
眺めてて、チップチューンのことをモヤモヤと
思い出した。

Bio100%の潜水艦のゲーム、Super Depth。
http://bio100.jp/game_review/game01.html


ご存知のとおりの、あのSuper Depthなんだけど、
BEEP音(単音)で無理やり和音を出力してるって
いうのもひとつのポイントだったと思うんだけど、
今となっては、やっぱりノスタルジーすら感じる
チープな音色。


で、ノスタルジジイとしては、むしろそのチープ
な感じを、チップチューンの音源にできないかと
妄想し出す。

以前、
http://nekosan0.bake-neko.net/connection_synth1.html
Arduinoで正弦波の8ポリ出力が出来るMIDI音源とか、
http://picavr.uunyan.com/avr_m2_ppsg.html
似非PSG音源とかを作ったんだけど、これとはまた違う
チップチューンで使えそうな、チープな音源を作れ
ないかなぁ?と。


で、手っ取り早くこの手の音源を作るといえば、
やっぱArduinoでサクッと実験。


http://arduino.cc/en/Tutorial/Tone

ArduinoチュートリアルのページのTone関数の
サンプルを弄って、4和音を出してみる。

#include "TimerOne.h"

#include "pitches.h"


int melody[][8] = {
  {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5},
  {NOTE_C5, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4},
//  {      0,       0,       0,       0,       0,       0,       0,       0},
//  {      0,       0,       0,       0,       0,       0,       0,       0},
  {NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6},
  {NOTE_C6, NOTE_B5, NOTE_A5, NOTE_G5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_C5}
//  {NOTE_C3, NOTE_D3, NOTE_E3, NOTE_F3, NOTE_G3, NOTE_A3, NOTE_B3, NOTE_C4},
 // {NOTE_C4, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_F3, NOTE_E3, NOTE_D3, NOTE_C3}
};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 4, 4, 4,4,4,4,4 };

int notes[4];


void callback() {
  static int pattern = 0;
  //tone(8, melody[thisNote],noteDuration);

  if (notes[pattern] != 0) {
    tone(8, notes[pattern]);
  } else {
    noTone(8);
  }
  
  pattern++;
  if (pattern == 4) {
    pattern = 0;
  }
}


void setup() {
  Timer1.initialize(1000000 / 100);   // initialize timer1, and set a 1/100 second period
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt

  for (int i=0; i// iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    int noteDuration = 1000/noteDurations[thisNote];

    //tone(8, melody[thisNote],noteDuration);
    for (int i=0; idelay(noteDuration);

    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);

    //noTone(8);
    for (int i=0; ivoid loop() {
}


(ヘッダファイルは、チュートリアルページに
 載ってるので、それをそのままコピペで使用)

D8ピンに圧電素子とか繋げば、それなりに音がでて
くることは判った。


処理方式としては、Toneが当然単音なので、Super
Depthのように、時分割で音程を切り替える方式。
1/100秒ごとに音程を切り替えるようにしてみた
んだけど、とりあえず、オクターブ3以上は問題なく
出てるみたい。

オクターブ2以下は実験してないのでわかんないけど、
1/100秒ごとに切り替えるのと、タイマ割り込みと
微妙に影響しあうと思うので、低音を優先するなら
タイマ割り込み周期を1/50とか、長く設定すれば
よいかと。
(あまり長くすると、音が濁っちゃうけど)


とりあえず、4ポリくらいは、処理能力的には全然
問題ないことが判った。まぁ、そりゃそうだな。
無理があるとすれば、処理能力の方じゃなく、
処理方式に伴う音の濁りの方。

4ポリが出れば、とりあえずセブンスコードくらいは
鳴らせるので、簡単な曲はこれだけでも鳴らせるはず。
http://www.weblio.jp/content/%E3%82%BB%E3%83%96%E3%83%B3%E3%82%B9%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%89


で、音がそれなりに出ることが判ったので、コイツに
MIDIライブラリを組み合わせて、MIDI音源化したら、
チップチューンの音源になりそうかなぁ…と。
メインではなくても、ワンポイントのおかず的に。

MIDI化は、8ポリシンセでやってることの半分なので、
造作ないだろうなと。



https://www.youtube.com/watch?v=Nk6XYuK4QeI
このArduino MIDI音源ライブラリ、詳細が載ってる
ページが見てみたいなぁ。





http://ascii.jp/elem/000/000/943/943505/
へぇ。蛍石を人工的にサクサク作れるようになるみたい。
そしたら、高性能なレンズがジャンジャン作れるように
なるわな。

それは大歓迎としても、蛍石って、経年劣化で曇ったり
変色しちゃうんだよな。人工のでもやっぱりそういう
欠点は継承しちゃうのかな?
あと、硬度が低いから、傷つきやすいとか。最近のは
そうでもないのかな。




http://page13.auctions.yahoo.co.jp/jp/auction/r119536529
あぁ、この8ビットのナツカシPCカタログはお宝だったな。
ちょっと手が出ない値段だったけど。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« カルマンフィ... toneの実験の続き »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。