Помощь - Поиск - Пользователи - Календарь
Полная версия: музыка в Pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Студент
можноли записать музыку в Pascal, и если можно то с помощйю чего.
Romtek
ручками,
Sound и Delay
GLuk
Что за странные вопросы? blink.gif
ВАСИК разрабатывали для идиотов с кривыми руками, но даже на нем можно написать стоящую вещь. angry.gif
Да и был вроде такой сабж уже.

Конечно можно, док по портам SB'шника до *опы. Надеюсь под словом записать ты имеешь в виду именно ЗАПИСЬ с внешнего источника??
Но лучше ее записывать спец. прогами ;)
serge2k
Sound(t);
t - высота нужного тебе звука
Чтобы остановить звучание используй процедуру
nosound;
Время, которое должена звучать нота указываешь в процедурке
delay(n);
n - время в миллисекундах
Все звуки будут раздаваться из внутреннего динамика(пищалки)
CJ
Человек спрашивает про музыку, а не про это гадкое писщание спикера.
Если музыка, то надо работать со звуковой картой, а для этого уже надо юзать встроенный асм. Записывать звук надо через микрофон, сначала собрать звуковой поток в одну кучу. Это чисто теория. Для практики, зайди ко мне на сайт, там вразделе исходники(Delphi\Pascal), есть пару модулей для работы с музыкой.
Altair
Есть 2 способ. Использовать 32 битные компиляторы паскаля. Под них есть замечательная звуковая библиотека BASS.
CJ
Тем более, а где Win32, там и Api.
BlackShadow
А где API там и PlaySound smile.gif
А на сырцах смотрел? Там много чего для распеваний всяческих имеется.
Гость
F=Round(440*Exp(Ln(2)*(No-(10-Nn)/12)));
где No - номер октавы -3<= No <=4; Для основной октавы No=0.
Nn - номер ноты 1 - До, 2 - До#, 3 - Ре, и т. д. 12 - Cи.
вот так делаются ноты, но что бы не писать это для каждой ноты, моим модулем можно сделать как бы нотный стан и использовать только процедуру сануд с указанной нотой

Принцип работы:

1)Подключаем модуль
Uses Musik;

2)В разделе переменных задаем 5 массивов
Var
mus,mus1,mus2,mus_1,mus_2:array [1..12] of integer;
(Примечание! Элементов массива должно быть только 12! Они соответствуют номерам каждой ноты!)

3)в тексте основной программы вызывается процедура
New_song(i,mus,mus1,mus2,mus_1,mus_2);
где i - не нужный параметр, но его необходимо задавать, вместо i можно подставить любую переменную
типа integer;

После выполнения процедуры ваши массивы будут заполнены нотами, соответственно:
mus - 12 нот 0-вой октавы
mus1 - 12 нот 1-й октавы
mus_1 - 12 нот -1 октавы
(12- всмысле идет нота До, потом До диез, Ре и т.д.......
0-ая октава - это имеется ввиду начальная октава, 1 октава - вверх,
-1 октава - на 1 октаву вниз)
________________________________________________
откомпилируйте это в модуль:
Unit Musik;

Interface
Uses Crt;

Procedure New_song(i:integer;var mmus,mmus1,mmus2,mmus_1,mmus_2:array of integer);

Implementation
Procedure New_song;


BEGIN
i:=1;
While i<=12 do
begin
mmus[i]:=round(440*exp(Ln(2)*(0-(10-i)/12)));
inc(i);
end;

i:=1;
While i<=12 do
begin
mmus1[i]:=round(440*exp(Ln(2)*(1-(10-i)/12)));
inc(i);
end;

i:=1;
While i<=12 do
begin
mmus2[i]:=round(440*exp(Ln(2)*(2-(10-i)/12)));
inc(i);
end;

i:=1;
While i<=12 do
begin
mmus_1[i]:=round(440*exp(Ln(2)*(-1-(10-i)/12)));
inc(i);
end;

i:=1;
While i<=12 do
begin
mmus_2[i]:=round(440*exp(Ln(2)*(-2-(10-i)/12)));
inc(i);
end;
end;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.