「Pythonではじめる音のプログラミング」を読み始めた

お久しぶりです。

最近全然記事を書けてなかったので思い出したように記事を書いてみます。

最近音のプログラミングに興味を持ったので「Pythonではじめる音のプログラミング ーコンピュータミュージックの信号処理ー」を読み始めました。

元々興味あって買っておいた書籍ではあったのですが、どこかで諦めてやめてしまっていたので読み始めた次第。

そこで2章、3章まで読んでみたのですが、ライブラリの関係かサンプルコードがうまく動かない・・・?

なのでChatGPTを利用して動くように直してもらいました。

import numpy as np
import wave
import struct

# サンプリングレート、持続時間の設定
fs = 44100
duration = 1

# サイン波の生成
length_of_s = int(fs * duration)
s = np.zeros(length_of_s)
for n in range(length_of_s):
    s[n] = 0.5 * np.sin(2 * np.pi * 1000 * n / fs)

# フェードインとフェードアウト
for n in range(int(fs * 0.01)):
    s[n] *= n / (fs * 0.01)
    s[length_of_s - n - 1] *= n / (fs * 0.01)

# マスタートラックの生成
length_of_s_master = int(fs * (duration + 2))
s_master = np.zeros(length_of_s_master)
offset = int(fs * 1)
for n in range(length_of_s):
    s_master[offset + n] += s[n]

# NumPy配列を16ビットの整数に変換
s_master_int = np.int16(s_master * 32767)

# WAVファイルの書き出し
with wave.open('p2_1(output).wav', 'w') as wf:
    wf.setnchannels(1)  # モノラル
    wf.setsampwidth(2)  # サンプルサイズ(16ビット = 2バイト)
    wf.setframerate(fs)  # サンプリングレート

    # データをバイナリ形式に変換して書き出し
    for sample in s_master_int:
        wf.writeframes(struct.pack('h', sample))

もともと書かれていた最後の

wave_write_16bit_mono(fs, s_master.copy(), 'p2_1(output).wav') 

がうまく通らなかったので書き直してみた次第。

修正後(ChatGPTにお願いした後)の個所はここ。

# WAVファイルの書き出し
with wave.open('p2_1(output).wav', 'w') as wf:
    wf.setnchannels(1)  # モノラル
    wf.setsampwidth(2)  # サンプルサイズ(16ビット = 2バイト)
    wf.setframerate(fs)  # サンプリングレート

    # データをバイナリ形式に変換して書き出し
    for sample in s_master_int:
        wf.writeframes(struct.pack('h', sample))

元々の部分をもはや覚えていないですが、音は鳴っているのでよしとしてこのまま読み進めてみようかと思います。

今年の目標としてはChatGPTを代表するようなテキスト生成AIを使って楽曲を作ってみるということに興味を持っていろいろ試してみたいと思います。(楽曲生成AIを使うわけではなく)

ChatGPTだけ使ってどこまで理解してどんな感じの楽曲を作ってくれるのかという感じですね。

今までほったらかしにしてしまっていたこのブログですが、とりあえずなにかしら更新していければという所存です。

短めですが、今年初めの取っ掛かりとして今日はこのへんで。

それではー

コメント

タイトルとURLをコピーしました