Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > VB6 > Файл в бинарном режиме |
Автор: koltpiton 8.2.2014, 19:54 |
Здравствуйте! Нужна помощь. В бейсике не силен. На VB6 нужно: 1. определить буфер размером в 320 байт. 2. открыть файл на чтение в бинарном режиме 3. считать из файла 320 байт. 3.1 сделать задержку на 1 сек после чего очистить буфер и считать следующие 320 байт и так до конца файла. шарюсь в интернете уже несколько дней, на VB6 ни чего не нашел. Будте добры, покажите на примере как это делается. |
Автор: TheTrick 8.2.2014, 20:08 |
WriteFile |
Автор: koltpiton 8.2.2014, 20:22 | ||
По слову WriteFile нахожу примеры на Си, а мне нужно на VB6. Можно попросить какой нибудь примерчик решения этого вопроса? |
Автор: TheTrick 8.2.2014, 21:28 |
https://www.google.ru/search?client=opera&q=vb6+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B5+%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest#newwindow=1&q=vb6+writefile Первая ссылка |
Автор: TheTrick 9.2.2014, 12:56 |
Я тебе уже писал на этот счет, открывай файл через модуль который я тебе дал (функции из winmm), т.к. тебе не просто нужны данные файла, а данные Wav файла. Там уже готовые функции для открытия и получения данных. Открывай порт, настраивай скорость и пиши уже в него через WriteFile |
Автор: koltpiton 9.2.2014, 13:29 | ||
Честное слово, даже не предполагал, что такие сложности буду. У меня файл: частота оцифровки: 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 А то может не там капаю? |
Автор: TheTrick 9.2.2014, 15:01 |
Ты понимаешь что у файла есть заголовок и т.д? В RIFF можно все что угодно записать, как ты хочешь тебе тогда нужен RAW формат. Модуль на другом форуме я давал для открытия Wav. Точную задержку тебе не получится сделать никак. |
Автор: koltpiton 9.2.2014, 17:41 | ||
Все... понял. Еще тогда вопрос, заголовок тоже нужно передавать? Насколько я понял, заголовок это первые 44 байта, их отдельно сччитывать в буфер или начинать с него и по блочно через каждые 320 байт передавать? |
Автор: TheTrick 10.2.2014, 00:51 | ||
Это уже я не знаю, ты же говоришь что у тебя фиксированный формат, у тебя два пути просто выгрузить сырые данные в raw файл, либо использовать модуль, что в этом непонятного? |
Автор: Akina 10.2.2014, 08:08 |
А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ? |
Автор: Akina 10.2.2014, 10:17 |
TheTrick, ну от ТС ничего про WAV я не слышал - хотя косвенно он это подтверждает. Обычное в общем дело - озвучивать не задачу, а свои попытки её решить, что порождает кучу непоняток. |
Автор: TheTrick 10.2.2014, 13:02 | ||
|
Автор: koltpiton 10.2.2014, 21:45 |
Анализировать мне ничего не нужно. Мне нужно просто передать данные в com порт чтоб воспроизвести аудиофайл, чтоб на том конце его было слышно. А уж с заголовком в 44 байта или без это не важно. Задурили мне голову API функциями, все работает штатными средствами VB6. Отдаем команду в порт MSComm1.Output = "AT^DDSETEX=2" & vbCr затем циклом считываем данные файла в массив и передаем блоками по 320 байт. Правильно человек говорит "А зачем нужно использовать API? чем не угодило штатное OPEN ... FOR BINARY ?" именно через OPEN ... FOR BINARY все и работает. И нечего там в файле анализировать. Спасибо всем за помощь. Тему можно закрыть. |
Автор: TheTrick 10.2.2014, 21:59 | ||
Блин, вот какие люди пошли..... Понимаешь, бывают разные WAV файлы, бывают чанки LIST и вообще кучу других чанков, там можно хранить все что угодно вплоть до видео и программ и размер заголовка может стать несколько мб, ну это не важно, важно то что я тебе дал правильный вариант, который будет работать всегда и который надо использовать, а ты говоришь задурили. Ты понимаешь что у тебя может получиться так, что не будут выровнены данные файла и ты получишь облом? Ты писал что у тебя фиксированный формат, поэтому заголовок тебе не нужен, ты можешь его передать (это даже не будет слышно в звуке), но это неправильно, зачем тогда становиться программистом - чтобы писать ###код? Посмотри любой пример считывания данных WAV файла в интернете, никто не читает все данные сначала. Я тебе изначально написал про RAW файл, что его можно сразу считать от начала и до конца, так что прежде чем так писать сначала подумай. ![]() |
Автор: Akina 11.2.2014, 07:30 |
TheTrick, пожалуйста, поменьше пыли. Ты говоришь об общем подходе, и в этом смысле твои слова верны, но у ТС совершенно конкретная реальная задача, и ему общий подход может оказаться совершенно непригодным (что мы собственно и наблюдаем, как мне кажется). Это вовсе не повод для столь мощного негодования. |
Автор: koltpiton 11.2.2014, 19:30 |
Уважаемый TheTrick Вы действительно правы. Только тут нужно учесть тот факт, что аудиофайл мы создаем себе сами с заранее заготовленой речью оповещения, соответственно изначально знаем, что там только аудиоднанные. Ну и потом, я должен конечно извиниться и отметить тот факт, что wav файл в формате gsm. В этом я не сразу разобрался. Ну не сталкивался я с такого рода задачами. Ведь всегда когда то в жизни бывает что то в первый раз. Я Вас очень благодарю за помощь и это искрине я хочу отметить. Спасибо. Добавлено через 11 минут и 21 секунду Про API функции я просто имел в виду, что MSComm по моему все тоже самое делает, что можно сделать через API. |