2017-12-26 35 views
0

에서 오디오 파일을 재구성, 나는 오디오 파일의 stft을 계산하려면 :파이썬 : 간단한 실험으로 STFT

sample_rate, samples = wav.read(file) 

f, t, Zxx = stft(samples, sample_rate) 
_, reconstructed = istft(Zxx, sample_rate) 
padded_samples = np.zeros_like(reconstructed) 
padded_samples[:len(samples)] = samples 
print (np.sum(padded_samples - reconstructed)) 

출력 : -1.37309940428은. 꽤 작지 않아? samples은 모양이 (9218368,) 인 것을 감안할 때.

test_file = os.path.join(temp_folder, 'reconstructed.wav') 
wav.write(test_file, sample_rate, reconstructed) 

재구성 된 파일은 끔찍한 소리를냅니다. 원본은 간략하게 소리 아래에서들을 수 있습니다. 실수를했거나 단순히 STFT에서 오디오 파일을 복구하는 것이 불가능합니까?

오디오 파일을 어떤 종류의 처리 가능한 데이터로 변환 한 다음이를 다시 구성하는 방법에 대한 다른 제안이 있습니까? 오디오 파일을 처리하는 데 사용할 수있는 다른 종류의 데이터 구조는 무엇입니까?

감사합니다.

편집 :

워렌에 의해 제안 :

print (samples.shape) 
print (samples.dtype) 
print (reconstructed.dtype) 

출력 : WAV 파일을 기록 할 때

(9218368,) 
int16 
float64 

은 scipy 문서에 따르면 int로 입력을 떠 다른 의미를 가지고 . 나는 np.int16으로 재구성 된 캐스팅 시도 :

rounded_reconstructed = np.rint(reconstructed).astype(np.int16) 

test_file = os.path.join(temp_folder, 'reconstructed.wav') 
wav.write(test_file, sample_rate, rounded_reconstructed) 

결과는 원본과 거의 구분됩니다. 도와 주셔서 감사합니다.

+0

다음을 알려주십시오 :'samples.shape','samples.dtype','reconstructed.dtype'. –

답변

-1

Warren에 의해 제안 :

print (samples.shape) 
print (samples.dtype) 
print (reconstructed.dtype) 

출력 : WAV 파일을 기록 할 때 the scipy docsintfloat 입력에 따라

(9218368,) 
int16 
float64 

다른 의미를 가지고있다.

rounded_reconstructed = np.rint(reconstructed).astype(np.int16) 

test_file = os.path.join(temp_folder, 'reconstructed.wav') 
wav.write(test_file, sample_rate, rounded_reconstructed) 

결과는 원본과 거의 구별 : 나는 reconstructednp.int16에 캐스팅했습니다. 도와 주셔서 감사합니다.