
現在H8マイコンを用いて電子工作をしている者です。今スピーカーから音楽(単音)を奏でようと考えています。周波数の変え方としては割り込みを用いて、以下のようにしています。
/**************************:目覚まし音制御*****************/
void int_imia2 (void)
{
ITU2.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア
a0-=1;
if(a0==0){
nn+=1;
if(nn==1)ITU1.GRA=doo;
if(nn==3)ITU1.GRA=doo;
if(nn==5)ITU1.GRA=doo;
if(nn==7)ITU1.GRA=doo;
if(nn==9)ITU1.GRA=ra;
if(nn==11)ITU1.GRA=si;
if(nn==13)ITU1.GRA=doo;
if(nn==14)ITU1.GRA=si;
if(nn==15)ITU1.GRA=doo;
a0=20;
}
}
dooやsiには私自信が出したい周波数となるようなGRAレジスタの値を入れています。そこで、以上のようなプログラムを組んだ際に、例えば
if(nn==9)ITU1.GRA=ra;
if(nn==11)ITU1.GRA=si;
if(nn==13)ITU1.GRA=doo;
この部分ではちゃんとラ、シ、ド、と発生しているのですが、一番初めの
if(nn==1)ITU1.GRA=doo;
if(nn==3)ITU1.GRA=doo;
if(nn==5)ITU1.GRA=doo;
if(nn==7)ITU1.GRA=doo;
この部分では、ドの音がn=7のところまで鳴りっぱなしになってしまっています。本来としては、ド、ド、ド、ドと区切りを入れて欲しいところなのでどうしていいのか困っています。どのように設定すれば、うまく区切りを出して発生させることができるのでしょうか?どなたかいいアイデアがあればお願いします。
No.1ベストアンサー
- 回答日時:
音の長さを管理してみてはいかがでしょうか。
以前私が作ったプログラムでは、音の名前、音の長さ、テンポを次のように管理していました。
// 音の長さ ----------------------------------------------------------
// 十六分音符の長さを基準として長さを管理する。
#define SIXTEENTH_NOTE1// 十六分音符
#define EIGHTH_NOTE2// 八分音符
#define QUARTER_NOTE4// 四分音符
#define HALF_NOTE8// 二分音符
#define WHOLE_NOTE16// 全音符
#define SIXTEENTH_REST1// 十六分休符
#define CROTCHET_REST2// 四分休符
#define HALF_NOTE_REST8// 二分休符
#define WHOLE_NOTE_REST16// 全休符
// テンポ(十六分音符の時間)-----------------------------------------
// テンポの数字は1分間で打たれる四分音符の回数を意味する。
// ここでは十六分音符を基本単位としているため、テンポ数から十六分音符の長さ
//を次式で求める。
// (十六分音符の時間[ms])= 60 / (テンポの数字) / 16 * 1000
#define TEMPO_6063// [ms]
#define TEMPO_8047
#define TEMPO_10038
// 楽譜の構造体
typedef struct{
unsigned chartempo;// テンポ
short(*melody)[2];// メロディデータへのポインタ
shorttimeCount;// 発音中の音が終わるまでの時間カウンタ
shortnoteCount;// メロディ先頭から数えた音符位置のカウンタ
shortmaxNoteCount;// noteCount の最大値
// 言い換えれば、メロディ中の音符の数
BOOLloop;// TRUE(1): 繰り返すFALSE(0): 繰り返さない
} Score;
メロディデータはこんな感じです。
// デフォルトメロディ(ドレミファソラシド)
#define DEFAULT_MELODY_LEN9
static const short defaultMelody[DEFAULT_MELODY_LEN][2] = {
{ Do4, QUARTER_NOTE },
{ Re4, QUARTER_NOTE },
{ Mi4, QUARTER_NOTE },
{ Fa4, QUARTER_NOTE },
{ So4, QUARTER_NOTE },
{ La4, QUARTER_NOTE },
{ Si4, QUARTER_NOTE },
{ Do5, QUARTER_NOTE },
{ REST, QUARTER_NOTE},
};
上記の定義を使い、休符を使って音を出さない時間を管理していました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- TOEFL・TOEIC・英語検定 時制に関する質問です。 3 2022/04/04 04:37
- 英語 語順 1 2023/01/24 20:54
- 英語 文の意味を教えてください 1 2023/08/11 14:38
- 英語 I smelled it to see if it was rotten before eating 2 2023/01/03 01:52
- 英語 「it takes 期間 to do/doing」の意味やニュアンスの違いについて 1 2023/01/15 14:02
- 英語 This low-frequency selective cutting action provid 1 2023/03/05 12:05
- 英語 このHowの使っている意味と答え方を教えてください。 2 2022/10/29 11:34
- 英語 どのような場合に、名詞を「so+形容詞+that節」が後置修飾するのか等について 3 2023/06/29 13:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リズム学習の際、たいこの音符...
-
楽譜上に出てくる♪=♪の意味って...
-
ピアノ楽譜をメロディー譜に直...
-
これって何て言うのですか??
-
Wordで四分音符などを出す方法
-
音符について教えてください
-
カナブンの発音
-
MuseScoreで音符の大きさを小さ...
-
【音楽】なぜBPMがテンポなんで...
-
♪の意味
-
リズムを教えてください
-
cakewalkで音符を全体的に二倍...
-
楽譜が苦手なのですが、慣れる...
-
一小節
-
スピッツ「ロビンソン」のイントロ
-
かっこに入ったナチュラルは、...
-
リズムに合せて光るメトロノー...
-
現代音楽の楽譜はどこで手に入...
-
ピアノ楽譜で、「ナチュラル♯♭...
-
カプースチンのピアノソナタの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Un poco sostenuto の意味
-
Wordで四分音符などを出す方法
-
楽譜上に出てくる♪=♪の意味って...
-
MuseScoreで音符の大きさを小さ...
-
基本的な事ですが、 ピアノの立...
-
この真ん中の≒は、 読み方は=...
-
音楽用語を英語で表現
-
H8マイコン 音階 メロディー...
-
小学校で音符を習うのは何年生...
-
五線譜に音符が書けるフリーソフト
-
音楽について質問です。 「フェ...
-
速度記号の単位となる音符につ...
-
カナブンの発音
-
リズムを教えてください
-
ゼンリーアプリについて。 この...
-
音楽用語について
-
ハープのグリッサンド
-
曲名がわかりません。 ソ*ソ*ソ...
-
E7augの音符表記について
-
映画ビバリーヒルズコップのテ...
おすすめ情報