• ベストアンサー

異名同音(C# = Db)をenumで表現する方法

質問です。 友達がギターコードを表示するプログラムを組もうとしています。 そこで問題なのがコードには異名同音(例えばC#とDbは同じ音)があるので enumでどう表現すればよいのか分からない、ということです。 彼はプログラマーとして働いているのでenumの使い方は熟知してます。 自分は音楽専門でenumは授業で習ったくらいです。 僕はenumを使わずにC=1, C# or Db=2 , D=3, D# or Eb=4, E=5, ... B=12という感じで 割り振ったらどうか、と素人考えで助言したのですが 転調などを考えるとenumの方が良いそうです。 うむ、確かに納得ですが…。 皆さんはこういうプログラムのときはどのように処理してるのでしょうか? なるべく実際に音楽関連のソフトを組んだ経験のある人に答えていただきたいです。 彼には借りがあるので、どうかよろしくお願いします。

  • kicker
  • お礼率89% (235/263)
  • Java
  • 回答数5
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

音楽関連ソフトを作ったことはないですが、 enumで同じ値を指定する仕方はわかります。 例えば次のようにします。 public class Sample { static enum Code { C(1),CSharp(2),Db(2),D(3),DSharp(4),Eb(4), E(5); private final int codeValue; Code(int v){ this.codeValue=v; } public int codeValue() { return codeValue; } } public static void main(String args[] ) { System.out.println(Code.CSharp.codeValue()); System.out.println(Code.Db.codeValue()); } }

その他の回答 (4)

  • incho0922
  • ベストアンサー率41% (84/204)
回答No.5

No.1です。発想が全く違うかもしれませんが・・・ ギターの指板を図示するということであれば、かなり限られたコードしか表示できないと思います。 たとえば、10フレット目をセーハするようなコードが図示されても、いちいちフレットを数えなければなりませんから、実用的ではないですよね。 実用的なのは、せいぜい7フレットくらいの間に収まるようなコードではないでしょうか。 だとしたら、必要なコードの画像とコードネームを一対一に対応付けして、コードを指定したらその画像を表示するようなものでよいのではないかと思いました。 もし本当に異名同音を正しく処理しようとしたら、C#コードではEシャープ音が出てきますし、GbmコードではBダブルフラット音が出てきますから、相当な数の異名同音を処理できるようにしておく必要があります。

kicker
質問者

お礼

連続投稿ができなくなったんですね…本当に時間がないので 他のみなさんには申し訳ありませんがこれでお礼とさせていただきます。 ありがとうございました。

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.4

ギターのコードは分からないのですが…。 異名同音であるということであれば、音と名称は一度明確に分けてそれぞれにenumを用意しましょう。 この場合、No.3さんの >「C#」と表記するか「Db」と表記するかは、楽曲のキーによって決まってくる を参考にすれば、音とコードをenumで定義し、相互の変換をキーのオブジェクトが担当するのがよさそうです。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.3

どのように処理するか、最終的な決定は、#1のおっしゃっている通り、仕様によってくると思います。 ただ、今の情報だけでいえば、質問者さんの方法でいいような気がします。 「C#」と表記するか「Db」と表記するかは、楽曲のキーによって決まってくるもので、この2つを別のものとして管理してしまうとキーを変えたときの処理が面倒になりそうだからです。

  • incho0922
  • ベストアンサー率41% (84/204)
回答No.1

ギターコードをどのように表示しようとしているのでしょうか? 図示するのか、構成音を文字で表示するのか、その他なのか・・・ また、enumをどのように定義して、どのように利用しようとしているのかによっても全然違ってくると思います。 kickerさんがどの程度プログラミングに詳しいのかこの質問からは分かりませんが、どちらかと言えばkickerさんよりもプログラマーのご友人本人が質問する方が、回答もしやすいと思います。

kicker
質問者

お礼

本人にここでの回答について説明すると納得したようです。 ありがとうございました。

kicker
質問者

補足

友人はアメリカ人なので本人は質問できません。 ギターコードを仮想のフィンガーボード上で図示するのが目的らしいです。 enum Key{C, C#, D, D#, E, ...,B}という感じで定義していたと思います。 ただ、彼とゆっくり話せるのは今週の金曜日ですので そのときに詳しいことを聞くつもりです(ここの回答も見せるつもりです)。 自分もここんとこJavaを触ってないものですから勉強しておきます。 他の回答者の方々ももう少しお待ちください。m(__)m

関連するQ&A

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

  • 異名同音

    異名同音(例えばA#とB♭)というのがありますが、これらが同音なのは平均律の場合であって、ピタゴラス律や純正律の場合は同音ではないですよね? ではピタゴラス律や純正律の場合、二つの音は周波数比やセントでいうとどれくらい音が違うのでしょうか?

  • 異名同音

    保育士の資格を目指して、現在通信教育で勉強しています。最近、音楽の単元に入ったのですが、私はピアノが弾けず全くの初心者で基礎知識を勉強しているのですが、通信教育のため分からない所があっても聞けなくて教科書片手に悩んでいます。 【わかりやすい楽典】(川辺守著)のテキストを使っていて、音名・記号・変化記号とかを学び始めた所です。 学んだ後のページにある練習問題で、「次の二つの音が異名同音になるように右側の音に変化記号をつけなさい。」(p31)というのがあるのですが…私は異名同音は♭か♯をつければ良いだけだと考えていたんですが20問中4問だけ、ダブルシャープとダブルフラットが正解の問題がありました。ここで質問なのですが、ダブルシャープとダブルフラットが付くのはどういう時なんでしょうか?規則性が分からなくて。 問題は全て高音部譜表(ト音記号)に音符が書いてあり、ソ→♭♭ラ、高音レ→×ド、ファ→♭♭ソ、高音ミ→×レという答えになっていたんですが(×はダブルシャープ)、他の問題は♯か♭だけの解答で正解してました。 ただ、その4問だけ間違っていて、解説もなくなぜその答えになるのかモヤモヤしています。わかる方がいたら是非教えてください!

  • あるコード進行を分析しているのですが、転調が多すぎてどう曲を解釈してい

    あるコード進行を分析しているのですが、転調が多すぎてどう曲を解釈していいかわかりません。 C△→B♭△→C△→D♭△→ C△→B♭△→C△→B♭△→ C△→D♭△(♯11)→C△→B♭△→ Am→G→C→省略→ Em→A7→F→G→A♭→B♭7→C です。 まず、 C△→B♭△→C△→D♭△ は、C△をkeyFのVとして(?)、FのIVであるB♭△に転調 Cに戻り、次にD♭に転調。(?) C△→D♭△(♯11)→C△→B♭△ コードがD♭△の時、メロディーにb♭とgがでてくるので、keyA♭のIVと判断。 共通コードもないのに、何故CからA♭に転調できるかは謎 B♭→Am→G→C Em→A7 keyFのIIIをCのVIととらえて、F→Cに転調 Em→A7は、セカンダリードミナント。しかし何故、次のコード、keyCのFにいけるかのかが謎。 →F→G→A♭→B♭→C ここはもう完全に?です。 一応、自分で分析してみたのですが、?がいっぱいあるようにもう混乱しています。 どなたか助けてください!

  • ホ長調からロ長調へ転調するには?

    作曲しているものです。ホ長調の属調転調はロ長調と知ったのですが、ホ長調のVからロ長調のIに転調しても、違和感があるのですが、はたしてこの転調はあっているのでしょうか? AM7→B→C#m→D#m ていうふうに転調しているのですが、あっていますでしょうか? また、間違っていたら正しい転調コード教えてください^^

  • 音楽理論においての質問

    DTMで作曲をしたいと思い、音楽理論を勉強しています。ですが、コード進行など覚えることが多くて大変苦労しています。 例えば→IIm  V7  I  VImにKeyをなにか当てはめたりするのですが、いまいま覚えられません。代理コードやモード、転調などもいまいち・・・ そこで質問なんですが、作曲されている方々は理論をどこらへんまで熟知しているのでしょうか。また、有名な作曲家(ZUN氏や麻枝准氏など)は音楽理論をどの程度知っているのでしょうか。また、おすすめのリンクなどもあったら添えていただけないでしょうか。 ご回答よろしくお願いします。

  • C言語によるBerkeley DB アクセスでエラー

    FreeBSD 6.1でC言語によるプログラムを書いています。 ここでデータベースにBerkeley DBを使用しているのですがputで引数エラーが出ます。 以下テストプログラムです。 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <limits.h> #include <db.h> #include <fcntl.h> #include <string.h> #include <errno.h> int main() { DB* db; DBT key, val; memset(&key, 0, sizeof(DBT)); memset(&val, 0, sizeof(DBT)); key.data = (char *)"key"; key.size = strlen((char *)key.data); val.data = (char *)"データです。"; val.size = strlen((char *)val.data); if((db = dbopen("test.db", O_CREAT | O_RDWR, 644, DB_BTREE, NULL)) == NULL) { perror("dbopen"); exit(1); } if(db->put(db, &key, &val, R_SETCURSOR) == -1) { perror("put"); exit(1); } if(db->close(db) == -1) { perror("close"); exit(1); } } 結果:put: Invalid argument マニュアルやGoogleのソースコード検索等をして調べてみたのですが、どうしても解決できません。 お分かりになる方、ぜひ御教示お願いします。

  • 異名同音の音程

    添付画像が見易く表示されるかどうかが分かりませんが, ドビュッシー「海」第3楽章 En animant の一部です。 この箇所の8小節前(♭5の調号が無くなるところ)から 管楽器パートに異名同音が続けて出てきます。 この譜例の場合, テンポも速く,♭と♯の音程を調節するような箇所ではなく, 単に音の動きが「下がる」「上がる」の記譜上の都合だと思っていますが, もしかして,音程の進行として意味があるかも(?)と, 考え過ぎかもしれませんが,疑問をもちました。 管楽器をする人は,単なる記譜上の異名同音として演奏されるのか, それとも,音程の違い(異名異音)を意識されるのか, 実際の技術的なことも含め,どうなのでしょうか。

  • ソの異名同音

    ソの異名同音って何ですか?ミだったらファのフラットっていうのは分かるんですけど…

  • 異名同音の和音

    例えばDとG#は増4度ですが、異名同音でG#をA♭と読み替えると、DとG#(A♭)は減5度ということになるのでしょうか。 あるいは、FとG#は増2度ですが、G#をA♭と読み換えると、短3度(FとA♭)になるのでしょうか。

専門家に質問してみよう