1
오디오 파일을 최대로 표준화하고 싶습니다. 오디오 정규화 코드가 맞습니까?
은이 코드를 사용하고, 그렇게하려면Dim iHighestDataValue As Integer
Dim iLowestDataValue As Integer
Dim i&
For i = 1 To dc.wavedatasize/2
Get #iFile, , DataValue(i) ' reads data value into array
If DataValue(i) > iHighestDataValue Then
iHighestDataValue = DataValue(i)
End If
If DataValue(i) < iLowestDataValue Then
iLowestDataValue = DataValue(i)
End If
Next
Dim sngVolumeLevel As Single
sngVolumeLevel = ((iHighestDataValue + (iLowestDataValue * -1))/2)/32767
거의 모든 파일에 대해 잘 작동하지만 하나 개의 파일에 대해, 마지막 줄에 실패합니다.
iHighestDataValue는 13445이고 iLowestDataValue는 -21940입니다.
마지막 줄에 뭔가 잘못 나온 것 같습니다. VB6에서이 오류를 올바르게 처리 할 수 없거나 오류가 발생했기 때문에 VB6에서만 발생하는 오류입니까? 내가 별도의 계산으로 마지막 줄을 넣어
, 그것을 잘 작동합니다 :
Dim sngHighest As Single
If iHighestDataValue > 32767 Then
sngHighest = 32767
Else
sngHighest = iHighestDataValue
End If
Dim sngLowest As Single
If iLowestDataValue < -32767 Then
sngLowest = -32767
Else
sngLowest = iLowestDataValue
End If
sngLowest = sngLowest * -1
Dim sngVolumeLevel As Single
sngVolumeLevel = (sngHighest + sngLowest)/2
sngVolumeLevel = (sngVolumeLevel/32767)
감사합니다!
PS
: 클리핑이 상당량 발생하기 때문에 정확하지이다Dim tem As Long
For i = 1 To dc.wavedatasize/2
tem = CLng(DataValue(i) * 1/sngVolumeLevel)
If tem > 32767 Then
tem = 32767 ' prevents integer overflow error
End If
If tem < -32767 Then
tem = -32767 ' prevents integer overflow error
End If
DataValue(i) = CInt(tem) ' changes data value
Next i
wh.riffdatasize = dc.wavedatasize + Len(wh) + Len(wf) 'Riff chunk size may be different
' beacause some input wave files may contain information chunk which is not written in output file
iFile = FreeFile
Kill uPath 'Delete the original/source file. We will overwrite it with the normalized version of this file
Open uPath For Binary As #iFile
Put #iFile, , wh ' writes the wave header
Put #iFile, , wf ' writes wave format
Put #iFile, , dc ' writes the 8 byte string "data" and wave dataa size
For i = 1 To dc.wavedatasize/2
Put #iFile, , DataValue(i) ' writes data value in ouput file
Next i
Close #iFile
놀라운, 감사합니다! – tmighty