Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Oct 25, 2021 8:23 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 984 posts ]  Go to page Previous 123 24 25 26 2766 Next
Author Message
 Post subject:
PostPosted: Tue Jul 10, 2007 1:13 am 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
Serial
У меня раньше тоже были похожие проблемы при проигрывании mp3 с CD в винде, причём на разных приводах. Включил буферизацию в настройках плеера - проблем как не бывало.


Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 7:31 am 
Serge
Теперь все нормально. Спасибо.

Serial
Драйвер CD\DVD без кэша. Над универсальной системой кэширования работаю в данный момент.


Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 7:50 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
AC97SND научился играть ХМ-файлы :) Изменил только ac97wav.c, ac97snd.vcproj. Добавил ufmod-codec.h и ufmod.obj. Serge, отправить тебе это всё на мыло?

Есть пара узких моментов:
1. Т.к. декодер WAV отбрасывает слишком короткие файлы (меньше ~2К), мне пришлось добавить свой декодер перед вавом и мп3, т.е. последовательсность такая: ХМ, WAV, MP3. Это не есть хорошо, т.к. uFMOD не использует никакие сигнатуры (чтоб можно было играть даже битые ХМы). Таким образом, теоретически он может принять как валидный ХМ какой-нибудь WAV или даже MP3 и сильно подвесить систему долго пытаясь загрузить этот самый "ХМ". За возможность вылета бояться не стоит - декодер очень надёжный, но зависания могут иметь место, особенно из-за пункта 2. Желательно сделать последовательность такой: WAV, MP3, XM.

[Добавил: уже прикрутил кеш - п2 не актуален.]

Ааа... Ещё Ваш pe2kos добавил в экзешник около 50Кб сплошных нулей в конце (???)


Last edited by Quantum on Tue Jul 10, 2007 11:06 pm, edited 1 time in total.

Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 9:07 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Прошу прощения, а что такое XM? Никогда не слышал о таком формате.


Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 10:37 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Атауальпа

Вот что-то похожее имхо:
http://ru.wikipedia.org/wiki/MOD


Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 11:11 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quantum
Сильно извиняюсь. Залил на SVN не тот ac97wav.c
Теперь исправил, заодно пофиксил баг с маленькими файлами.
Исходники присылай. Интересно посмотреть.


Top
   
 Post subject:
PostPosted: Tue Jul 10, 2007 11:15 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
Serial

ХМ гораздо совершеннее/современнее МОДа. В общем, к перечисленному в той статье нужно дабавить: многоканальность (до 64х каналов), сжатие сэмплов (дельта, ADPCM, ...), volume & panning envelop'ы, линейка спецэффектов и ещё много чего. Неофициальное описание формата ХМ на английском можно скачать тамже, где и текущая версия библиотеки для Колибри.


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 1:37 am 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
Serge

:)))) Теперь получается обратный эффект: один из моих любимых ХМ'ов определяется твоим кодом как WAV :) Поэтому последовательность загрузки пока пусть будет такой: MP3, XM, WAV. Тем более что после добавления кеширования даже очень большие файлы обрабатываются моментально. Сейчас отправлю тебе исходники.


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 9:46 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quantum

У него RIFF заголовок ?


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 11:14 am 
Когда исправите все, выложите бинарники для скачивания, а то я, например С компилить не могу и не умею.


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 4:27 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quantum

Проверил всё работает, правда у меня екзешник на 4Кб больше.
Замени test_mp3(char *buf) на эту, а то опять будут проблемы с тегами ID3
Code:
DWORD test_mp3(char *buf)
{  unsigned long hdr;
    WAVEHEADER whdr;
     
    while (1)
    {  if(rd.filepos > 102400)
          return 0;
        if(!rd.head_read(&rd,&hdr))
                        return 0;
        if(!decode_header(&fr,hdr))
        {
         if((hdr & 0xffffff00) == 0x49443300)
              {
                    int id3length = 0;
                    id3length = parse_new_id3(&rd, hdr);
                    continue;
              };
          rd.strpos-=3;
          rd.stream-=3;
          rd.strremain+=3;
          continue;
        };
        break;
          };
         
    first_sync = rd.filepos-rd.strremain-4;
         
    whdr.riff_id = 0x46464952;
    whdr.riff_format = 0x45564157;
    whdr.wFormatTag = 0x01;
    whdr.nSamplesPerSec = freqs[fr.sampling_frequency];
    whdr.nChannels = 2; //mpginfo.channels;
    whdr.wBitsPerSample = 16;
   
    return test_wav(&whdr);
};


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 6:20 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
Serge
Quote:
У него RIFF заголовок ?

Нет. Большинство XM'ов начинаются последовательностью "Extended Module: [название композиции]", но далеко не все. Я не разбирался в твоём коде загрузки WAV/MP3, но думаю, что его нужно немного ужесточить, ведь структура WAV и XM очень заметно отличается от MP3. Поэтому то, что из 1000 разных XM'ов один распознался как WAV/MP3 (могу отправить тебе его, но он большой и последовательности "RIFF" в нём нигде нет). Также стандартный виндовый звонок DING.WAV у меня загрузился как MP3. Поэтому пришлось в тестовой версии вынести вперёд загрузку XM, а потом уже - WAV и MP3.

Вероятность того, что какой-нибудь WAV/MP3 окажется "валидным" XM'ом всё-таки очень мала - прецедентов пока не было :) Но лучше не рисковать...

Quote:
Проверил всё работает, правда у меня екзешник на 4Кб больше.

У меня VC++ 2005 Express Edition.

Нашёл баг в pe2kos: если его запускать из папки с длинным путём, пробелами (кавычки я добавлял, естественно) и прочими недосовскими фишками, он тихо завершается, ничего не делая и не выводя даже сообщения об ошибке. Чтоб заставить его работать, пришлось поместить его в C:\VMs\ и файлы проекта скопировать туда же.

И ещё одна странность: запускаю плеер из KFM - дикие тормоза (загрузка CPU - 60%). Другие приложения - аналогично. Запускаю из фара - всё ОК. Как такое может быть? KFM из текущего дистрибутива я не обновлял, правда...


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 9:08 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quantum

test_wav проверяет только заголовок поэтому хватит первых 44-х байт. Скорее он определился как mp3. Такое возможно потому что никаких стандартных сигнатур у файлов нет а строки в русской кодировке очень похожи на заголовок mp3 фрейма. Наверное надо вводить контроль по расширению.
pe2kos есть на сайте у diamond-а. Моя версия сделана специально для DOOM и выделяет программам большой стек. А баг связан пробелами в пути к файлу.

В KFM я пока не тестил, для 1024*768 там слишком мелкий шрифт.


Top
   
 Post subject:
PostPosted: Wed Jul 11, 2007 9:35 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
Serge

Quote:
Скорее он определился как mp3.

Видимо, да.

Quote:
Наверное надо вводить контроль по расширению.

Очень не советую это делать. Во-первых, многие ХМ файлы имеют другие расширения (я встречал .mod, .s3m, вообще без расширения). Во-вторых, я специально добавил расширение .wav ко всем своим XM-файлам, чтоб их можно было открыть плеером. В общем, считаю, что серьёзная программа не должна полагаться на расширения...


Top
   
 Post subject:
PostPosted: Thu Jul 12, 2007 1:20 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1600
Quantum wrote:
Потом я ещё поменял int 40h на sysenter, но уже в коде своего тестового приложения, а не в твоём плеере. Вот что получилось:

Нельзя просто поменять int 40h на sysenter, хотя бы потому, что sysenter не сохраняет адреса возврата. Аналог системного вызова, основанный на команде sysenter, можно найти в macros.inc (макрос mcall при соответствующем __CPU_type).


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 984 posts ]  Go to page Previous 123 24 25 26 2766 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited