Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Play a part of a .wav file in python

Is it possible to play a certain part of a .wav file in Python?

I'd like to have a function play(file, start, length) that plays the audiofile file from start seconds and stops playing after length seconds. Is this possible, and if so, what library do I need?

like image 550
Lewistrick Avatar asked Sep 10 '13 14:09

Lewistrick


1 Answers

this is possible and can be easy in python.

Pyaudio is a nice library and you can use to play your audio!

First do you need decode the audio file (wav, mp3, etc) this step convert audio data in numbers(short int or float32).

Do you need convert the seconds in equivalent position point to cut the signal in the position of interest, to do this multiply your frame rate by what seconds do you want !

Here one simple example for wav files:

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()
like image 91
ederwander Avatar answered Sep 29 '22 09:09

ederwander