サウンドプログラミング2021-05-04
サウンドプログラミングをやってみる。
前提
いろいろ簡単にやりたいのでPythonで。
環境
やったこと
サンプルを触る
python-sounddevice.readthedocs.io
- Play a Sound File
- 天才。ndarrayを渡して秒で終わり
- Play a Very Long Sound File
- 天才。コールバック形式もお手のもの
- Play a Sine Signal
- 天才。パラメーターで周波数設定できる優しさも好き
スロー再生
- Play a Sound Fileをいじった
- 元々のdataの倍の長さのarrayを作る。それをlongfileとする
- longfileにdataを重複させながら入れる
- 0,0,1,1,2,2,3,3,4,4, ...みたいに
- 再生すると半分の速度になる
# こうなっていたものを data, fs = sf.read(args.filename, dtype='float32') sd.play(data, fs, device=args.device) # こうした data, fs = sf.read(args.filename, dtype='float32') # expand start longdata = np.empty( (len(data)*2, 2), dtype='float32') for i, d in enumerate(data): longdata[2*i] = d longdata[2*i + 1] = d # expand end # sd.play(data, fs, device=args.device) sd.play(longdata, fs, device=args.device)
簡単だ。もっとクレバーな方法がありそうだがまあいいだろう。
さて次にやりたいことは…と固まってしまった。ソシャゲみたいに次やることが明確だったら楽なのに。
逆に考えると、次にやることをあらかじめ用意しておかないと、人間って動けないんだなと感じた。
ソシャゲの遊ばせ方はうまい。それを自分のやりたいことに応用できれば。
さて、明日やりたいこと
- リアルタイムで速度を変化させる
- ひとまずwaveを全部メモリに置いてループ再生する
- キーボードの左右で速さを変える
- 逆再生もできる
- コールバックごとに再生速度を変えればいけそう
- リサンプリング検討
- 直前のやつではよくない。平均をとる