python音频加速_python - 使用python减慢口头音频(不是来自mp3 / wav) - 堆栈内存溢出...

如评论中所述,只需增加或减少采样频率/帧频,就可以加快音频的速度。 尽管如果您打算通过麦克风实时进行录制,则想法之一是以几秒钟的块进行录制,播放慢下来的音频,然后再次进行录制。

这是一个使用sounddevice的示例,这基本上是我在这里回答的略微修改。 我们循环录制音频4秒钟,共3次,然后立即以帧频偏移量播放(大于1表示加速,小于1表示减速)。 在开始新块之前,音频播放完成需要增加1秒的延迟。

import sounddevice as sd

import numpy as np

import scipy.io.wavfile as wav

import time

fs=44100

duration = 4 # seconds

#fs_offset = 1.3 #speedup

fs_offset = 0.8 #speedup slow down

for count in range(1,4):

myrecording = sd.rec(duration * fs, samplerate=fs, channels=2, dtype='float64')

print "Recording Audio chunk {} for {} seconds".format(count, duration)

sd.wait()

print "Recording complete, Playing chunk {} with offset {} ".format(count, fs_offset)

sd.play(myrecording, fs * fs_offset)

sd.wait()

print "Playing chunk {} Complete".format(count)

time.sleep(1)

输出:

$python sdaudio.py

Recording Audio chunk 1 for 4 seconds

Recording complete, Playing chunk 1 with offset 0.8

Playing chunk 1 Complete

Recording Audio chunk 2 for 4 seconds

Recording complete, Playing chunk 2 with offset 0.8

Playing chunk 2 Complete

Recording Audio chunk 3 for 4 seconds

Recording complete, Playing chunk 3 with offset 0.8

Playing chunk 3 Complete

这是一个使用PyAudio从麦克风录音而pydub进行播放的示例。 尽管您也可以使用pyaudio屏蔽线功能来修改传出音频。 我使用了pydub,因为您引用了基于pydub的解决方案。 这是这里的一段代码。

import pyaudio

import wave

from pydub import AudioSegment

from pydub.playback import play

import time

FORMAT = pyaudio.paInt16

CHANNELS = 2

RATE = 44100

CHUNK = 1024

RECORD_SECONDS = 4

#FRAMERATE_OFFSET = 1.4 #speedup

FRAMERATE_OFFSET = 0.7 #slowdown

WAVE_OUTPUT_FILENAME = "file.wav"

def get_audio():

audio = pyaudio.PyAudio()

# start Recording

stream = audio.open(format=FORMAT, channels=CHANNELS,

rate=RATE, input=True,

frames_per_buffer=CHUNK)

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):

data = stream.read(CHUNK)

frames.append(data)

# stop Recording

stream.stop_stream()

stream.close()

audio.terminate()

#save to file

waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')

waveFile.setnchannels(CHANNELS)

waveFile.setsampwidth(audio.get_sample_size(FORMAT))

waveFile.setframerate(RATE * FRAMERATE_OFFSET)

waveFile.writeframes(b''.join(frames))

waveFile.close()

for count in range(1,4):

print "recording segment {} ....".format(count)

frame_array = get_audio()

print "Playing segment {} .... at offset {}".format(count, FRAMERATE_OFFSET)

audio_chunk = AudioSegment.from_wav(WAVE_OUTPUT_FILENAME)

print "Finished playing segment {} .... at offset {}".format(count, FRAMERATE_OFFSET)

play(audio_chunk)

time.sleep(1)

输出:

$python slowAudio.py

recording segment 1 ....

Playing segment 1 .... at offset 0.7

Finished playing segment 1 .... at offset 0.7

recording segment 2 ....

Playing segment 2 .... at offset 0.7

Finished playing segment 2 .... at offset 0.7

recording segment 3 ....

Playing segment 3 .... at offset 0.7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值