大家有没有看过“一把十首”倒放变成“我是傻逼”视频?
我现在利用python的pyaudio进行验证一下。
自己录一段语音
import wave
import pyaudio
# 定义数据流块
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
# 录音时间
RECORD_SECONDS = 5
# 要写入的文件名
WAVE_OUTPUT_FILENAME = "ybss.wav"
# 创建PyAudio对象
p = pyaudio.PyAudio()
# 打开数据流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
# 开始录音
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
# 停止数据流
stream.stop_stream()
stream.close()
# 关闭PyAudio
p.terminate()
# 写入录音文件
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
播放&倒放
import pyaudio
import wave
import sys
#定义数据流块
chunk = 160
#只读方式打开wav文件
f = wave.open(r"ybss.wav","rb")
p = pyaudio.PyAudio()
#打开数据流
stream = p.open(format = p.get_format_from_width(f.getsampwidth()),
channels = f.getnchannels(),
rate = f.getframerate(),
output = True)
#读取数据
data = f.readframes(chunk)
pdata = data
mdata = data
#播放 & 倒放
while data != b'':
#stream.write(data)
#print(len(data))
pdata = pdata + data
mdata = data + mdata
data = f.readframes(chunk)
print("正放", len(pdata))
stream.write(pdata)
print("倒放", len(mdata))
stream.write(mdata)
#停止数据流
stream.stop_stream()
stream.close()
#关闭 PyAudio
p.terminate()
# 写入录音文件
frames = []
frames.append(pdata)
frames.append(mdata)
wf = wave.open(r"ybss_p.wav", 'wb')
wf.setnchannels(f.getnchannels())
wf.setsampwidth(f.getsampwidth())
wf.setframerate(f.getframerate())
wf.writeframes(b''.join(frames))
wf.close()
以上代码实现正放和倒放,可以体验一下是不是变成“我是傻b了”
附上音频感受一下:
为什么呢?好神奇!!
本文暂时没有评论,来添加一个吧(●'◡'●)