2012-03-06 1 views
1

sox를 ​​사용하여 변환 한 .dat 형식의 값은 정규화되지 않은 것 같습니다. 누군가 내가 잘못하고있는 것을 볼 수 있기를 바랍니다.sox를 ​​사용하여 .dat 형식으로 변환 한 값이 정규화되지 않은 것 같습니다.

this great SO post about sox and gnuplot에 설명 된 것과 비슷한 작업을하려고합니다. (Java에서 처리하기 위해 값을 보내므로 약간 다른 컨텍스트). 문제는 내 .dat 파일에서 "작은 값"을 얻는 반면, 맨 페이지에서는 -1과 1 사이에서 정규화된다고 말합니다.

sox 및 mp3 처리 패키지를 설치 한 후 다음을 수행합니다. 테스트 :

sox elevator.mp3 -c 1 -r 11000 elevator_mediumres.dat 
cat elevator_mediumres.dat |cut -c21-33 > elevator_mediumres_values_only.dat 
sort -n elevator_mediumres_values_only.dat > elevator_mediumres_values_only_sorted.dat 
# echo min $(head -1 elevator_mediumres_values_only_sorted.dat) max $(tail -1 elevator_mediumres_values_only_sorted.dat) 

이렇게하면 출력이 "min -0.48370361 max 9.1552734e-05"가됩니다. 내가 dat 대신 wav에 첫 번째 명령을 내리면 wav 파일이 정상적으로 들립니다. (Aerosmith의 "Love in a elevator"의 11kHz 모노로도 가능합니다.) 물론 수동으로 데이터를 정상화 할 수는 있지만 더 좋고 더 직접적인 방법이 있기를 바라고 있습니다.

덕분에,

-S-

+0

수동으로 Java로 정규화를 끝내었지만, 누가 더 나은 방법을 추가 할 수 있는지에 관심이있었습니다. – Sondre

답변

1

당신은 파일의 주요 DC-변화를 갖고있는 것 같다. 데이터로 수행해야하는 작업에 따라 정상화하기 전에 데이터를 제거해야 할 수 있습니다. sox을 사용하려면 먼저 dc-shift를 결정하십시오.

sox infile.wav normalized.wav dcshift $((-dc_shift)) gain -n 

sox 명령 행은 다음과 같이 구축된다 :

sox IN OUT EFFECTS 

dc_shift=$(sox infile.wav -n stats 2>&1 | awk '/DC offset/ { print $3 }') 

지금 입력 파일에 DC-변화와 정상화를 적용 : 여기 sox, awkbash 하나 개의 방법이있다

각 효과가 순차적으로 적용됩니다.

관련 문제