Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 19.01.2019, 22:28   #1 (permalink)
kirichal
Новичок
 
Регистрация: 19.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Мелодия в Pascal.ABC.Net

Написал мелодию по нотам. Если воспроизводить по шагам, то играет все ноты, если запустить на выполнение программу целиком, то половина нот не воспроизводится, в чем проблема?

program zvyk;

begin
System.Console.Beep(520,125); {до}
System.Console.Beep(880,125); {ля}
System.Console.Beep(880,125); {ля}
System.Console.Beep(784,125); {соль}
System.Console.Beep(880,125); {ля}
System.Console.Beep(698,125); {фа}
System.Console.Beep(520,125); {до}
System.Console.Beep(520,125); {до}
System.Console.Beep(520,125); {до}
System.Console.Beep(880,125); {ля}
System.Console.Beep(880,125); {ля}
System.Console.Beep(987,125); {си}
System.Console.Beep(784,125); {соль}
System.Console.Beep(520,375); {до с точкой}
system.Console.Beep(520,125); {до}
system.Console.Beep(587,125); {рэ}
system.Console.Beep(587,125); {рэ}
System.Console.Beep(987,125); {си}
System.Console.Beep(987,125); {си}
System.Console.Beep(880,125); {ля}
System.Console.Beep(784,125); {соль}
System.Console.Beep(698,125); {фа}
System.Console.Beep(698,125); {фа}
System.Console.Beep(880,125); {ля}
System.Console.Beep(880,125); {ля}
System.Console.Beep(784,125); {соль}
System.Console.Beep(880,125); {ля}
System.Console.Beep(698,375); {фа с точкой}

end.
kirichal вне форума   Ответить с цитированием

Старый 19.01.2019, 22:28
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если есть свободная минутка - займитесь прочтением похожих топиков

Ringtone Rotator - случайная мелодия на звонок
Как подключить усилитель от Radiotehnika Мелодия 104?
Перестала работать мелодия на входящий вызов...
Где отключается мелодия логотипа при включении?
Cisco и мелодия

Старый 20.01.2019, 10:32   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,775
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

К сожалению, с АВС и его производными дела никогда не имел и не собираюсь ввиду крайне негативного отношения к этим поделиям. Но так, из общих соображений, скорее всего — глюк транслятора: обращение к очередной процедуре происходит раньше завершения предыдущей.
Попробуйте вставить между каждой парой звуковых процедур небольшую задержку. Не знаю, есть ли в ABC.NET аналог паскалевской функции Delay(T), но, в крайнем случае, можно воспользоваться, например, циклическим счетом логарифма (один из самых медленных операторов), подобрав нужное число циклов. Типа
for i:=1 to 500 do x:=ln(5);
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Старый 20.01.2019, 11:34   #3 (permalink)
kirichal
Новичок
 
Регистрация: 19.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
К сожалению, с АВС и его производными дела никогда не имел и не собираюсь ввиду крайне негативного отношения к этим поделиям. Но так, из общих соображений, скорее всего — глюк транслятора: обращение к очередной процедуре происходит раньше завершения предыдущей.
Попробуйте вставить между каждой парой звуковых процедур небольшую задержку. Не знаю, есть ли в ABC.NET аналог паскалевской функции Delay(T), но, в крайнем случае, можно воспользоваться, например, циклическим счетом логарифма (один из самых медленных операторов), подобрав нужное число циклов. Типа
for i:=1 to 500 do x:=ln(5);
Интересная идея с циклическим счетом логарифма, попробую. Спасибо.
kirichal вне форума   Ответить с цитированием
Старый 20.01.2019, 12:19   #4 (permalink)
kirichal
Новичок
 
Регистрация: 19.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Попробовал циклический счет логарифма. Глюк сохраняется.

program zvyk;

var
x:real;
k,i:longint;

begin
k:=2147483648;
System.Console.Beep(520,125); {до, процедура для запуска звука}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(784,125); {соль}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(698,125); {фа}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(520,125); {до}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(520,125); {до}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(520,125); {до}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(987,125); {си}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(784,125); {соль}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(520,375); {до с точкой, т.е. четвертная плюс пол четвертной}
for i:=1 to k do
x:=ln(5);
system.Console.Beep(520,125); {до}
for i:=1 to k do
x:=ln(5);
system.Console.Beep(587,125); {рэ}
for i:=1 to k do
x:=ln(5);
system.Console.Beep(587,125); {рэ}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(987,125); {си}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(987,125); {си}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(784,125); {соль}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(698,125); {фа}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(698,125); {фа}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(784,125); {соль}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(880,125); {ля}
for i:=1 to k do
x:=ln(5);
System.Console.Beep(698,375); {фа с точкой}

end.
kirichal вне форума   Ответить с цитированием
Старый 20.01.2019, 12:22   #5 (permalink)
kirichal
Новичок
 
Регистрация: 19.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

В System.Console.Beep(880,125); длительность звучания минимальная, которая не дает сбоя это 400 вместо 125, подобрал опытным путем.
kirichal вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:52.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.