私は pyaudio を使ってボイスマスカーを作ろうとしています。今の設定では、音を入力し、その場でピッチを変更し、チャンクアウトするだけです。最初と最後のパートはうまくいっているし、ピッチの変更に近づいていると思う...「考える」ことを強調する。
残念ながら、私は自分が扱っているデータの種類と、それを自分が望む方法で正確に操作する方法にあまり精通していません。私は audioop のドキュメントを調べましたが、必要なものが見つかりませんでした (間違いなく使用できるものがいくつかあると思いました)。私が求めているのはおそらく...
これらのオーディオ フレームでデータがどのようにフォーマットされているか。
フレームのピッチを変更するにはどうすればよいですか (可能であれば)、またはそのように動作するのに近いですか?
import pyaudio
import sys
import numpy as np
import wave
import audioop
import struct
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 41000
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)
swidth = 2
print "* recording"
while(True):
data = stream.read(chunk)
data = np.array(wave.struct.unpack("%dh"%(len(data)/swidth), data))*2
data = np.fft.rfft(data)
#MANipulation
data = np.fft.irfft(data)
stream.write(data3, chunk)
print "* done"
stream.stop_stream()
stream.close()
p.terminate()