Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт окт 20, 2017 5:03 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 33 сообщения ]  На страницу Пред. 1 2 3 След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 15, 2006 9:02 am 
По IRQ или по значениям портов, которые зависят от звуковой карты.
Процедура shed обрабатывает IRQ 0 (и переключает задачи).


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 16, 2006 10:20 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Цитата:
По IRQ или по значениям портов, которые зависят от звуковой карты

А должно всё это зависеть от драйвера
Цитата:
Процедура shed обрабатывает IRQ 0 (и переключает задачи).

Мдя, вставил перед вызовом PlayNote, предварительно переведя систему на 44100. Сразу пришлось убрать из загрузки скринсейвер (мешает собака, каждую секунду вылезает), система начала тормозить.
Так как плеер SB определяет необходимость загрузки по тикам системы и по состоянию всяких IRQ, я, соответственно, ничего не услышал.

Так дальше жить нельзя!

Вот некоторые замечания насчёт поддержки звука:
1. Добрался до компьютера с SB совместимой картой и при прослушивании 44100 mono услышал звук с шумом около 100 гц (очень раздражает). При воспроизведении stereo данный глюк пропадает и при этом я не заметил этого стерео. Видимо воспроизведение идёт не на 8бит mono/stereo а на 16бит mono.
2. Используется один звуковой буфер из-за чего нет возможности загружать следующую порцию звука при воспроизведении. В следствие чего возникает задержка между воспроизводимыми блоками максимальной величиной 256 переключений (или сколько там позволено).
3. При воспроизведении звука через SB (в стандартной Колибри 0.5.2), одновременно попытался сохранить RAM-диск. Последствием этих нехитрых действий стала порча звукового файла. Серьёзный баг!!!

Выводы:
1. Необходимо, либо разделить имеющийся буфер на два меняющихся, либо выделить ещё одну страничку для второго буфера. Таким образом, можно будет загружать новые порции не дожидаясь окончания воспроизведения. А в перспективе, микширование звука с разных процессов.
2. Переписать звуковой плеер с поддержкой нового драйвера, или вычеркнуть его из дистриба, чтобы ничего не запарывал. А о возможности загрузки нового звукового блока спрашивать у драйвера. Для этого необходимо добавить функциональности 55-ой функции (во сказанул!), когда-нибудь всё равно придётся это сделать.
3. Писать драйвера под различные звуковухи или продумать поддержку ковокса!!! (пока зашёл в тупик, неохота всю систему переписывать для того, чтобы она начала тормозить)

Вопросы:
1. Есть ли свободная страничка, для поддержки 2-го буфера?
2. Я правильно вставил вызов драйвера в цикле переключения задач?
3. Это вообще кого-нибудь интересует?

P.S. Начинает надоедать. А может, ну его нафик! Заброшу это и вернусь обратно, в Linux User Group, там мой проект уже протух и дизайн гниёт. http://www.lug.cheb.ru


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 17, 2006 7:06 pm 
1. Можно выделить ее динамически, можно найти неиспользуемое место в memmap.inc, можно просто выделить ее в неинциалированных данных:
Код:
uglobal
  some_mem rb 4096
endg

2. Вставил-то правильно, однако передача байт в порт на частоте 44100 Гц пригодна только для однозадачных систем. В многозадачных системах это слишком частое переключение задач/вызов прерывания. С слишком частым переключением задач можно бороться переключая задачи только каждый 441 раз. С слишком частым вызовом прерывания бороться нельзя ни как :(. Нормальные звуковые карты поддерживают передачу данных через DMA (или через шину) с прерыванием в случае необходимости новых данных... Но этот режим программировать намного сложнее...
3. Специалистов по звуку нет...

Как именно SB определяет момент передачи данных я не знаю - надо смотреть в его исходники.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 19, 2006 8:28 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Цитата:
3. Специалистов по звуку нет...

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

Цитата:
С слишком частым переключением задач можно бороться переключая задачи только каждый 441 раз

cmp [virtual_timer_tick],441
je переключение_задачи; переход к переключению задачи
inc [virtual_timer_tick]
call play_sound

куда сей блок вставить, и какую часть кода внести в блок переключение_задачи?

Цитата:
Как именно SB определяет момент передачи данных я не знаю - надо смотреть в его исходники.

Я уже в нём ковыряюсь, кое что придётся изменить. Заодно драйвер звука, при невозможности выполнить какое-либо действие, в eax будет выдавать код ошибки. Так программы будут узнавать загрузился звуковой блок или нет. Может после этого моя C-Media не будет вешать систему.

В файле memmap.inc обнаружил следующее:
Цитата:
2A0000 -> 2B00ff wav device data

Зачем нужны адреса 2B0000 -> 2B00FF ? Может 2B0000 -> 2BFFFF выделить для второго звукового буфера?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 20, 2006 8:33 am 
0xFF байт используются по-видимому для хранения статуса SB. Если их переместить, то можно будет использовать 0x2b0000-0x2bffff для второго буфера.
На счет исправления irq0. Попробуй (у меня работает, но с некоторыми глюками :( ) заменить начало на следующее:
Код:
irq0:
   save_ring3_context
   mov   ax, os_data
   mov   ds, ax
   mov   es, ax
   cmp   [virtual_counter],441
   je    .norm
   cmp   [0xffff],byte 2
   je    .norm
   inc   [virtual_counter]
   inc   [context_counter]
;   call  your_play_sound
   mov   al,0x20   ; send End Of Interrupt signal
   mov   dx,0x20
   out   dx,al
   restore_ring3_context
   iret
.norm:
   mov   [virtual_counter],0
;далее идет mov edi,[0x3000] и.т.д.
;где-то далее добавь строчку virtual_counter dd ?


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 20, 2006 7:22 pm 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Ср май 18, 2005 10:27 am
Сообщения: 430
Hater, твой COVOX прост и хорош с одной стороны, но ПОЛНОСТЬЮ ПОДЧИНЯЕТ СЕБЕ РЕСУРСЫ!
Эта "жертва" Не приемлема и НЕ нужна Ни одной уважающей себя системе! Пока мы творим на архитектуре именно PC это именно ТАК!
Теперь немного вспомним про дискретизацию... господин Котельников законоположил, что частота дик-ции КАК МИНИМУМ в 2 раза превышает МАКСИМАЛЬНУЮ частоту "восстанавливаемого по отсчетам" (цифровым замерам, кодам...) воспроизведения.
Итого: 20кГц звука (как макс потолок) = 40 кГц СТРОГОГО СТАБИЛЬНОГО ВО ВРЕМЕНИ(период таймера НЕ пляшет!)! Тактирования задачи воспроизведения звука на COVO`е!
Кто будет тактировать такое на PC машине? Однозначно можно ответить в пользу использования прерывания таймера IRQ0, кае самого старшего по приоритету... + CPU ресурс потребуется, дабы это прерывание в системе обслужить... Короче я весбма подробно и логично подвел, считаю к правильным выводам и размышлениям, не буду дальше засорять форум, своим монологом.
Мой реальный совет "бывалого" ;) если дружишь и с паялом и с железками и реально ИНТЕРЕСНО железки побеждать займись AC97 звуком, НАВЕРНЯКА НЕ ПРОГОРИШЬ во всех отношениях и опыта и просвещения и это устройство СЛИШКОМ СЕРИЙНО внедрено и выпускается и далее, значит не дураки это дулают!
Еще большущий плюс ЭТО СТАНДАРТ!!! А это реальный бальзам на душу кодера, истирзанного проклятыми враждующими производителями железяк... уж поверь.
В принципе в данном вопросе мог бы предложить некое сотрудничество и обоюдовыгодное дело...
У меня есть реальная потреба в человеке желающего знать как, пр..... + помочь в доводке кода по AC97 "так сказать на месте"(т.е. у себя) + мои наставления, доки, некое убучение драйверной теме, помощь и удаленный анализ, правки со своей стороны. Короче по сути, пройти мимо машин с VIA823x южного моста, очень не хочется, по причине, что мой код для AC97 на ней не идет, а вблизи такой тачки нету :( НУЖЕН РЕАЛЬНЫЙ парниша с такой тачкой. Ты писал, что AC97 у тебя есть, случаЁм не такова ли у тебя и есть ли желание поработать в данном ключе (базовый код -ДОС вариант, это принципиально).
Ознакомиться и попробовать можно так: http://www.atom-os.narod.ru/edit_versions/ac97_302.zip
Надеюсь на Ваше трезвомыслие, уважаемые! Постараюсь заглядывать сюда, если Вы не против :)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 21, 2006 11:16 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
VaStaNi, извини, что долго не отвечал, после работы сразу лёг спать. Насчёт COVOX'а, я предлагаю не новый стандарт, а всего лишь альтернативу, на уровне исходников, которые можно распространять вместе с основными исходниками. Для тех людей, чья звуковуха пока не поддержана - возможность вразрез производительности получить функциональность. По этому затею с COVOX'ом бросать не собираюсь.
По поводу AC97. У меня VIA8233, но я ей не пользуюсь (использую какую-то C-Media 5.1). Для проверки твоей программы пришлось в биосе её включить. Звука, как ты уже писал, не было. По этому могу пока отослать отчёт. Если укажешь мыло. Пока в данном девайсе не разбирался, но в дальнейшем придётся, т.к. у нас это более распространённая девайсина чем от интела. По поводу тестирования драйверов, могу привести короткое описание того, что у меня дома:
Комп №1: моник 14", P166(разогнан до 188), 32Mb, 4.1Gb, S3 Virge 4Mb, Crystal (совместим с SB16 pro), сетевуха Realtek (не помню какая). Нууу пооолный Menueeeet :-)
Комп №2: моник 17", Athlon XP 1700+, 128Mb PC133, 20Gb, GF 4 MX440 SE 64Mb, C-Media 5.1, сетевуха 10Mbit Х.З. (из кучи нерабочих нашлась рабочая)

halyavin, спасибо, проверю. Я почти переделал стандартный wav плеер (убираю всё связанное с IRQ), потом буду тестировать. Может досовый драйвер эмулирующий SB перестанет вешать систему после секунды воспроизведения. В планах написание нового плеера с поддержкой новых подфункций.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 23, 2006 3:39 pm 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Ср май 18, 2005 10:27 am
Сообщения: 430
Hater писал(а):
я предлагаю не новый стандарт, а всего лишь альтернативу, на уровне исходников, которые можно распространять вместе с основными исходниками. Для тех людей, чья звуковуха пока не поддержана - возможность вразрез производительности получить функциональность. По этому затею с COVOX'ом бросать не собираюсь.

м-да... похоже ты меня "не услышал". Математика, даже самая простая, все же наука о фактах :0) если без ошибок считать. Делать, в смысле творить, хорошее занятие и полезное, но ведь еще лучше, когда есть максимум пользы и не только 2-3 людям... Советую еще раз прикинуть вопрос о тактировании COVOX`а его потребности в частоте, качестве 8 битного LPT ЦАП с учетом еще и того что это моно... Ну реально желающих будет, столько, столько тех кто хотел бы удовлетворить свое любопытство, скажем, в таком вопросе как АЦП-ЦАП и выделение огибающей сигнала...
В принципе данная ось, насколько мне известно НЕ МОЖЕТ обеспечить жёсткое временное тактирование (период) короче чем период таймера (IRQ0).
Hater писал(а):
По поводу AC97. У меня VIA8233, но я ей не пользуюсь (использую какую-то C-Media 5.1). Для проверки твоей программы пришлось в биосе её включить. Звука, как ты уже писал, не было. По этому могу пока отослать отчёт. Если укажешь мыло. Пока в данном девайсе не разбирался, но в дальнейшем придётся, т.к. у нас это более распространённая девайсина чем от интела.

Спасибо. Отчет в принципе имеется, а чего нет, писал. Ну если будет желание или придешь в результате к AC97, скажешь сам. Мыло в перечне пользователей видно.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 23, 2006 11:13 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Затею с covoxом бросать ненадо.

Это не оффотоп,а для тех кто не слышал звука covox.
COVOX music from ЭЛЕКТРОНИКА БК 0010(-01) :
menuetosgame.narod.ru/games/minimum.mp3

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 25, 2006 1:55 am 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Закончил драйвер для COVOX'а. Хотя код ещё сырой, но уже можно слушать wav-файлы через стандартный плеер. Так как в стандартном плеере буржуи что-то намудрили с 8/16 бит mono/stereo, то звук получается с какими-то шумами, и так так определение момента загрузки звука в буфер определяется по каким-то хитрым вычислениям с тиками системы, то иногда на звуковых стыках происходят различные аномалии. Завтра буду тестировать при 22050 тиках таймера на обоих компах.


И снова вопрос. Как из системной функции в регистрах возвращать получившиеся значения?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 25, 2006 7:53 am 
Код:
servetable:
;...
  dd my_function
;...
my_function:
;передача данных приложению через регистры
  mov [esp+36],eax_value
  mov [esp+24],ebx_value
  mov [esp+32],ecx_value
  mov [esp+28],edx_value
  mov [esp+12],esi_value
  mov [esp+8],edi_value
  ret


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 06, 2006 11:55 pm 
Не в сети

Зарегистрирован: Сб янв 07, 2006 4:07 am
Сообщения: 43
Сделал 2-ух буферный драйвер для ковокса, только что-то не так. Ввёл следующие подфункции:
ebx=3
в eax должно возвращаться состояние буфера 0-свободный, 1-занят первый буфер, 2-занят второй буфер, 3-заняты оба буфера. Так что, получается, что для непрерывного воспроизведения необходимо загружать новую порцию звука, когда состояние буфера не равно 3. Но для поддержки стандартных программ при заполненных буферах звук всё равно загрузится в неиспользуемый буфер.

ebx=4 - приостановить воспроизведение, "очистить" используемый буфер, перейти к следующему.

Но что-то не так. А именно, Kolibri не хочет работать с большими программами. Так, например, для проверки 3-ей подфункции написал простую прогу в код которой внёс wav-файл. Но система напрочь отказалась его нормально запускать(играет первый блок, а дальше, визжит какая-то ботва), а fasm под Колибри не смог откомпилить.

Что там насчёт поддержки больших программ?

В чём может быть проблема моей программы? Занимает моя прога 7 389 177 байт. Вот пример заголовка:
Цитата:
Use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x820000 ; memory for app
dd 0x820000-0x10000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon

могу привести все исходники, хотя разобраться в них будет непросто (для вычислений номера буфера, куда можно заносить новый блок, использовал булевы операции)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 07, 2006 1:30 am 
Если считаешь, что проблема именно с большой программой, то считай CRC инициализированной области.
Каким образом блок записывается в память ядра?
PS. esp растет вниз, поэтому указывать его равным 0x820000-0x10000 вместо 0x820000 не имеет ни какого смысла.
PSPS fasm выделяет фиксированный размер памяти. Если нужно больше, то он не может скомпилировать программу (в MeOs).


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пт апр 28, 2006 4:49 pm 
Не в сети

Зарегистрирован: Вт апр 18, 2006 11:48 pm
Сообщения: 53
Hater


А как на счёт ECP/EPP? Там вроде можно DMA использовать?


Вернуться к началу
 Заголовок сообщения: Re: Драйвер звука для COVOX'а
СообщениеДобавлено: Вс окт 05, 2008 6:40 pm 
Не в сети

Зарегистрирован: Вс окт 05, 2008 2:42 pm
Сообщения: 26
А где можно скачать этот драйвер? А то у меня в КолибриОС звук не работаетhttp://board.kolibrios.org/posting.php?mode=reply&f=3&t=376#

_________________
In GNU we trust ;-)


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 33 сообщения ]  На страницу Пред. 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB