Мелодия в 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. |
К сожалению, с АВС и его производными дела никогда не имел и не собираюсь ввиду крайне негативного отношения к этим поделиям. Но так, из общих соображений, скорее всего — глюк транслятора: обращение к очередной процедуре происходит раньше завершения предыдущей.
Попробуйте вставить между каждой парой звуковых процедур небольшую задержку. Не знаю, есть ли в ABC.NET аналог паскалевской функции Delay(T), но, в крайнем случае, можно воспользоваться, например, циклическим счетом логарифма (один из самых медленных операторов), подобрав нужное число циклов. Типа for i:=1 to 500 do x:=ln(5); |
Цитата:
|
Попробовал циклический счет логарифма. Глюк сохраняется.
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. |
В System.Console.Beep(880,125); длительность звучания минимальная, которая не дает сбоя это 400 вместо 125, подобрал опытным путем.
|
Часовой пояс GMT +4, время: 15:12. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.