Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файл в бинарном режиме, Считывание в буфер 
:(
    Опции темы
koltpiton
Дата 8.2.2014, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.2.2014

Репутация: нет
Всего: нет



Здравствуйте! Нужна помощь. В бейсике не силен. На VB6 нужно:
1. определить буфер размером в 320 байт.
2. открыть файл на чтение в бинарном режиме
3. считать из файла  320 байт.
3.1 сделать задержку на 1 сек после чего очистить буфер и считать следующие 320 байт 
и так до конца файла.

шарюсь в интернете уже несколько дней, на VB6 ни чего не нашел. Будте добры, покажите на примере как это делается.

PM MAIL   Вверх
TheTrick
Дата 8.2.2014, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



WriteFile
PM MAIL WWW Skype   Вверх
koltpiton
Дата 8.2.2014, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.2.2014

Репутация: нет
Всего: нет



Цитата(TheTrick @ 8.2.2014,  20:08)
WriteFile

По слову WriteFile нахожу примеры на Си, а мне нужно на VB6. Можно попросить какой нибудь примерчик решения этого вопроса?
PM MAIL   Вверх
TheTrick
Дата 8.2.2014, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



PM MAIL WWW Skype   Вверх
TheTrick
Дата 9.2.2014, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Я тебе уже писал на этот счет, открывай файл через модуль который я тебе дал (функции из winmm), т.к. тебе не просто нужны данные файла, а данные Wav файла. Там уже готовые функции для открытия и получения данных. Открывай порт, настраивай скорость и пиши уже в него через WriteFile
PM MAIL WWW Skype   Вверх
koltpiton
Дата 9.2.2014, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.2.2014

Репутация: нет
Всего: нет



Цитата(TheTrick @ 9.2.2014,  12:56)
 открывай файл через модуль который я тебе дал (функции из winmm)

Честное слово, даже не предполагал, что такие сложности буду. У меня файл:
 частота оцифровки: 8000 Герц.
 количество каналов: 1 (mono).
 бит на оцифровку: 16 signed.
 Аудиоданные должны подаваться в аудио порт модема порциями по 320 байт каждые 0.02 секунды.
Я думал можно просто открыть файл как бинарный, считать с него в переменную А 320 байт передать в аудиопорт модема MSComm1.Output=A сделать задержку 0,02 сек потом передать следующие 320 байт.
А модуль вы имеете ввиду который указали в ссылке? http://www.ex-designz.net/apidetail.asp?api_id=40
А то может не там капаю?
PM MAIL   Вверх
TheTrick
Дата 9.2.2014, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Ты понимаешь что у файла есть заголовок и т.д? В RIFF можно все что угодно записать, как ты хочешь тебе тогда нужен RAW формат. Модуль на другом форуме я давал для открытия Wav. Точную задержку тебе не получится сделать никак.
PM MAIL WWW Skype   Вверх
koltpiton
Дата 9.2.2014, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.2.2014

Репутация: нет
Всего: нет



Цитата(TheTrick @ 9.2.2014,  15:01)
Модуль на другом форуме я давал для открытия Wav. Точную задержку тебе не получится сделать никак.

Все... понял. Еще тогда вопрос, заголовок тоже нужно передавать? Насколько я понял, заголовок это первые 44 байта, их отдельно сччитывать в буфер или начинать с него и по блочно через каждые 320 байт передавать?
PM MAIL   Вверх
TheTrick
Дата 10.2.2014, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Цитата
Все... понял. Еще тогда вопрос, заголовок тоже нужно передавать? Насколько я понял, заголовок это первые 44 байта, их отдельно сччитывать в буфер или начинать с него и по блочно через каждые 320 байт передавать?

Это уже я не знаю, ты же говоришь что у тебя фиксированный формат, у тебя два пути просто выгрузить сырые данные в raw файл, либо использовать модуль, что в этом непонятного?
PM MAIL WWW Skype   Вверх
Akina
Дата 10.2.2014, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
TheTrick
Дата 10.2.2014, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Цитата(Akina @  10.2.2014,  08:08 Найти цитируемый пост)
А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ?
Т.к. ему нужны данные Wav файла, конечно можно все в ручнуюоткрывать и анализировать, но зачем, если есть специальные функции, которые это сделают правильно в любом Wav файле?
Код
Option Explicit
 
Private Type MMCKINFO
    ckid As Long
    ckSize As Long
    fccType As Long
    dwDataOffset As Long
    dwFlags As Long
End Type
Public Type WAVEFORMAT
    wFormatTag As Integer
    nChannels As Integer
    nSamplesPerSec As Long
    nAvgBytesPerSec As Long
    nBlockAlign As Integer
    wBitsPerSample As Integer
    cbSize As Integer
End Type
 
Private Declare Function mmioClose Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Private Declare Function mmioDescend Lib "winmm.dll" (ByVal hmmio As Long, lpck As MMCKINFO, lpckParent As Any, ByVal uFlags As Long) As Long
Private Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, lpmmioinfo As Any, ByVal dwOpenFlags As Long) As Long
Private Declare Function mmioRead Lib "winmm.dll" (ByVal hmmio As Long, pch As Any, ByVal cch As Long) As Long
Private Declare Function mmioStringToFOURCC Lib "winmm.dll" Alias "mmioStringToFOURCCA" (ByVal sz As String, ByVal uFlags As Long) As Long
Private Declare Function mmioAscend Lib "winmm.dll" (ByVal hmmio As Long, lpck As MMCKINFO, ByVal uFlags As Long) As Long
 
Private Const MMIO_READ = &H0
Private Const MMIO_FINDCHUNK = &H10
Private Const MMIO_FINDRIFF = &H20
 
Public Format As WAVEFORMAT             ' Формат файла
Public WaveData() As Integer            ' Данные звукового файла
Public Offset As Long                   ' Смещение данных относительно начала файла
' Открытие Wav файла
Public Function ReadWaveFile(FileName As String) As Boolean
    Dim hIn As Long, ret As Long, Inf As MMCKINFO, sInf As MMCKINFO, ct As Long
    
    hIn = mmioOpen(FileName, ByVal 0, MMIO_READ)            ' Открываем файл
    If (hIn = 0) Then MsgBox "Ошибка открытия файла": Exit Function
 
    Inf.fccType = mmioStringToFOURCC("WAVE", 0)             ' Проверка является ли вав файлом
    If mmioDescend(hIn, Inf, ByVal 0, MMIO_FINDRIFF) Then _
        mmioClose hIn, 0: MsgBox "Не являеться звуковым файлом": Exit Function
    sInf.ckid = mmioStringToFOURCC("fmt", 0)                 ' Ишем чанк с форматом
    If mmioDescend(hIn, sInf, Inf, MMIO_FINDCHUNK) Then _
        mmioClose hIn, 0: MsgBox "Не найден чанк с форматом": Exit Function
    ' Проверяем размер формата
    If sInf.ckSize > Len(Format) Then _
        mmioClose hIn, 0: MsgBox "Не поддерживаемый формат": Exit Function
    ' Читаем формат
    If mmioRead(hIn, Format, sInf.ckSize) = -1 Then _
        mmioClose hIn, 0: MsgBox "Не возможно прочитать формат": Exit Function
        
    mmioAscend hIn, sInf, 0
    
    If Format.wBitsPerSample <> 16 Then _
        mmioClose hIn, 0: MsgBox "Поддерживается только 16 бит на семпл": Exit Function
    ' Ищем чанк с данными
    sInf.ckid = mmioStringToFOURCC("data", 0)
    If mmioDescend(hIn, sInf, Inf, MMIO_FINDCHUNK) Then _
        mmioClose hIn, 0: MsgBox "Не найдены данные в вав файле ": Exit Function
    
    ct = sInf.ckSize \ 2        ' Получаем количество выборок
    If ct = 0 Then mmioClose hIn, 0: MsgBox "Нулевой размер файла": Exit Function
    
    ReDim WaveData(ct - 1)      ' Выделяем буфер
    
    Offset = sInf.dwDataOffset  ' Указываем смещение
    
    If mmioRead(hIn, WaveData(0), sInf.ckSize) = -1 Then _
        mmioClose hIn, 0: MsgBox "Не возможно прочитать данные": Exit Function
        
    mmioClose hIn, 0                                        ' Закрываем файл
    
    ReadWaveFile = True
End Function
Вот пример правильного считывания данных wav файла.
PM MAIL WWW Skype   Вверх
Akina
Дата 10.2.2014, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



TheTrick, ну от ТС ничего про WAV я не слышал - хотя косвенно он это подтверждает. 
Обычное в общем дело - озвучивать не задачу, а свои попытки её решить, что порождает кучу непоняток.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
TheTrick
Дата 10.2.2014, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Цитата(Akina @  10.2.2014,  10:17 Найти цитируемый пост)
TheTrick, ну от ТС ничего про WAV я не слышал - хотя косвенно он это подтверждает. 
Он просто на другом форуме такую тему создавал уже, и там он более детально расписал. Ему еще нужно их отправлять в COM порт, поэтомуя писал ему WriteFile

PM MAIL WWW Skype   Вверх
koltpiton
Дата 10.2.2014, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.2.2014

Репутация: нет
Всего: нет



Анализировать мне ничего не нужно. Мне нужно просто передать данные в com порт чтоб воспроизвести аудиофайл, чтоб на том конце его было слышно. А уж с заголовком в 44 байта или без это не важно. Задурили мне голову API функциями, все работает штатными средствами VB6.
Отдаем команду в порт MSComm1.Output = "AT^DDSETEX=2" & vbCr затем циклом считываем данные файла в массив и передаем блоками по 320 байт. Правильно человек говорит "А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ?"
именно через OPEN ... FOR BINARY все и работает. И нечего там в файле анализировать.
Спасибо всем за помощь.
Тему можно закрыть.

Это сообщение отредактировал(а) koltpiton - 10.2.2014, 21:50
PM MAIL   Вверх
TheTrick
Дата 10.2.2014, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Atmeg'щик



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.9.2013
Где: Астрахань

Репутация: 1
Всего: 1



Цитата(koltpiton @ 10.2.2014,  21:45)
Анализировать мне ничего не нужно. Мне нужно просто передать данные в com порт чтоб воспроизвести аудиофайл, чтоб на том конце его было слышно. А уж с заголовком в 44 байта или без это не важно. Задурили мне голову API функциями, все работает штатными средствами VB6.
Отдаем команду в порт MSComm1.Output = "AT^DDSETEX=2" & vbCr затем циклом считываем данные файла в массив и передаем блоками по 320 байт. Правильно человек говорит "А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ?"
именно через OPEN ... FOR BINARY все и работает. И нечего там в файле анализировать.
Спасибо всем за помощь.

Блин, вот какие люди пошли..... Понимаешь, бывают разные WAV файлы, бывают чанки LIST и вообще кучу других чанков, там можно хранить все что угодно вплоть до видео и программ и размер заголовка может стать несколько мб, ну это не важно, важно то что я тебе дал правильный вариант, который будет работать всегда и который надо использовать, а ты говоришь задурили. Ты понимаешь что у тебя может получиться так, что не будут выровнены данные файла и ты получишь облом? Ты писал что у тебя фиксированный формат, поэтому заголовок тебе не нужен, ты можешь его передать (это даже не будет слышно в звуке), но это неправильно, зачем тогда становиться программистом - чтобы писать ###код? Посмотри любой пример считывания данных WAV файла в интернете, никто не читает все данные сначала. Я тебе изначально написал про RAW файл, что его можно сразу считать от начала и до конца, так что прежде чем так писать сначала подумай. smile 

Это сообщение отредактировал(а) TheTrick - 10.2.2014, 22:00
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.