簡體   English   中英

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

[英]Play a part of a .wav file in python

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

我想要一個函數play(file, start, length) ,該函數從start幾秒鍾start播放音頻file ,並在length幾秒鍾后停止播放。 這可能嗎?如果可以,我需要什么庫?

這是可能的,並且在python中可能很容易。

Pyaudio是一個不錯的庫,您可以用來播放音頻!

首先,您需要解碼音頻文件(wav,mp3等),此步驟將音頻數據轉換為數字(short int或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()

我知道這是一個相當老的問題,但是我只需要一模一樣的東西,對我來說,愛德華德的例子似乎有點太復雜了。

這是我的簡短(和評論)解決方案:

import pyaudio
import wave

# set desired values
start = 7
length = 3

# open wave file
wave_file = wave.open('myWaveFile.wav', 'rb')

# initialize audio
py_audio = pyaudio.PyAudio()
stream = py_audio.open(format=py_audio.get_format_from_width(wave.getsampwidth()),
                       channels=wave_file.getnchannels(),
                       rate=wave_file.getframerate(),
                       output=True)

# skip unwanted frames
n_frames = int(start * wave_file.getframerate())
wave_file.setpos(n_frames)

# write desired frames to audio buffer
n_frames = int(length * wave_file.getframerate())
frames = wave_file.readframes(n_frames)
stream.write(frames)

# close and terminate everything properly
stream.close()
py_audio.terminate()
wave_file.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM