Доброго времени суток!
Хочу задать следующий вопрос: Можно ли (и если можно, то как) узнать продолжительность WAV-файла? По поиску не нашел, может и смотрел криво, если что не судите слишком строго . Спасибо.
Private Type WAVEFORMAT
wFormatTag As Integer
nChannels As Integer
nSamplesPerSec As Long
nAvgBytesPerSec As Long
nBlockAlign As Integer
nBitsPerSample As Integer
End Type
Public Function GetWaveInfo(FileName As String, Optional Channels As Long, Optional Freq As Long, Optional BytePerSec As Long, Optional fInfo As String, Optional Bits As Long) As Byte
Dim F As Long, L As Long, S As String, fPos As Long, W As WAVEFORMAT
F = FreeFile
Open FileName For Binary Access Read As F
S = Input$(4, F)
If Not S = "RIFF" Then Exit Function
fPos = 5
Get F, fPos, L
fPos = fPos + 4
fPos = fPos + 4 'WAVE
fPos = fPos + 4 'fmt_
Get F, fPos, L
fPos = fPos + 4
Get F, fPos, W
Channels = W.nChannels
Freq = W.nSamplesPerSec
BytePerSec = W.nAvgBytesPerSec
Select Case W.nBitsPerSample
Case 8, 16, 32
Bits = W.nBitsPerSample
End Select
fInfo = GetFormatInfo(W.wFormatTag)
Close F
GetWaveInfo = 1
End Function
Private Function GetFormatInfo(code As Integer) As String
Select Case code
Case 1: GetFormatInfo = "Windows PCM"
Case 2: GetFormatInfo = "Microsoft ADPCM"
Case 6: GetFormatInfo = "a-Law"
Case 7: GetFormatInfo = "u-Law"
Case 10: GetFormatInfo = "OKI ADPCM"
Case 11: GetFormatInfo = "IMA ADPCM"
Case 12: GetFormatInfo = "MediaSpace ADPCM"
Case 13: GetFormatInfo = "Sierra ADPCM"
Case 14: GetFormatInfo = "GSM 7.23 ADPCM"
Case 49: GetFormatInfo = "GSM 6.10"
Case 64: GetFormatInfo = "GSM 7.21 ADPCM"
Case 65: GetFormatInfo = "GSM 7.28 CELP"
Case 80: GetFormatInfo = "MPEG"
Case 85: GetFormatInfo = "MPEG Layer 3 <MP3>"
Case 96: GetFormatInfo = "Cirrus"
Case 98: GetFormatInfo = "Voxvare"
Case 100: GetFormatInfo = "GSM 7.26 ADPCM"
Case 101: GetFormatInfo = "GSM 7.23 ADPCM"
Case 353: GetFormatInfo = "DivX WMA V2"
End Select
End Function
AD'onis писал(а):Спасибо за ответы. Но ведь есть же более простые способы? Каким образом стандартная "звукозапись" узнает длительность файла?
Ну, предположим, что файл сжат PCM, 22 050 кГц, 16 бит, стерео. Т.е. имеем конкретное качество. Ведь можно же точно узнать его длительность вплоть до миллисекунд. Я конечно понимаю, что и это выход, но хотелось бы конкретно
З.Ы. А все равно спасибо за ответы и код
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 94