見出し画像

音と周波数

音と周波数について

音は、空気や他の媒体(水や固体など)中の圧力変化によって伝わる振動です。音は波形で表現され、周波数、振幅、位相などの特性を持ちます。

周波数は、波形が1秒間に繰り返される回数を表す指標で、単位はヘルツ(Hz)です。周波数が高いほど、音のピッチが高くなります。例えば、人間の可聴範囲はおおよそ20 Hzから20,000 Hzまでで、この範囲内の周波数の音を聞くことができます。

音楽では、特定の周波数の音を音階(ド、レ、ミなど)に割り当てて、メロディーやハーモニーを作成します。

周波数と十二平均律

十二平均律(12平均律、12-TET)は、音楽の調律システムの一つで、1オクターブを12等分した音階に基づいています。西洋音楽で一般的に使われている調律方法であり、ピアノ、ギター、シンセサイザーなどの楽器にも広く採用されています。

十二平均律では、1オクターブ内の各隣接する音の周波数比は同じで、2の12乗根(2^(1/12) ≈ 1.05946)です。この比率により、1オクターブ内の12の音は等間隔で配置され、どのキーで演奏しても同じ音程関係が保たれます。これにより、曲を異なるキーに簡単に転調できるようになりました。

例として、西洋音楽で基準とされるA4の周波数は440 Hzです。十二平均律により、A4の1つ上の音であるA#4(またはB♭4)の周波数は、440 Hz × 2^(1/12) ≈ 466.16 Hzになります。同様に、A4の1オクターブ上の音であるA5の周波数は、440 Hz × 2^(12/12) = 440 Hz × 2 = 880 Hzになります。

十二平均律は、他の調律システム(純正律、五度圏律など)と比較して、すべての音程が完全には整合しないという欠点があります。しかし、その単純さと転調の容易さから、現代の音楽シーンで広く受け入れられている調律システムとなっています。

base = 440 # A
r12 = 2**(1/12) # 十二平均律での周波数比
Pname = [base/(r12**9),base/(r12**7),base/(r12**5), base/(r12**4), base/(r12**2),base,base*(r12**2),base*(r12**3)]

音のテンポについて

音楽のテンポは、曲の速さやリズムのペースを表す指標で、一般的に「beats per minute」(BPM)という単位で表されます。BPMは、1分間に何回のビート(拍子)があるかを示します。例えば、60 BPMの曲では、1秒間に1回のビートがあります。テンポは音楽の感情表現や雰囲気を大きく左右する重要な要素です。

テンポは、通常、楽譜の冒頭にイタリア語で表記されることが多いです。例えば、「アダージョ」(Adagio)は、ゆっくりとしたテンポで演奏することを意味し、BPMは大体 56 - 76 の範囲になります。「アレグロ」(Allegro)は、速いテンポで演奏することを意味し、BPMは大体 120 - 168 の範囲になります。さらに「プレスト」(Presto)は、非常に速いテンポで演奏することを意味し、BPMは大体 168 - 200 の範囲になります。

BPM = 100  # Beats per minute
N4 = 60/BPM
N1, N2, N8 = 4*N4, 2*N4, N4/2

一般的なサンプリングレートの例

CD音質:44.1 kHz(44,100 サンプル/秒) - 音楽CDの標準的なサンプリングレートです。 DVD音質:48 kHz(48,000 サンプル/秒) - 映画やビデオ制作でよく使われるサンプリングレートです。 高解像度オーディオ:96 kHzまたは192 kHz - 高品質な音楽制作やオーディオファイル向けのサンプリングレートです。

サンプリングレートは、デジタル音響の品質に大きく影響しますが、ビット深度(サンプルあたりのビット数)や圧縮方式と組み合わせて、総合的な音質やデータ量が決まります。

SRATE = 44100  # Sampling rate
def makeSineWave(freq, length, amp):
    nsample = np.arrange(int(length*SRATE))
    return amp*np.sin((2*np.pi*float(freq)/SRATE)*nsample)

sounddeviceの使い方

以下、pythonのsounddeviceを使用して、ドとド・ミ・ソの和音を作ってみました。

「ド」の例

import numpy as np
import sounddevice as sd

def play_wave(stream, samples):
    stream.write(samples.astype(np.float32))

SRATE = 44100  # サンプリングレートを適切な値に設定してください
stream = sd.OutputStream(samplerate=SRATE, channels=1, dtype='float32', blocksize=1024)
stream.start()

# 以下にコードを続けて、`play_wave`関数を使用して音声を再生してください。
def makeSineWave(freq, length, amp):
    nsample = np.arange(int(length*SRATE))
    return amp*np.sin((2*np.pi*float(freq)/SRATE)*nsample)

play_wave(stream, makeSineWave(Pname[0], N4, 1.0))

「ドミソ」の和音

 #ドミソの和音 
def makeChord(t):
    nsample = np.arange(int(t*SRATE))
    c = np.sin((2*np.pi*Pname[0]/SRATE)*nsample )
    e = np.sin((2*np.pi*Pname[2]/SRATE)*nsample )
    g = np.sin((2*np.pi*Pname[4]/SRATE)*nsample )
    chd = (c+e+g)/np.max(c+e+g) # normalization
    return chd

play_wave(stream, makeChord(2))

簡単な音を出すことはできましたが、音楽にするには、まだまだ訓練が必要そうです。


参考&おすすめの書籍は以下:

Pythonコンピュータシミュレーション入門 人文・自然・社会科学の数理モデル

良質な記事をお届けするため、サポートしていただけると嬉しいです!英語論文などの資料取り寄せの費用として使用します。