Difference between revisions of "SysFn55/ru"

From KolibriOS wiki
Jump to navigation Jump to search
m
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
'''Функция 55 - аудио сервис.'''
+
'''Функция 55''' - аудио сервис.
 +
----
  
=== Подфункция 0 - загрузить данные для SB16. ===
+
=== Подфункция 55 - начать проигрывать данные на встроенном спикере. ===
 
 
''Параметры:''
 
 
 
* eax = 55 - номер функции
 
* ebx = 0 - номер подфункции
 
* ecx = указатель на данные (копируется 64 килобайта, используется столько, сколько установлено подфункцией 2)
 
 
 
''Возвращаемое значение:''
 
 
 
* функция не возвращает значения
 
 
 
''Замечания:''
 
 
 
* Формат и размер данных устанавливаются подфункцией 2.
 
 
 
=== Подфункция 1 - начать проигрывать данные на SB16. ===
 
 
 
''Параметры:''
 
 
 
* eax = 55 - номер функции
 
* ebx = 1 - номер подфункции
 
 
 
''Возвращаемое значение:''
 
 
 
* функция не возвращает значения
 
 
 
''Замечания:''
 
 
 
* Предварительно данные должны быть загружены подфункцией 0 и определён их формат подфункцией 2.
 
* Функция возвращает управление, когда началось проигрывание данных; после этого проигрывание идёт независимо от приложения (и вообще не требует загрузки процессора).
 
* Предварительно должны быть определены базовый порт SB16 (подфункцией 4 функции 21) и канал DMA(подфункцией 10 функции 21).
 
 
 
=== Подфункция 2 - установить формат данных SB16. ===
 
  
 
Параметры:
 
Параметры:
  * eax = 55 - номер функции
+
:* eax = 55 - номер функции
  * ebx = 2 - номер подфункции
+
:* ebx = 55 - номер подфункции
  * ecx = 0 - установить разрядность
+
:* esi = указатель на данные
    * edx = 1 - 8бит моно
 
    * edx = 2 - 8бит стерео
 
  * ecx = 1 - установить размер данных
 
    * edx = размер в байтах
 
  * ecx = 2 - установить частоту проигрывания
 
    * edx = частота
 
 
Возвращаемое значение:
 
Возвращаемое значение:
  * функция не возвращает значения
+
:* eax = 0 - успешно
 +
:* eax = 55 - ошибка (спикер отключён или занят)
 +
Данные - это массив элементов переменной длины.
 +
Формат каждого элемента определяется первым байтом:
 +
:* 0 = конец данных
 +
:* 1..0x80 = задаёт длительность звучания в сотых долях секунды ноты, определяемой непосредственным значением частоты
 +
::* следующее слово (2 байта) содержит делитель частоты;
 +
:::частота определяется как 1193180/divider
 +
:* 0x81 = invalid
 +
:* 0x82..0xFF = нота, определяемая октавой и номером:
 +
::* длительность в сотых долях секунды = (первый байт)-0x81
 +
::* присутствует ещё один байт;
 +
::* (второй байт)=0xFF - пауза
 +
::* иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1 до 12, a=номер октавы (считая с 0)
 
Замечания:
 
Замечания:
  * При загрузке системы устанавливаются следующие параметры
+
:* Пищание спикером может быть запрещено/разрешено подфункцией 8 [[SysFn18/ru|функции 18]].
    по умолчанию: разрядность - 8 бит моно, размер - 64 Кб,
+
:* Функция возвращает управление, сообщив куда следует информацию о запросе. Само проигрывание идёт независимо от программы.
    частота 44100 Гц. Тем не менее рекомендуется явно устанавливать
+
:* Данные должны сохраняться в памяти по крайней мере до конца проигрывания.
    необходимые значения, поскольку они могли быть переустановлены
 
    какой-нибудь программой.
 
 
 
 
 
=== Подфункция 55 - начать проигрывать данные на встроенном спикере. ===
 
 
 
''Параметры:''
 
 
 
* eax = 55 - номер функции
 
* ebx = 55 - номер подфункции
 
* esi = указатель на данные
 
 
 
''Возвращаемое значение:''
 
 
 
* eax = 0 - успешно
 
* eax = 55 - ошибка (спикер отключён или занят)
 
 
 
'''Данные''' - это массив элементов переменной длины.
 
Формат каждого элемента определяется первым байтом:
 
 
 
* 0 = конец данных
 
* 1..0x80 = задаёт длительность звучания в сотых долях секунды ноты, определяемой непосредственным значением частоты
 
** следующее слово (2 байта) содержит делитель частоты; частота определяется как 1193180/divider
 
* 0x81 = invalid
 
* 0x82..0xFF = нота, определяемая октавой и номером:
 
** длительность в сотых долях секунды = (первый байт)-0x81
 
** присутствует ещё один байт;
 
** (второй байт)=0xFF - пауза
 
** иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1 до 12, a=номер октавы (считая с 0)
 
 
 
''Замечания:''
 
  
* Пищание спикером может быть запрещено/разрешено подфункцией 8 функции 18.
+
'''Константы для регистров:'''
* Функция возвращает управление, сообщив куда следует информацию о запросе. Само проигрывание идёт независимо от программы.
+
::eax - SF_SPEAKER_PLAY (55)
* Данные должны сохраняться в памяти по крайней мере до конца проигрывания.
 
  
 
{{System_functions}}
 
{{System_functions}}
 
[[Category: SysCalls]]
 
[[Category: SysCalls]]

Latest revision as of 19:07, 17 January 2016

Функция 55 - аудио сервис.


Подфункция 55 - начать проигрывать данные на встроенном спикере.

Параметры:

  • eax = 55 - номер функции
  • ebx = 55 - номер подфункции
  • esi = указатель на данные

Возвращаемое значение:

  • eax = 0 - успешно
  • eax = 55 - ошибка (спикер отключён или занят)

Данные - это массив элементов переменной длины. Формат каждого элемента определяется первым байтом:

  • 0 = конец данных
  • 1..0x80 = задаёт длительность звучания в сотых долях секунды ноты, определяемой непосредственным значением частоты
  • следующее слово (2 байта) содержит делитель частоты;
частота определяется как 1193180/divider
  • 0x81 = invalid
  • 0x82..0xFF = нота, определяемая октавой и номером:
  • длительность в сотых долях секунды = (первый байт)-0x81
  • присутствует ещё один байт;
  • (второй байт)=0xFF - пауза
  • иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1 до 12, a=номер октавы (считая с 0)

Замечания:

  • Пищание спикером может быть запрещено/разрешено подфункцией 8 функции 18.
  • Функция возвращает управление, сообщив куда следует информацию о запросе. Само проигрывание идёт независимо от программы.
  • Данные должны сохраняться в памяти по крайней мере до конца проигрывания.

Константы для регистров:

eax - SF_SPEAKER_PLAY (55)