栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-sounddevice 录制和播放语音

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-sounddevice 录制和播放语音

播放语音
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())
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822618.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号