Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Считывание данных из Wav файла [D6, Win95/98]


Tpv ©   (2002-04-12 10:11:00) 

Здравствуйте.
В своей программе (D6) считываю данные из Wav-файла.
Выбираю файл в OpenDialog1.
F:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead );
Затем считываю заголовок, определяю SampleCount, Channeles, BitsPerSample
Затем считываю данные:
GetMem(buf, SampleCount * Channeles * BitsPerSample);
F.Read(buf^, SampleCount * Channeles * BitsPerSample);
Если Wav-файл продолжительностью, например 3 минуты, то процесс считывания занимает около 30 секунд.
Как можно уменьшить время считывания данных? Подкиньте идею. Или может попробовать какие-нибудь другие функции?


Tpv   (2002-04-13 08:52:00) [1]

Немного поэкспериментирую. После выходных напишу что получилось.
Спасибо за отклик.


Digitman   (2002-04-12 18:30:00) [2]

>Tpv

На пальцах - не пойдет. Приводи проблемный код - тогда и рекомендации получишь.


Tpv   (2002-04-12 15:58:00) [3]

На пальцах объяснять.


Digitman   (2002-04-12 14:34:00) [4]

Что не получается-то ? Где твой неработающий код ? На пальцах объяснять ?


SPeller   (2002-04-12 13:59:00) [5]

Для увеличения быстродействия можно сделать это на API.


Tpv   (2002-04-12 11:55:00) [6]

Спасибо за ответы.
Пробовал использовать несколько буферов. Но что то не получается. Если не сложно, объясните подробнее.


Digitman   (2002-04-12 11:27:00) [7]

>Tpv
А зачем ты его целиком считываешь в память ?
Используй, например, двойную буферизацию (может, и больше буферов потребуется - в зависимости от параметров Wav-заголовка).
Читаешь в 1-й буфер порцию, скажем, в 64кб, воспроизводишь/обрабатываешь данные в буфере.
Одновременно читаешь след.порцию во 2-й буфер. К моменту завершения обработки 1-го буфера 2-й уже готов к обработке, переключаешь буфера и - все сначала. И так продолжаешь циклически, пока не прочитаешь весь файл.


Виктор Щербаков   (2002-04-12 10:38:00) [8]

Для работы с большими файлами удобно использовать механизм проецирования в память (см. File Mapping в SDK).
При этом с файлом будешь работать как с обычным буфером памяти.


Наверх

Титульная страница Поиск, карта сайта Написать письмо