Главная страницаОбратная связьКарта сайта

Получаем информацию о WAVE-файле



'Этот код получает информацию о .wav-файле, такую как частота
'сэмплирования, моно/стерео и т.п. и заносит все это в структуру. Самое
'интересное, что этот пример не использует DirectSound, он вообще ничего не
'использует кроме внутренних функций VisualBasic.
'Информацию из .wav-файла программа добывает не с помощью каких-либо
'API, а основываясь на формате RIFF, просматривает заголовок файла и заносит
'содержащиеся там данные в понятную программисту структуру
'Это константы формата WAVE. Тип n, Mono/Stereo, 8/16 битное сэмплирование

Const WAVE_FORMAT_1M08 = &H1
Const WAVE_FORMAT_1M16 = &H4
Const WAVE_FORMAT_1S08 = &H2
Const WAVE_FORMAT_1S16 = &H8
Const WAVE_FORMAT_2M08 = &H10
Const WAVE_FORMAT_2M16 = &H40
Const WAVE_FORMAT_2S08 = &H20
Const WAVE_FORMAT_2S16 = &H80
Const WAVE_FORMAT_4M08 = &H100
Const WAVE_FORMAT_4M16 = &H400
Const WAVE_FORMAT_4S08 = &H200
Const WAVE_FORMAT_4S16 = &H800

'Двоичное представление строк
Const RIFF_ID = 1179011410
Const RIFF_WAVE = 1163280727
Const RIFF_FMT = 544501094

'Типичный заголовок простого WAVE-файла в формате RIFF
Private Type WAVInfo
Riff_Format As Long
chunk_size As Long
ChunkID As Long
fmt As Long
Wave_Format As Integer
Channels As Integer '0 = mono, 1 = stereo
SamplesPerSecond As Long
AverageBytesPerSecond As Long '11.025kHz, 22.05kHz, итп
BlockAlign As Integer 'Размер блоков для низкоуровнего проигрывания
End Type

'А вот и сама функция, получающая информацию
Private Function GetWaveInfo(ByVal filename As String, ByRef w As WAVInfo) As Boolean
Dim ff As Integer
ff = FreeFile
On Error GoTo ehandler
Open filename For Binary Access Read As #ff
On Error GoTo ehandler_fo
Get #ff, , w
Close #ff
On Error GoTo ehandler
If w.Riff_Format = RIFF_ID And w.ChunkID = RIFF_WAVE And w.fmt = RIFF_FMT Then
GetWaveInfo = True
Else
GetWaveInfo = False
End If
Exit Function
ehandler_fo:
Close #ff
ehandler:
GetWaveInfo = False
End Function

'Вот пример использования функции
Private Sub Form_Click()
Dim rinfo As WAVInfo
Dim target As String

tarGet = "c:\windows\media\tada.wav" 'Замените на фаш файл
If GetWaveInfo(tarGet, rinfo) Then
MsgBox "Sample Rate" & rinfo.AverageBytesPerSecond
'Добавьте сюда вашу обработку полученной информации
End If
End Sub


Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация программирование на Visual Basic - "Получаем информацию о WAVE-файле", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2024 Дискета.info