-
Во времена 286-386-х игрушки комповые уже процветали и дурно пахли, а звуковая карта была все же не крутой, но роскошью. И все игрушки поддерживали режим "PC-Speaker" рядом с "SoundBlaster" и фиг его знает чем. И комп через голимый PC-speaker умел крякать, пукать, издавать звуки влюбленных пар и ударов по морде, даже говорить человеческим голосом, хоть и сильно электронным. Все это делалось на переключении частота-длительность. Может, кто знает, где скачать, или у кого сохранилась (пиво гарантировано) библиотечку разных веселых звуков, пусть в виде asm-программ, но чтоб там в каком-то виде был массив "частота-длительность" Нужно для программирования странного девайса, но имеющего спикер и работающего по тому же (как ни странно :) принципу
-
> Petr V. Abramov © (23.11.08 03:18)
Петь. Но ведь раньше (в доисторические времена) не было принято, и не было стандартов на "хранение" звуков в отдельном файле! У меня есть уйма старых игрушек, которые выдают звуки через спикер.
-
> У меня есть уйма старых игрушек, которые выдают звуки через > спикер
> Германн © (23.11.08 05:00) [1]
у меня тоже. dosgames.ru :) мне пофиг "стандарты", пусть не в mp3. но если есть у кого коллекция, а если кто в инет выложил....
-
> не было принято, и не было стандартов на "хранение" звуков > в отдельном файле!
> пусть в виде asm-программ, но чтоб там в каком-то виде был > массив "частота-длительность"
sorry за персонально double
-
Через спикер можно даже mp3-шки играть (mp3pc.exe).
-
> Германн © (23.11.08 05:00) [1]
> Но ведь раньше (в доисторические времена) не было принято, > и не было стандартов на "хранение" звуков в отдельном файле! >
были, и еще была трекерная музыка с вполне определенными форматами файлов.
-
> еще была трекерная музыка с вполне определенными форматами > файлов.
Почему "была"? Она и сейчас есть. А если писалась профессионалами - ваще сказка. Например, музыка в Unreal...
-
> ваще сказка
мне тоже нравится.
-
Был драйвер под Win3, который имитировал звуковую карту, делаля вывод звука на спикер, хагружая процессор на 100%. Найти вряд ли смогу.
Если тебе надо просто проиграть, сделай преоразование ИКМ в ШИМ.
-
> Если тебе надо просто проиграть, сделай преоразование ИКМ > в ШИМ.
мне не надо играть, мне надо простенькие звуки проиграть на девайсе, к компу отношения не имеющием, но имеющем спикер. И нужна раскладка звуков по "частота-длительность"
-
> [9] Petr V. Abramov © (23.11.08 22:54) > мне не надо играть, мне надо простенькие звуки проиграть > на девайсе, к компу отношения не имеющием, но имеющем спикер. > И нужна раскладка звуков по "частота-длительность"
1. Звучать будет прямоугольно. 2. Если тебе нужен произвольный звук - юсай ШИМ, объём памяти если позволит. А если не позволит - совсем просто см. 1.
-
> 1. Звучать будет прямоугольно.
хренсним, мне не битлов играть, а кота, которого за яйца тянут ( без шуток)
> Если тебе нужен произвольный звук - юсай ШИМ,
это что?
-
Широтно-Импульсная-Модуляция
-
> 2. Если тебе нужен произвольный звук - юсай ШИМ, объём памяти > если позволит. А если не позволит - совсем просто см. 1. > Вообще то > И нужна раскладка звуков по "частота-длительность" предполагает не использование ШИМ, а именно частота-длительность, как например в электронных звонках. В соответствующие годы так таблиц в журналах было много. А я в свое время переводил ноты в подобную таблицы, это простая задача. А в некоторых Бейсиках была и функция, которая прямо из нот играла, только ноты в символьной нотации, как A4 Каждая нота имеет одназначное соответстивие по частоте и длительности.
-
Был драйвер под Win95, который эмулировал звуковую карту и пускал все звуки на спикер.
-
> iZEN (24.11.2008 14:22:14) [14]
Не все конечно, а только WAV
-
Const HappyBirthDay: Array [1..30] of TFullNote =
( (N: Mi1; D: 2), (N: Mi1; D: 2), (N: FaD1; D: 1),
(N: Mi1; D: 1), (N: La1; D: 1), (N: SolD1;D: 0.5), (N: Pause; D: 2),
(N: Mi1; D: 2), (N: Mi1; D: 2), (N: FaD1; D: 1),
(N: Mi1; D: 1), (N: Si1; D: 1), (N: La1; D: 0.5), (N: Pause; D: 2),
(N: Mi1; D: 2), (N: Mi1; D: 2), (N: DoD2; D: 1),
(N: La1; D: 1),
(N: SolD1;D: 2), (N: La1; D: 2), (N: SolD1;D: 1),
(N: FaD1; D: 1), (N: Pause; D: 2),
(N: Re2; D: 2), (N: Re2; D: 2), (N: DoD2; D: 1),
(N: La1; D: 1), (N: DoD2; D: 1), (N: Si1; D: 0.5), (N: Pause; D: 8) );
Unit Music;
Interface
Procedure Sound (Hz: Word);
Procedure NoSound;
Var Duration: Word;
Type TNote=(Pause,
Do1, DoD1, Re1, ReD1, Mi1, Fa1, FaD1, Sol1,SolD1,La1, LaD1, Si1,
Do2, DoD2, Re2, ReD2, Mi2, Fa2, FaD2, Sol2,SolD2,La2, LaD2, Si2);
TDuration = Single;
TFullNote = Record
N: TNote;
D: TDuration
End;
Procedure PlayNote (FullNote: TFullNote);
Procedure Play (Melody: Array of TFullNote);
Implementation
Function Stp (L: Double; R: ShortInt): Double;
Var i: Byte;
Pr: Double;
Begin
Pr:=1;
For i:=1 to Abs(R) do Pr:=Pr*L;
If R<0 Then Stp:=1/Pr
Else Stp:=Pr
End;
Var Base, Trans: Double;
Procedure Sound (Hz: Word); Assembler;
Asm
MOV BX,SP
MOV BX,SS:[BX+4]
MOV AX,34DDH
MOV DX,0012H
CMP DX,BX
JNC @@2
DIV BX
MOV BX,AX
IN AL,61H
TEST AL,3
JNZ @@1
OR AL,3
OUT 61H,AL
MOV AL,0B6H
OUT 43H,AL
@@1: MOV AL,BL
OUT 42H,AL
MOV AL,BH
OUT 42H,AL
@@2: RETF 2
End;
Procedure NoSound; Assembler;
Asm
IN AL,61H
AND AL,0FCH
OUT 61H,AL
RETF
End;
Procedure PlayNote (FullNote: TFullNote);
Begin
With FullNote do
Begin
If N=Pause
Then NoSound
Else Sound( Round( Base * Stp(Trans, Ord(N)) ) );
Delay( Duration / D )
End
End;
Procedure Play (Melody: Array of TFullNote);
Var i: Word;
Begin
For i:=Low(Melody) to High(Melody) do
PlayNote(Melody[i]);
NoSound
End;
Begin
Trans:=Exp(Ln(2)/12);
Base:=440*Stp(Trans, -10);
Duration:= 400;
End.
-
Вообще-то, всё что тебе нужно возьми в любом WAV файле, там же чистый сигнал записан и частота дискретизации указана. Думаю разложить сигнал в спектр по частотам не будт для тебя проблемой, длительность сама определится. Если в обработке звука 0, то на теорию и написание программы неделя уйдёт, а потом хоть кота, хоть Элвиса раскладывай по "частоте-длительности".
-
> Труп Васи Доброго © (24.11.08 16:31) [17]
а может, кто такую программу уже написал? :)
-
> [18] Petr V. Abramov © (24.11.08 18:33)
Конечно написали уже... на два поста выше.
-
> @!!ex © (24.11.08 18:57) [19]
вот только Delphi на девайсе не предусмотрено, интеловского асма он не понимает, проблема заполнения массива HappyBirthday осталась (она и есть сабж)
-
> [20] Petr V. Abramov © (24.11.08 19:10)
сорри, неправильно вопрос понял.
-
> Petr V. Abramov © (23.11.08 03:18) [0]
Я думаю, можно посмотреть этот код (привожу весь, но на covex можно не обращать внимания): (с) Alex Dedusenko - 2:462/37.23 - 10.08.97
program tst;
uses crt;
var
f : file;
b : array [1..64500] of byte;
i : word;
i1: word;
t : byte;
b1: byte;
covox: word;
c : string[2];
spd : word;
begin
if paramcount = 0 then
begin
writeln('Test program for *.WAV (Windows) files.');
writeln;
writeln('Usage:');
writeln(' TST <filename> [C#]');
writeln;
writeln(' <filename> - .WAV File Name,');
writeln(' C# - Covox port number.');
writeln;
writeln('If C# parameter is not specified Internal PC Speaker will be use.');
halt;
end;
if (paramcount > 1) and ((copy(paramstr(2),1,1) = 'C') or (copy(paramstr(2),1,1) = 'c')) then
begin
c:=copy(paramstr(2),2,1);
if c[1] in ['1'..'4'] then
begin
covox:=memw[0:$408+((byte(c[1]) and $f)-1)*2];
end
else
covox:=0;
end
else
covox:=0;
sound(20000); nosound;
t:=port[$61];
assign(f,paramstr(1));
reset(f,1);
blockread(f,b,64500,i);
close(f);
spd:=b[25]+(word(b[26]) shl 8);
spd:=$fffffff div longint(spd);
if covox = 0 then
begin
spd:=spd shr 7;
port[$43]:=0;
for i1:=44 to i do
begin
b1:=b[i1];
asm
mov al,b1
shr al,6
and al,2
out 61h,al
in al,40h
xchg al,ah
in al,40h
xchg al,ah
mov dx,ax
@m1:
xor al,al
out 43h,al
in al,40h
xchg al,ah
in al,40h
xchg al,ah
push dx
sub dx,ax
cmp dx,spd
pop dx
jb @m1
end;
end;
end
else
begin
spd:=spd shr 7;
port[$43]:=0;
for i1:=44 to i do
asm
lea bx,b
mov dx,covox
add bx,i1
dec bx
mov al,[bx]
out dx,al
in al,40h
xchg al,ah
in al,40h
xchg al,ah
mov dx,ax
@m1:
xor al,al
out 43h,al
in al,40h
xchg al,ah
in al,40h
xchg al,ah
push dx
sub dx,ax
cmp dx,spd
pop dx
jb @m1
end;
end;
port[$61]:=t;
end.
Я полагаю, что если перенаправить данные передаваемые на спикер в файл (первый asm блок), то Вы, Петр, получите именно то, что и хотели, собственно массив "частота-длительность". P.S. В код я не особо вникал ;)
-
> [13] Anatoly Podgoretsky © (24.11.08 12:19)
Насчёт нот оно так. Я говорю о произвольном спектре. Если автору нужет кошачий крик, надо ШИМ.
> [17] Труп Васи Доброго © (24.11.08 16:31)
А зачем спектр знать? Он же в звуке не собирается ничего менять.
> [18] Petr V. Abramov © (24.11.08 18:33)
А что там писать. Вот у тебя есть оцифрованный звук из WAV файла например, он представлен в Импулсно-кодовой модуляции (ИКМ), т.е. замерянными через рвные интервалы времени уровнями сигнала. Спектр такого сигнала будет в полосе 1/(T*2) Гц T - длительность интервала, для кота много не надо. Для вывода на спикер, тебе его надо преобразовать в ШИМ. Для кождого отсчёта делаешь очередную выборку из массива, ставишь 1 на порте спикера ждёшь некоторое время пропорциональное уровню, ставишь 0. для полосы 10000 Гц и разрядности 8 бит получится 10000*2^8=25600000 Гц это для оценки быстродействия процессора.
А может на контроллере ЦАП имеется?
-
> [8] AndreyV © (23.11.08 22:49) > Был драйвер под Win3
> [14] iZEN © (24.11.08 14:22) > Был драйвер под Win95, который эмулировал звуковую карту > и пускал все звуки на спикер.
А может и Win95. Ещё был эмулятор Sound Blaster под DOS. И даже работал с некоторыми играми. Он эмулировал только ЦАП, а не ФМ синтезатор.
> для полосы 10000 Гц
Имелось ввиду для частоты квантования 10000 Гц, полоса будет до 5000 Гц, что для кота может даже и лишнее.
-
> [24] AndreyV © (24.11.08 23:30) > до 5000 Гц, что для кота может даже и лишнее.
Прочитал о вокальных данных одомашненых представителей семейства кошачих, оказывается слух 10-80000 Гц и голос может быть за пределами человеческого восприятия. Вот так-то. http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%88%D0%BA%D0%B0
-
> AndreyV © (24.11.08 21:00) [23] > А может на контроллере ЦАП имеется?
а хрен его знает, что там имеется, есть Device Basic, в нем есть ф-ции "пищать на такой-то частоте", "заткнуться", и есть что-то типа OnTimer
> Andy BitOff © (24.11.08 20:35) [22]
я правильно понимаю, что приведенный код проигрывает wav через спикер? тогда это интереснее.
-
> Прочитал о вокальных данных одомашненых представителей семейства > кошачих, оказывается слух 10-80000 Гц
слушать будут не кошки, а люди :)
-
> Если автору нужет кошачий крик, надо ШИМ.
автору пофиг, ШИМ или ХАИМ, нужны исходные данные для паршивого качества мяукания в виде "частота-длительность"
-
> [28] Petr V. Abramov © (25.11.08 01:06)
Ну тогда действительно прийдётся сдвигать спектр, это посложнее самого вывода, а вывод остаётся как я описал. Но судя по > [28] Petr V. Abramov © (25.11.08 01:06) > в нем есть ф-ции "пищать на такой-то частоте", "заткнуться", > и есть что-то типа OnTimer
есть ли там такая возможность. Что за девайс такой?
-
> AndreyV © (25.11.08 01:31) [29] > есть ли там такая возможность.
есть. пищит-не-пищит в соответствии с программой, проверено :)
> Что за девайс такой?
терминал сбора данных. сканер штрих-кода с сауной и видеозалом :) девайс достался по наследству, других нет, поэтому про WinCE не травмируйте душу, господа, нет ее там, и линуха там нет, и дос нет. Есть Terminal Basic, для своих задач совсем недурно сделанный :)
-
> [30] Petr V. Abramov © (25.11.08 01:42) > есть. пищит-не-пищит в соответствии с программой, проверено
Ну это может генератр включается/выключается, надо чтобы был доступ к динамику, как на PC сделано.
-
> как на PC сделано.
сделано на Тайване, как на PC не сделано, надо частота-длительность
-
мож ту и спрашивал, вот спрошу в твоем стиле (почти)
а нахрена?
-
а на того, что у терминала счас вырисовывается типы сигналов: -ты молодец, после сканирования того, что надо -ты молодец, но сканируешь не то -оповещение это ессно, можно разрулить на уровне 1-2-3 писка, но: в цехе шумно, считать до трех умеют не все :) ессно, если ниче не нарою, на уровне на уровне "1-2-3 писка" и сделаю, уже готово, но хочется как лучше :))))
-
Возми нотные записи. На молодец - играешь веселую мелодию. Плохиш - траурную. Оповещение - третью. Как от нот перейти к частотам-длительностям написано выше.
-
Petr V. Abramov © (25.11.08 00:24) [26] Да. Так написано, но я не пробовал.
-
> Возми нотные записи. На молодец - играешь веселую мелодию. > Плохиш - траурную. Оповещение - третью.
Procedure BadSound;
begin
Windows.Beep(100,200);
end;
Procedure GoodSound;
begin
WinProcs.Beep(500,200);
end;
Практика показывает, что этого достаточно.
-
> Ega23 © (25.11.08 12:37) [37]
> Windows.Beep(100,200);
НЕТУ WINDOWS У ДЕВАЙСА
-
> НЕТУ WINDOWS У ДЕВАЙСА
А что есть? Управление динамиком есть? Просто ещё на старом добром Turbo Pascal 5.5 я, помнится, "Кан-кан" в заставку программы бипами вставлял.
-
> Управление динамиком есть?
есть, вот я хочу натырить раскладку всяких канканов и хрюков
-
> [40] Petr V. Abramov © (25.11.08 17:46) > есть, вот я хочу натырить раскладку всяких канканов и хрюков
Дак ты уж определись канканы или коты.
-
> есть, вот я хочу натырить раскладку всяких канканов и хрюков
Ля - 440 Гц, дальше вверх-вниз - не помню, но это ищется элементарно. Ноты - их в тырнете тоже полно. Перевести одно в другое - ну пиво мне поставишь, я тебе программку бипами напишу... :)
-
> Petr V. Abramov © (23.11.08 03:18)
> Нужно для программирования странного девайса, но имеющего спикер и > работающего по тому же (как ни странно :) принципу
Петь, телепатор подсказывает, что у этого странного девайса есть встроенный Васик. А у Васика 286 был оператор Play, который умел играть любую одноголосую мелодию (мелодия задавалась строковым параметром), и даже не только на переднем плане, но и в фоновом режиме. Так вот - если этот девайс, как ты говоришь, "работает по тому же принципу", то, может, и в его Васике такой оператор имеется? Надо бы доку посмотреть.
-
> Ega23 © (25.11.08 18:12) [42]
> Ля - 440 Гц, дальше вверх-вниз - не помню, но это ищется элементарно.
Каждый полутон - корень 12-й степени из 2-х. То есть:
Delta = Power(2, 1/12); A = 440; (первая октава)
Вверх: B = A * Delta; H = B * Delta; C = H * Delta; (пошла вторая октава) C# = C * Delta; и т.д.
Вниз - то же самое, только делим: G# = A / Delta; и т.д.
-
> Юрий Зотов © (25.11.08 18:43) [43]
все есть. и не проблема дернуть кота за яйца и записать звук и разложить его. я-то наивно думаю, что есть где-то библиотечка таких раскладок.
-
> Ega23 © (25.11.08 18:12) [42]
> Перевести одно в другое - ну пиво мне поставишь, я тебе > программку бипами напишу... :)
ДВА Крушовице, литра! нужно: 1. кот 2. звонок телефона Предложние в силе? :)
-
> Petr V. Abramov © (26.11.08 01:01) [46]
звонок достаточен в стиле улю-аля-улю-МЛЯ!
-
> звонок достаточен в стиле
А как сигнализация у машин завывает - достаточно?
-
> А как сигнализация у машин завывает - достаточно?
чтоб все талибы в бомбоубежище побежали, а начальство - проверять, не с-или ли машину?
-
> Petr V. Abramov © (27.11.08 00:44) [49] ++ а старшой талибов разорвался бы надвое, между машиной и бомбоубежищем :)
-
> чтоб все талибы в бомбоубежище побежали, а начальство - > проверять, не с-или ли машину?
Обсудить в стандартном месте в стандартное время?
-
> Petr V. Abramov © (26.11.08 00:44) [45]
> не проблема ... записать звук и разложить его.
Петь, ты не понял. Для оператора Play ничего не надо ни записывать, ни раскладывать. Никакие двоичные данные ему не нужны, мелодия задается СТРОКОЙ, содержащей СИМВОЛЬНЫЕ обозначения НОТ - фактически, прямо нотами. Например, первая строка (два такта) "чижика-пыжика" исполняется примерно так:
Play("01e4c4e4c4f4e4d2");
(первая октава, четвертушка ми, четвертушка до, четвертушка ми, четвертушка до, четвертушка фа, четвертушка ми, половинка ре).
Поэтому, если такой оператор в девайсе имеется, то никаких библиотек уже не надо, хоть Баха играй (в одноголосом исполнении, конечно). И любой, кому медведь на ухо не совсем наступил, тебе этого Баха через Play легко исполнит.
-
> [52] Юрий Зотов © (28.11.08 11:05) > Петь, ты не понял.
Да я уже тоже перестал понимать, что же надо. То коты, то канканы, то звонки Уля-ля.
-
> Например, первая строка (два такта) "чижика-пыжика" исполняется > примерно так: > > Play("01e4c4e4c4f4e4d2");
какая разница, задача натырить такого вида строк (или массивов), а не проиграть их
-
> какая разница, задача натырить такого вида строк (или массивов), > а не проиграть их
Ты мне уже Крушовице обещал, я тебе этих строк сегодня за пивом на слух нафигачу десяток. :)
-
> Petr V. Abramov © (28.11.08 15:03) [54]
А зачем тырить-то? Они и с нуля пишутся влегкую. Был бы только этот самый Play, чтоб на слух отлаживать.
"Лунную сонату" хошь? Давай Play. :о)
-
> Давай Play.
Или загрузочную DOS - дискету с Васиком.
-
> Юрий Зотов © (28.11.08 15:07) [56] > Юрий Зотов © (28.11.08 15:08) [57]
Вы мне тут уже таки не перебивайте моё пиво! :)))
-
> Ega23 © (28.11.08 15:15) [58]
Player несчастный!
-
вот же народ пошел! спрашиваю, где стырить, а они рассказывают, как самому сделать :)
-
-
> [60] Petr V. Abramov © (28.11.08 15:31) > вот же народ пошел! > спрашиваю, где стырить, а они рассказывают, как самому сделать > :)
Play Randomize Randomize :) Истиные растомайзы так играют.
-
> Сергей М. © (28.11.08 15:44) [61]
спасибо, то что надо, правда, не запускается (:
-
> Petr V. Abramov © (28.11.08 15:58) [63] ++
вот если б такая фигня еще wav открывать умела...
-
> вот же народ пошел! > спрашиваю, где стырить, а они рассказывают, как самому сделать :)
Абрамов, ты - жадный скопидом! Признайся, что тебе пива жалко! :)
-
> Ega23 © (28.11.08 16:03) [65]
пива мне не жалко, но в результате ни ничего кроме самары-городка или скорпов не нагенеришь :)
-
> Petr V. Abramov © (28.11.08 16:09) [66]
> ничего кроме самары-городка или скорпов не нагенеришь
"Мурку" хошь? Недорого будет. Зато классика.
-
> кроме самары-городка или скорпов не нагенеришь :)
Ты скажи, чё те надо. Могу и "Под небом Парижа", могу и Моцарта. Эта, может в "Бочку" сёдня?
-
> Ega23 © (28.11.08 16:40) [68]
если только поздно
-
> Petr V. Abramov © (28.11.08 15:58) [63] > >
С учетом того что это DOS-приложение, пожоже работающее с видеобуфером в граф.режиме напрямую, прими соотв.меры к настройке PIF
-
> если только поздно
Ну часов в 20?
-
Ну так ку?
-
> Ega23 © (28.11.08 16:51) [71]
20-21
-
Экспресс в 21:55 отходит. Так что если скорее в 21, чем в 20, то ну его нафик. А вот если скорее в 20, чем в 21 - то пуркуа бы и не па.
-
> Ega23 © (28.11.08 17:21) [74]
скорее 21...
-
> скорее 21...
Тогда next time
-
> Ega23 (28.11.2008 15:04:55) [55]
И напечатаешь или как Мойша напоешь?
-
> Ega23 (28.11.2008 15:15:58) [58]
Волки позорные, своих обирают.
|