[DRUMSOFT 旧BBS][全部]

文字から音を作るスレ

utaは最近pythonに凝っているらしいので、その過程を実況中継します。巷ではcircuit bending なんていうそこらへんの安い楽器の電子回路をメクラ滅法弄って、ステキな音を出すっていうプロジェクトが流行っているらしい。http://www.youtube.com/results
2 uta 2006-05-13 22:47 permalink
すみません下の文章からして壊れてますね。
でも間違っちゃったっていいじゃないか!
すぐ直せば!!カッタントライ!
まずpythonのインストールとかその辺は省いちゃうよ、
この文章の対象であるhrkunのOSXではデフォルトで入ってるはずだぜ。

というわけで第1回、まずはsin波を出してみようの会。
こんなもん巷のソフトシンセつかえばすぐできるのに
あえてテキストで書き出して見ようの段。


import os
from math import *
from struct import *
filename = "sine.txt"

samples = 441000
samp_rate = 44100
amplitude = 0.5
freq = 440

f = open(filename,'wb')
def generate_sine(phase):
sinwave = amplitude*sin(freq*2*pi*phase/samp_rate)
return sinwave

for i in range(samples):
f.write(pack("f",generate_sine(i)))

f.close()

これを実行するとsine.txtというファイルが同一フォルダ
に出来上がるのでこれを生データを読み込める波形ソフトで読み込んでお好きな形式に変換するとよいでしょう。
audacityだとプロジェクトファイル->ロ-(raw)データの読み込みというところでファイルを読んで32bit floatを選んでやればよいのでないかな?
スクリプト自体でwavデータなどへの変換はそのうちやろう。そしてpythonの細かい説明は全部省いておもしろいところだけ注釈だ!
まずはココであるファイルをバイナリ書き込みモードで開いてやる。ファイル操作関連はosモジュールを使う。
f = open(filename,'wb')
そしてバイナリデータを書き込む際には
structモジュールのpackをつかうのだけれども、
このpackモジュールが結構おもしろい。
第一引数の文字によって変数のビット幅を変えられる。つまりこれの設定しだいで簡単にローファイにしたりハイファイにしたりできるわけだ!!!

次回はこれで遊んでみようの階。





[DRUMSOFT 旧BBS][全部]