Karplus-Strong 알고리즘을 구현하려고합니다.Python, Numpy 배열 및 WAVE 모듈을 사용하여 WAV 파일 작성
오디오 (y, rate = Fs)을 사용하여 Jupyter Notebook을 통해 수집 된 numpy 배열 (guitar accord를 나타내는)이 모두 잘 보입니다.
불행히도 NumPy와 배열 작성 : WAVE 모듈을 이용하여 WAV 파일로 Y하면 (다음 Python 코드를 사용하여) 올바르지 않습니다 Y의 각 요소
<type 'numpy.float64'>
noise_output = wave.open('k-s.wav', 'w')
noise_output.setparams((1, 4, Fs, 0, 'NONE', 'not compressed'))
for i in range(0, len(y)):
value = y[i]
packed_value = struct.pack('f', value)
noise_output.writeframes(packed_value)
noise_output.close()
이다
WAV 파일을 올바르게 쓰려면 쓰기 루프를 어떻게 수정해야합니까?
문제에 대한 추가 정보 WAV에 쓰기 전에, y를 배열의 첫 번째 요소는 다음과 같습니다
[ 0.33659756 0.33659756 -0.43915295 -0.87036152 1.40708988 0.32123558
-0.6889402 1.9739982 -1.29587159 -0.12299964 2.18381762 0.82228042
0.24593503 -1.28067426 -0.67568838 -0.01843234 -1.830472 1.2729578
-0.56575346 0.55410736]
WAV 파일에 대한 요소를 작성 후, WAV 파일을 닫고 다시 그것을 읽고, 나는 수집의 첫 번째 20 개 요소에 대해이있어 배열 :
[ 1051481732 1051481732 -1092560728 -1084305405 1068768133 1050966269
-1087349149 1073523705 -1079648481 -1107564740 1074512811 1062371576
1048303204 -1079775966 -1087571478 -1130954901 -1075163928 1067642952
-1089415880 1057872379]
플로트 데이터를 정수로 변환하고 Little Endian으로 패킹해야합니다. –
어떻게 정수로 변환 하시겠습니까? 일부 스케일링 또는? 플로트 수는 1에 가깝기 때문에 스케일링이 필요할 수도 있습니다. @ PM2Ring – mir0soft
예, 크기를 조정해야합니다. 부호가있는 16 비트 정수를 사용하는 것이 좋으므로 부동 소수점을 '-2 ** 15