-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwav.py
69 lines (51 loc) · 1.7 KB
/
wav.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from scipy.io.wavfile import read, write
from scipy.fftpack import rfft, irfft
from numpy.fft import hfft, ihfft, fft, ifft
import numpy as np
import math
import wave
import soundfile as sf
def best_length_fft(n):
return int(int(n/2)*2)
#return math.pow(2, max(factorint(n)))
def loadfft(wavfile):
rate, input = read(wavfile)
transformed_raw = np.array(input, dtype=np.float32)
return {
"raw": transformed_raw,
"rate": rate
}
def savefft(wavfile, wavobj, filtered):
transformed_raw = wavobj['raw']
rate = wavobj['rate']
write(wavfile, rate, np.array(transformed_raw, dtype=np.int16))
def loadfft2(wav):
return loadfft(wav)
def savefft2(wav, wavobj, filtered):
return savefft(wav, wavobj, filtered)
# Returns the file object in complex64
def get_wav(path):
wav = wave.open(path, 'rb')
rate, data = read(path)
results={}
results['rate']=rate
results['channels']=wav.getnchannels()
results['sampwidth']=wav.getsampwidth()
results['framerate']=wav.getframerate()
results['nframes']=wav.getnframes()
results['compname']=wav.getcompname()
#processed = np.array(data).astype(np.int16, copy=False)
processed = sf.read(path)[0]
results['data']=processed
return results
def save_wav(in_wav, path):
print("Saving to ", path)
wav = wave.open(path, 'wb')
wav.setnchannels(in_wav['channels'])
wav.setsampwidth(in_wav['sampwidth'])
wav.setframerate(in_wav['framerate'])
wav.setnframes(in_wav['nframes'])
wav.setcomptype('NONE', 'processed')
#processed = np.array(in_wav['data'], dtype=np.int16)
#wav.writeframes(processed)
sf.write(path, in_wav['data'], in_wav['rate'])