задумка: прога для ведения каталога музы.

Тема в разделе "WASM.HEAP", создана пользователем varnie, 11 янв 2006.

  1. b0t4n

    b0t4n New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    10
    Адрес:
    Тула
    n2k

    Кто-то уже писал, что лучше юзать не txt a cvs. Это тот же блокнот, только разделен запятыми. Его даже , вроде, и импортировать не надо...

    varnie

    Описание в архиве

    [​IMG] 1177174558__mp3_descr_rus.rar
     
  2. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    b0t4n

    cпасибо!



    вопросик такой по ходу проги появился - интересно, почему в случае, когда для записи относительно большого куска данных (символов ~300-500) я использую покусочную запись, каждый раз используя GetFileSize() и SetFilePointer() для перемещения в конец файла, чтобы дописать очередной кусочек из целого куска через WriteFile(), то на все это тратится меньше времени, чем если все те же самые больше куски (символов ~300-500) записывать в файл одним куском, сцепляя их вместе через с десяток вызовов вяских там strcpy() и strcat()?



    в первом случае юзается: 16 WriteFile()-ов, 22 SetFilePointer()-а, 22 GetFileSize()-a

    во втором случае юзается: оператор new для выделения динамич. памяти под кусок (~300-500 байт), 1 strcpy() и 22 strcat(), 1 SetFilePointer() и 1 WriteFile() !



    например, для обхода и парсинга всего содержимого папки с вложенными в нее еще 11ти папками-альбомами с ~3-10 песнями

    в первом случае тратится 6,369 секунды,

    во втором случае тратится уже 7,120 секунды.



    кто мне скажет, почему так нелогично получается? ИМХА, наоборот второй случай должен давайть фору первому. где эта "тяжеловесная" тормозящая функция во втором навороченном случае?



    буду признателен за ответ.
     
  3. b0t4n

    b0t4n New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    10
    Адрес:
    Тула
    varnie

    Я тут пошевелил извилинами и понял, что это функции выделения памяти и функция записи в файл. С первой все ясно, а вот вторую нужно пояснить. Дело в том, что действительно, записать файл сразу быстрее, чем делать это по кускам. Но , наверное, в ходе выполнения/компилирования происходит оптимизация команд, и , пока процесор что-то там считает(теги, другие задачи ОС), чипсет потихоньку сливает кусок файла из оперативки на диск , не трогая процессор. Поэтрому, время записывания как-бы "испаряется" так как в этом случае одновременно выполняется 2 действия - работает процессор и производится запись в файл. А так как размар файла мал, то он полностью кешируется в память жесткого или оперативки (хз чего) и запись в такой файл занимает мало времени.
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    b0t4n

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



    наконец-то получил все что нужно. только теперь весь косяк в том, что если mp3-файл имеет различную длину (т.е. это VBR file, файл с переменной степенью сжатия), то, как и ясно было написано в этой доке по mp3, некоторые полученные данные будут неправильными (битрейт в том числе).

    досадно. там же в этой доке было написано, что



    для определения длительности звучания и характеристик которых строго говоря необходимо просматривать

    заголовки всех входящих в VBR-файл фреймов (впрочем, существуют алгоритмы, позволяющие избежать этого).





    как мне быть теперь? хочется всегда получать нужные хар-ки. на ум приходит только одно решение - пробегаться по файлу, и считывать неск. данных с нескольких подряд идущих фреймов, если, конечно же, их там несколько. а затем просто сравнивать - и если разные, то имеем дело с VBR файлом, и его хар-ки не определяем.



    что скажете?
     
  5. b0t4n

    b0t4n New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    10
    Адрес:
    Тула
    varnie

    Э э э... даж не знаю...тут все зависит от корявости того, кто делал файл =)) Мне даж как-то раз попался файл, в котором ни одним проигрывателем длительность звучания не определялась правильно.

    Думаю, что лучше не париться, а найти какую-нить библиотеку, которая показывает все это и закконектить ее. Так просто проще. Есть даже прога, которая показывает всю инфу, и экспортирует ее в .txt или .xml . Вот некоторые данные, которые она показывает: Name ,Encoder,Bitrate,Length,Size,Quality,VBR Method,Lowpass Filter,Psycho-acoustic Model,Safe Joint Stereo,ABR Bitrate,Album,Artist,Title,Year,Track Comment,Genre. Да, битрейт он считает как = размер файла(байт)*8(бит в байте)/длительность(сек)/ 1024. Назвается EncSpot. Можно выбрать столбцы для экспорта. Офф. сайт - www.guerillasoft.com.
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    b0t4n,

    ты бы мне эту инфу и сцылочку недели эдак с 2 назад бы подкинул)) цены б тебе не было))).
     
  7. b0t4n

    b0t4n New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    10
    Адрес:
    Тула
    varnie

    Да мне итак цены нет :-D
     
  8. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    varnie

    юзай лучше MapViewOfFile и работай с ним

    и зачем тебе 22 раза вызывать медленную строковую ф-цию?



    The private life of MP3 frames