python-sounddevice 录制和播放语音

python-sounddevice 录制和播放语音,第1张

播放语音
import sounddevice as sd
import soundfile as sf
import threading


event = threading.Event()

data, fs = sf.read("test.wav", always_2d=True)

current_frame = 0

def callback(outdata, frames, time, status):
    global current_frame
    if status:
        print(status)
    chunksize = min(len(data) - current_frame, frames)
    outdata[:chunksize] = data[current_frame:current_frame + chunksize]
    if chunksize < frames:
        outdata[chunksize:] = 0
        raise sd.CallbackStop()
    current_frame += chunksize

stream = sd.OutputStream(
    samplerate=fs, device=None, channels=data.shape[1],
    callback=callback, finished_callback=event.set)
with stream:
    event.wait()  # Wait until playback is finished
        


录制语音
import queue
import sys

import sounddevice as sd
import soundfile as sf



q = queue.Queue()


def callback(indata, frames, time, status):
    """This is called (from a separate thread) for each audio block."""
    if status:
        print(status, file=sys.stderr)
    q.put(indata.copy())


# soundfile expects an int, sounddevice provides a float:
samplerate = 16000
channels = 1
# Make sure the file is opened before recording anything:
with sf.SoundFile("test.wav", mode='w', samplerate=samplerate,channels=channels) as file:
    with sd.InputStream(samplerate=samplerate, device=None,channels=channels, callback=callback):
        print('#' * 80)
        print('press Ctrl+C to stop the recording')
        print('#' * 80)
        while True:
            file.write(q.get())

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/725887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存