Serial
У меня раньше тоже были похожие проблемы при проигрывании mp3 с CD в винде, причём на разных приводах. Включил буферизацию в настройках плеера - проблем как не бывало.
sound, SB, AC97 и другое
Serge
Теперь все нормально. Спасибо.
Serial
Драйвер CD\DVD без кэша. Над универсальной системой кэширования работаю в данный момент.
Теперь все нормально. Спасибо.
Serial
Драйвер CD\DVD без кэша. Над универсальной системой кэширования работаю в данный момент.
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Кб сплошных нулей в конце (???)
Есть пара узких моментов:
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.
Прошу прощения, а что такое XM? Никогда не слышал о таком формате.
Quantum
Сильно извиняюсь. Залил на SVN не тот ac97wav.c
Теперь исправил, заодно пофиксил баг с маленькими файлами.
Исходники присылай. Интересно посмотреть.
Сильно извиняюсь. Залил на SVN не тот ac97wav.c
Теперь исправил, заодно пофиксил баг с маленькими файлами.
Исходники присылай. Интересно посмотреть.
Serial
ХМ гораздо совершеннее/современнее МОДа. В общем, к перечисленному в той статье нужно дабавить: многоканальность (до 64х каналов), сжатие сэмплов (дельта, ADPCM, ...), volume & panning envelop'ы, линейка спецэффектов и ещё много чего. Неофициальное описание формата ХМ на английском можно скачать тамже, где и текущая версия библиотеки для Колибри.
ХМ гораздо совершеннее/современнее МОДа. В общем, к перечисленному в той статье нужно дабавить: многоканальность (до 64х каналов), сжатие сэмплов (дельта, ADPCM, ...), volume & panning envelop'ы, линейка спецэффектов и ещё много чего. Неофициальное описание формата ХМ на английском можно скачать тамже, где и текущая версия библиотеки для Колибри.
Serge
))) Теперь получается обратный эффект: один из моих любимых ХМ'ов определяется твоим кодом как WAV Поэтому последовательность загрузки пока пусть будет такой: MP3, XM, WAV. Тем более что после добавления кеширования даже очень большие файлы обрабатываются моментально. Сейчас отправлю тебе исходники.
))) Теперь получается обратный эффект: один из моих любимых ХМ'ов определяется твоим кодом как WAV Поэтому последовательность загрузки пока пусть будет такой: MP3, XM, WAV. Тем более что после добавления кеширования даже очень большие файлы обрабатываются моментально. Сейчас отправлю тебе исходники.
Quantum
У него RIFF заголовок ?
У него RIFF заголовок ?
Когда исправите все, выложите бинарники для скачивания, а то я, например С компилить не могу и не умею.
Quantum
Проверил всё работает, правда у меня екзешник на 4Кб больше.
Замени test_mp3(char *buf) на эту, а то опять будут проблемы с тегами ID3
Проверил всё работает, правда у меня екзешник на 4Кб больше.
Замени test_mp3(char *buf) на эту, а то опять будут проблемы с тегами ID3
Code: Select all
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);
};
Serge
Вероятность того, что какой-нибудь WAV/MP3 окажется "валидным" XM'ом всё-таки очень мала - прецедентов пока не было Но лучше не рисковать...
Нашёл баг в pe2kos: если его запускать из папки с длинным путём, пробелами (кавычки я добавлял, естественно) и прочими недосовскими фишками, он тихо завершается, ничего не делая и не выводя даже сообщения об ошибке. Чтоб заставить его работать, пришлось поместить его в C:\VMs\ и файлы проекта скопировать туда же.
И ещё одна странность: запускаю плеер из KFM - дикие тормоза (загрузка CPU - 60%). Другие приложения - аналогично. Запускаю из фара - всё ОК. Как такое может быть? KFM из текущего дистрибутива я не обновлял, правда...
Нет. Большинство XM'ов начинаются последовательностью "Extended Module: [название композиции]", но далеко не все. Я не разбирался в твоём коде загрузки WAV/MP3, но думаю, что его нужно немного ужесточить, ведь структура WAV и XM очень заметно отличается от MP3. Поэтому то, что из 1000 разных XM'ов один распознался как WAV/MP3 (могу отправить тебе его, но он большой и последовательности "RIFF" в нём нигде нет). Также стандартный виндовый звонок DING.WAV у меня загрузился как MP3. Поэтому пришлось в тестовой версии вынести вперёд загрузку XM, а потом уже - WAV и MP3.У него RIFF заголовок ?
Вероятность того, что какой-нибудь WAV/MP3 окажется "валидным" XM'ом всё-таки очень мала - прецедентов пока не было Но лучше не рисковать...
У меня VC++ 2005 Express Edition.Проверил всё работает, правда у меня екзешник на 4Кб больше.
Нашёл баг в pe2kos: если его запускать из папки с длинным путём, пробелами (кавычки я добавлял, естественно) и прочими недосовскими фишками, он тихо завершается, ничего не делая и не выводя даже сообщения об ошибке. Чтоб заставить его работать, пришлось поместить его в C:\VMs\ и файлы проекта скопировать туда же.
И ещё одна странность: запускаю плеер из KFM - дикие тормоза (загрузка CPU - 60%). Другие приложения - аналогично. Запускаю из фара - всё ОК. Как такое может быть? KFM из текущего дистрибутива я не обновлял, правда...
Quantum
test_wav проверяет только заголовок поэтому хватит первых 44-х байт. Скорее он определился как mp3. Такое возможно потому что никаких стандартных сигнатур у файлов нет а строки в русской кодировке очень похожи на заголовок mp3 фрейма. Наверное надо вводить контроль по расширению.
pe2kos есть на сайте у diamond-а. Моя версия сделана специально для DOOM и выделяет программам большой стек. А баг связан пробелами в пути к файлу.
В KFM я пока не тестил, для 1024*768 там слишком мелкий шрифт.
test_wav проверяет только заголовок поэтому хватит первых 44-х байт. Скорее он определился как mp3. Такое возможно потому что никаких стандартных сигнатур у файлов нет а строки в русской кодировке очень похожи на заголовок mp3 фрейма. Наверное надо вводить контроль по расширению.
pe2kos есть на сайте у diamond-а. Моя версия сделана специально для DOOM и выделяет программам большой стек. А баг связан пробелами в пути к файлу.
В KFM я пока не тестил, для 1024*768 там слишком мелкий шрифт.
Serge
Видимо, да.Скорее он определился как mp3.
Очень не советую это делать. Во-первых, многие ХМ файлы имеют другие расширения (я встречал .mod, .s3m, вообще без расширения). Во-вторых, я специально добавил расширение .wav ко всем своим XM-файлам, чтоб их можно было открыть плеером. В общем, считаю, что серьёзная программа не должна полагаться на расширения...Наверное надо вводить контроль по расширению.
Нельзя просто поменять int 40h на sysenter, хотя бы потому, что sysenter не сохраняет адреса возврата. Аналог системного вызова, основанный на команде sysenter, можно найти в macros.inc (макрос mcall при соответствующем __CPU_type).Quantum wrote:Потом я ещё поменял int 40h на sysenter, но уже в коде своего тестового приложения, а не в твоём плеере. Вот что получилось:
Who is online
Users browsing this forum: No registered users and 0 guests