普通 ピアノの中心は A=440 の C4です。 音階には基準音があり A4=440Hzとすることが多ですが、415,430,440,442,444等も使われます。
今回 A=440Hzのクロマチック周波数の表を作りました。
此に音階名を付けるマクロを作りたいのですが、表とマクロの関連づけの作法が判りません。
音階名は CDEFGABと有り、全部で8音階を表し、次の音階列は半分か倍になって、8ですから1オクターブ下や上と表します。
8音階には、半音階と全音階があります。
(この使い方をダイアトニックと言います)8音階を使わず5音階の(ペンタトニック)もあります。
全音階は半音が有り、ずらせて上に「#」下に「♭」で表します。
此を表すと C、C#、D、D#、E、F、F#、G、G#、A、A#、B、 の12音階で一巡し 次の音階に繋がり下は番号が減り、上は番号が増えます。
(全ての半音階を使うのをクロマチックと言います) C#4-Db4 は書き方が違うだけで 同じ音階です。
周波数と音階名の例
246.94 261.63 277.13 293.66 311.13 329.63 349.23 369.99 392 415.3 440 466.16 493.77 523.25 Hz
B3 C4 C#4-Db4 D4 D#4-Eb4 E4 F4 F#4-Gb4 G4 G#4-Ab4 A4 A#4-Bb4 B4 C5
ツール-マクロ-マクロの管理-dpenoffice-basic で貼り付けました。
此の.odsのマクロを調べますと、次のようなんですが、実行するとシンタックスエラーになります。
また周波数との連結の仕方が判っていません。
また。xlsとでは違うのかも判っていません。
それではよろしくお願いします。
かしこ
「
Sub 周波数変換()
C0 = 16.35
hz = ActiveCell.Value
allcent = Format(1200 * Log(hz / C0) / Log(2), "0")
octave = Int((allcent + 50) / 1200)
octavecent = allcent Mod 1200
noterate = octavecent / 100
note = Format(noterate, "0")
cent = Format((noterate - note) * 100, "0")
Select Case note
Case 0
notename = "C"
Case 1
notename = "C#"
Case 2
notename = "D"
Case 3
notename = "D#"
Case 4
notename = "E"
Case 5
notename = "F"
Case 6
notename = "F#"
Case 7
notename = "G"
Case 8
notename = "G#"
Case 9
notename = "A"
Case 10
notename = "A#"
Case 11
notename = "B"
Case 12
notename = "C"
End Select
ActiveCell.Offset(0, 1).Value = allcent
ActiveCell.Offset(0, 2).Value = notename & octave & " " & cent
End Sub
Sub 音程変換()
inputnote = ActiveCell.Value
sharpno = InStr(inputnote, "#")
If sharpno = 0 Then
notename = Left(inputnote, 1)
Else
notename = Left(inputnote, 2)
End If
Select Case notename
Case "C"
notecent = 0
Case "C#"
notecent = 100
Case "D"
notecent = 200
Case "D#"
notecent = 300
Case "E"
notecent = 400
Case "F"
notecent = 500
Case "F#"
notecent = 600
Case "G"
notecent = 700
Case "G#"
notecent = 800
Case "A"
notecent = 900
Case "A#"
notecent = 1000
Case "B"
notecent = 1100
End Select
spaceno = InStr(inputnote, " ")
octave = Mid(inputnote, spaceno - 1, 1)
cent = Mid(inputnote, spaceno + 1)
octavecent = octave * 1200
allcent = octavecent + notecent + cent
ActiveCell.Offset(0, 1).Value = allcent
hz = Format(16.35 * Exp(allcent * Log(2) / 1200), "0.0")
ActiveCell.Offset(0, 2).Value = hz
End Sub
」
周波数の表から 音階へ変換したい
マクロの作成、スクリプトの作成、APIの使い方
ページ移動
- ようこそ!はじめての方はこちらへ
- ↳ フォーラム利用者ガイド
- ↳ Apache OpenOffice
- ↳ OpenOffice.org CD/DVD
- ↳ OpenOffice.org 3 最新情報
- ↳ OpenOffice.org for Mac OSX 最新情報
- ↳ はじめての方はまずこちらへどうぞ
- ↳ はじめまして 自己紹介をどうぞ :)
- ↳ OpenOffice.org 3
- ↳ コミュニティの知っ得
- ↳ OOo CD, DVD, USB, OOoグッズ
- ↳ OOo 関連出版物および記事
- ↳ セットアップとトラブルシューティング
- ↳ Mac OSX
- ↳ Linux
- ↳ SUSE
- ↳ UBUNTU
- ↳ Debian
- ↳ Fedora
- ↳ Windows
- ↳ FreeBSD
- ↳ NetBSD
- ↳ Solaris
- ↳ テンプレート
- ↳ チュートリアル(指導書)
- ↳ OpenOffice.org 2 サポート
- ↳ OpenOffice.org 1.0, 1.1 サポート
- ↳ コミュニティーフォーラムに登録できない
- アプリケーション
- ↳ Writer
- ↳ テンプレートや高度な使い方
- ↳ Calc
- ↳ フォーミュラ(数式)やチャート(グラフ)
- ↳ Impress
- ↳ さまざまなオプション機能
- ↳ Draw
- ↳ Math
- ↳ Base
- ↳ エクステンション(拡張機能)
- カスタマイズと拡張
- ↳ マクロと UNO API
- ↳ UNO ブリッジ
- ↳ オートメーション (COM) Windows専用
- ↳ コードスニペット(便利な汎用コード)
- コミュニティー 一般的な話題やサイトについてはこちらにどうぞ
- ↳ フォーラム・モデレータ募集
- ↳ 地域フォーラム
- ↳ 架空岩手森県
- ↳ 架空陸前山田市
- ↳ 架空気仙広田町
- ↳ 自己紹介
- ↳ OpenOffice.org 3
- ↳ このサイトに関する意見
- 企業、団体、公共機関での利用
- ↳ 企業、公共機関、教育機関での利用
- ↳ ビジネス サービス提供者とユーザーの出会いの場
- ↳ ODF対応アプリケーション、システム
- テストフォーラム
- ↳ QA(品質保証)
- ↳ UX(ユーザーエクスペリエンス)
- ↳ 日本語プロジェクトホームページトップにフォーラム最新記事一覧を表示する試験