學習軌道
/
Python
Python
/
練習
/
音階產生器
音階產生器

音階產生器

中等

說明

半音階

西方音樂的音階都是以半音階(12 個音)為基礎。 這個音階可以用下列這組音高來表示:

A, A♯, B, C, C♯, D, D♯, E, F, F♯, G, G♯

某個升音(以♯標示)也可以表示成它上方那個音的降音(以♭標示),所以半音階也可以寫成這樣:

A, B♭, B, C, D♭, D, E♭, E, F, G♭, G, A♭

大調、小調音階以及各種調式都是這十二個音高集合的子集。 它們各有七個音,稱為全音階。 這些音階中的音要寫成升音還是降音,取決於主音(起始音)。 下表列出某個主音會採用降音還是升音的表示法:

調號 大調 小調
自然 C a
升 G, D, A, E, B, F♯ e, b, f♯, c♯, g♯, d♯
降 F, B♭, E♭, A♭, D♭, G♭ d, g, c, f, b♭, e♭

請注意,依照一般樂理慣例,自然音「C」和「a」在上行時採用升音音階,下行時採用降音音階。 在本練習的範圍內,音階只會上行。

任務

給定一個主音,產生從該主音開始的 12 音半音階。

  • 適當地平移基準音階,讓回傳的 12 個音從指定的主音開始。
  • 針對指定的主音,判斷音階應該以升音還是降音回傳。
  • 無論指定的主音是大寫還是小寫,回傳的所有音都要用大寫字母(降音用的b除外)。

全音階

全音階,以及所有其他由半音階衍生出來的音階,都是建立在音程之上。 音程是兩個音高之間的距離。

最簡單的音程存在於兩個相鄰的音之間,稱為「半音」,或「小二度」(有時寫成小寫的「m」)。 兩個音之間若還夾著一個音,這樣的音程稱為「全音」或「大二度」(寫成大寫的「M」)。 全音階只用這兩種相鄰音之間的音程構成。

非全音階可以包含其他音程。 「增二度」音程寫成「A」,中間夾著兩個音(例如從 A 到 C,或從 D♭ 到 E),或者是一個「全音」加一個「半音」。 另外還有更小和更大的音程,但不會出現在這個練習中。

任務

給定一個主音和一組音程,產生從該主音開始、並依照指定音程模式的音階。

這和產生半音階很像,差別在於不是回傳 12 個音,而是對 N 個音程回傳 N+1 個音。 第一個音永遠是給定的主音。 接著,對模式中的每個音程,從前一個音開始,跳過該音程所表示的音數,來決定下一個音。

例如,從 G 開始並使用七個音程 MMmMMMm,會得到下列八個音:

音 說明
G 主音
A M 表示從 G 往上一個全音,跳過 G♯
B M 表示從 A 往上一個全音,跳過 A♯
C m 表示從 B 往上一個半音,不跳過任何音
D M 表示從 C 往上一個全音,跳過 C♯
E M 表示從 D 往上一個全音,跳過 D♯
F♯ M 表示從 E 往上一個全音,跳過 F
G m 表示從 F♯ 往上一個半音,不跳過任何音
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 音階產生器 了嗎?

註冊 Exercism,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。