在 python 中播放 .wav 文件的一部分

Lew*_*ick 7 python playback wave

是否可以在 Python 中播放 .wav 文件的特定部分?

我想要一个功能,可以从几秒钟play(file, start, length)开始播放音频文件,并在几秒钟后停止播放。这可能吗?如果可以,我需要什么库?filestartlength

ede*_*der 5

这是可能的,并且在 python 中很容易实现。

Pyaudio是一个不错的库,您可以使用它来播放音频!

首先,您需要解码音频文件(wav、mp3 等),这一步将音频数据转换为数字(短整型或 float32)。

您是否需要转换等效位置点的秒数以切断感兴趣位置的信号,为此,请将您的帧速率乘以您想要的秒数!

这是 wav 文件的一个简单示例:

import pyaudio
import sys
import numpy as np
import wave
import struct



File='ederwander.wav'
start = 12
length=7
chunk = 1024

spf = wave.open(File, 'rb')
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
p = pyaudio.PyAudio()

stream = p.open(format =
                p.get_format_from_width(spf.getsampwidth()),
                channels = spf.getnchannels(),
                rate = spf.getframerate(),
                output = True)


pos=spf.getframerate()*length

signal =signal[start*spf.getframerate():(start*spf.getframerate()) + pos]

sig=signal[1:chunk]

inc = 0;
data=0;


#play 
while data != '':
    data = struct.pack("%dh"%(len(sig)), *list(sig))    
    stream.write(data)
    inc=inc+chunk
    sig=signal[inc:inc+chunk]


stream.close()
p.terminate()
Run Code Online (Sandbox Code Playgroud)