С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 13

[NASM] Вывод звука при помощи escape последовательности

21.04.2012, 15:21. Показов 3449. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Пишу проигрыватель для азбуки морзе на ассемблере (nasm под ubuntu). Добрался до следущего:
1) sudo modprobe pcspkr - подключаем пищалку
2) переходим в текстовый режим (только в нем у меня сработал п. 3)
3) Извлекаем из системного динамика писк с помощью escape последовательности.

Assembler
1
2
3
4
5
6
7
8
9
10
11
a1: db 0x1b, '[10;800]', 0 ; устанавливаем частоту 800 Гц
a1Len: equ $-a1
        
a2: db 0x1b, '[11;100]', 7 ; длительность 100 мс
a2Len: equ $-a2
    
a3: db 0x1b, '[10;800]', 0 ; устанавливаем частоту 800 Гц
a3Len: equ $-a3
    
a4: db 0x1b, '[11;300]', 7 ; длительность 300 мс
a4Len: equ $-a4
Выводим это дело с помощью макроса
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
    %macro print 2 
    mov eax, 4 
    mov ebx, 1 
    mov ecx, %1 
    mov edx, %2 
    int 80h 
    %endmacro 
 
print a1, a1Len
print a2, a2Len
print a3, a3Len
print a4, a4Len
Почему-то выведется только звук для a3 и a4 (a1 и a2 не сработают)
Если между ними вставить ввод с клавиатуры например

Assembler
1
2
3
4
5
print a1, a1Len
print a2, a2Len
scan buf, 2 ; scan - макрос для ввода с клавиатуры
print a3, a3Len
print a4, a4Len
Выведет один сигнал. Подождет ввода символа. Выведет второй.
Можно ли сделать так, чтобы два сигнала выводилось без ввода с клавиатуры? (вместо него может быть что-либо незаметное для пользователя)

Добавлено через 14 минут
Программа будет читать файл и в зависимости от точки и тире выводит звук разной длины.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2012, 15:21
Ответы с готовыми решениями:

Компиляция при помощи NASM
Я только-только начинающий, почитал некоторое количество материала по ассемблеру, очень захотелось попробовать. Скачал насм...

Формирование звука при помощи встроенного динамика (спикера)
Всем привет. По заданию тут идёт такая операция: звучит тон 500 потом 1000 опять 1000 последнее 500. Подскажите пожалуйста,как сделать...

Escape-последовательности
Объясните, пожалуйста назначение '\a' (звонок)

4
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
21.04.2012, 15:27
Цитата Сообщение от griba
a3: db 0x1b, '[10;800]', 0
Сдаётся мне, что 0 - это длительнось. IMHO.
0
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 13
21.04.2012, 16:05  [ТС]
Не совсем, ноль в данном случае ничего не дает (это управляющий символ). Добавляем 7 - вызов пищалки (bell), добавляем 10 - переход каретки на новую строку. Можно после каждой из этих переменных 0 поставить, а выводить строку с 7 на конце (пибикать будет там где семерка).
Я уже нашел косяк. Надо поставить время задержки. Сейчас реализовал ее через ()()
просто выводим строку 300 раз.
Пибикает. 300 строк. Пибикает.
Assembler
1
2
3
4
5
6
7
8
    mov edi, 300
    l1:
    print h1, h1Len 
    dec edi
    cmp edi, 0
    je e
    jmp l1
    e:
теперь два звука нормально. Ищу функцию для задержки.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
21.04.2012, 16:15
The escape sequences work as follow:
ESC-[10;xx] selects the bell frequency in Hertz. The value should be in the range 21-32766, otherwise the result is undefined. If the `xx' argument is missing, the default value (750Hz) will apply, as in `ESC-[10].
ESC-[11;xx] selects the bell duration, in milli-seconds. If you specify more than 2 seconds, the default applies (125ms). Once again, if the `xx' argument is missing (ESC-[11]) the default value will be used.

To select, for example, a 50Hz pitch for one-second duration, you can "echo -e "\\33[10;50]\\33[11;1000]"" with bash (where "-e" means `understand Escape sequences'. If you use tcsh the same command spells "echo "\\033[10;50]\\033[11;1000]"".
Отсюда
0
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 13
21.04.2012, 16:35  [ТС]
С длиной писка и частотой проблем нет. Если попробовать вывести два звука разной частоты, то после начала вывода первого сразу начнется вывод второго (реально слышен только второй).
Их надо разграничить. Поиск задержки (delay) привел только к досовскому варианту:
не менее 1000 мкс.
Assembler
1
2
3
4
mov ah, 86h
mov cx, число_секунд
mov dx, число_микросекунд
int 15h
Подскажите, пожалуйста, аналог для nasm
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2012, 16:35
Помогаю со студенческими работами здесь

Escape последовательности unicode
Доброго! Есть ли в среде средства перевода кирилицы в данную кодировку, не пребегая к TRichEdit?

Escape - последовательности в строке не работают
Есть строка "Escape \rЗаработай" при передачи этой строки в TextBox при помощи Binding не работает Escape, получаю я эту строку с сервера...

Передача строк, содержащих escape-последовательности
Всем привет! Есть линуксовый скрипт: echo -e "QUOTES-CONTENT\nQUIT\n" | nc 127.0.0.1 2222 Ключик -e говорит команде echo, что в...

Вывод строки при помощи скрипта
На удаленном сервере есть страничка с содержимым: <html> Погода. +5 </html> Подскажите как вывести вторую строку с...

Оформление строки в консоли Windows через ESCAPE-последовательности
Собственно, хочу по ходу строки менять стиль/цвет и т.п. Конечно есть варианты: - установить параметры консоли - вывести кусок строки ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru