Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
ВнизЗвуки для PC-спикера Найти похожие ветки
← →
Petr V. Abramov © (2008-11-23 03:18) [0]Во времена 286-386-х игрушки комповые уже процветали и дурно пахли, а звуковая карта была все же не крутой, но роскошью. И все игрушки поддерживали режим "PC-Speaker" рядом с "SoundBlaster" и фиг его знает чем.
И комп через голимый PC-speaker умел крякать, пукать, издавать звуки влюбленных пар и ударов по морде, даже говорить человеческим голосом, хоть и сильно электронным. Все это делалось на переключении частота-длительность.
Может, кто знает, где скачать, или у кого сохранилась (пиво гарантировано) библиотечку разных веселых звуков, пусть в виде asm-программ, но чтоб там в каком-то виде был массив "частота-длительность"
Нужно для программирования странного девайса, но имеющего спикер и работающего по тому же (как ни странно :) принципу
← →
Германн © (2008-11-23 05:00) [1]
> Petr V. Abramov © (23.11.08 03:18)
Петь. Но ведь раньше (в доисторические времена) не было принято, и не было стандартов на "хранение" звуков в отдельном файле! У меня есть уйма старых игрушек, которые выдают звуки через спикер.
← →
Petr V. Abramov © (2008-11-23 05:06) [2]
> У меня есть уйма старых игрушек, которые выдают звуки через
> спикер
> Германн © (23.11.08 05:00) [1]
у меня тоже. dosgames.ru :)
мне пофиг "стандарты", пусть не в mp3. но если есть у кого коллекция, а если кто в инет выложил....
← →
Petr V. Abramov © (2008-11-23 05:09) [3]
> не было принято, и не было стандартов на "хранение" звуков
> в отдельном файле!
> пусть в виде asm-программ, но чтоб там в каком-то виде был
> массив "частота-длительность"
sorry за персонально double
← →
Тыщ © (2008-11-23 10:32) [4]Через спикер можно даже mp3-шки играть (mp3pc.exe).
← →
DVM © (2008-11-23 11:40) [5]
> Германн © (23.11.08 05:00) [1]
> Но ведь раньше (в доисторические времена) не было принято,
> и не было стандартов на "хранение" звуков в отдельном файле!
>
были, и еще была трекерная музыка с вполне определенными форматами файлов.
← →
Dimaxx © (2008-11-23 22:36) [6]
> еще была трекерная музыка с вполне определенными форматами
> файлов.
Почему "была"? Она и сейчас есть. А если писалась профессионалами - ваще сказка. Например, музыка в Unreal...
← →
DVM © (2008-11-23 22:38) [7]
> ваще сказка
мне тоже нравится.
← →
AndreyV © (2008-11-23 22:49) [8]Был драйвер под Win3, который имитировал звуковую карту, делаля вывод звука на спикер, хагружая процессор на 100%. Найти вряд ли смогу.
Если тебе надо просто проиграть, сделай преоразование ИКМ в ШИМ.
← →
Petr V. Abramov © (2008-11-23 22:54) [9]
> Если тебе надо просто проиграть, сделай преоразование ИКМ
> в ШИМ.
мне не надо играть, мне надо простенькие звуки проиграть на девайсе, к компу отношения не имеющием, но имеющем спикер. И нужна раскладка звуков по "частота-длительность"
← →
AndreyV © (2008-11-24 02:21) [10]> [9] Petr V. Abramov © (23.11.08 22:54)
> мне не надо играть, мне надо простенькие звуки проиграть
> на девайсе, к компу отношения не имеющием, но имеющем спикер.
> И нужна раскладка звуков по "частота-длительность"
1. Звучать будет прямоугольно.
2. Если тебе нужен произвольный звук - юсай ШИМ, объём памяти если позволит. А если не позволит - совсем просто см. 1.
← →
Petr V. Abramov © (2008-11-24 05:12) [11]
> 1. Звучать будет прямоугольно.
хренсним, мне не битлов играть, а кота, которого за яйца тянут ( без шуток)
> Если тебе нужен произвольный звук - юсай ШИМ,
это что?
← →
KilkennyCat © (2008-11-24 11:11) [12]Широтно-Импульсная-Модуляция
← →
Anatoly Podgoretsky © (2008-11-24 12:19) [13]
> 2. Если тебе нужен произвольный звук - юсай ШИМ, объём памяти
> если позволит. А если не позволит - совсем просто см. 1.
>
Вообще то
> И нужна раскладка звуков по "частота-длительность"
предполагает не использование ШИМ, а именно частота-длительность, как например в электронных звонках.
В соответствующие годы так таблиц в журналах было много.
А я в свое время переводил ноты в подобную таблицы, это простая задача. А в некоторых Бейсиках была и функция, которая прямо из нот играла, только ноты в символьной нотации, как A4
Каждая нота имеет одназначное соответстивие по частоте и длительности.
← →
iZEN © (2008-11-24 14:22) [14]Был драйвер под Win95, который эмулировал звуковую карту и пускал все звуки на спикер.
← →
Anatoly Podgoretsky © (2008-11-24 14:24) [15]> iZEN (24.11.2008 14:22:14) [14]
Не все конечно, а только WAV
← →
AlexKniga © (2008-11-24 16:23) [16]
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,
C1, Cs1, D1, Ds1, E1, F1, Fs1, G1, Gs1, A1, As1, B1,
C2, Cs2, D2, Ds2, E2, F2, Fs2, G2, Gs2, A2, As2, B2);}
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);
{перечисление нот
*1, *2 - первая, вторая октавы
??D? (?s?) - диез (sharp)}
TDuration = Single;
TFullNote = Record
N: TNote; {Нота}
D: TDuration {Длительность}
End;
{Пример вся 1ая октава + До второй}
{Const Melody0: Array [1..8] of TFullNote =
( (N: Do1; D: 1), (N: Re1; D: 1), (N: Mi1; D: 1), (N: Fa1; D: 1),
(N: Sol1;D: 1), (N: La1; D: 1), (N: Si1; D: 1), (N: Do2; D: 1) );}
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.
← →
Труп Васи Доброго © (2008-11-24 16:31) [17]Вообще-то, всё что тебе нужно возьми в любом WAV файле, там же чистый сигнал записан и частота дискретизации указана. Думаю разложить сигнал в спектр по частотам не будт для тебя проблемой, длительность сама определится. Если в обработке звука 0, то на теорию и написание программы неделя уйдёт, а потом хоть кота, хоть Элвиса раскладывай по "частоте-длительности".
← →
Petr V. Abramov © (2008-11-24 18:33) [18]
> Труп Васи Доброго © (24.11.08 16:31) [17]
а может, кто такую программу уже написал? :)
← →
@!!ex © (2008-11-24 18:57) [19]> [18] Petr V. Abramov © (24.11.08 18:33)
Конечно написали уже... на два поста выше.
← →
Petr V. Abramov © (2008-11-24 19:10) [20]
> @!!ex © (24.11.08 18:57) [19]
вот только Delphi на девайсе не предусмотрено, интеловского асма он не понимает, проблема заполнения массива HappyBirthday осталась (она и есть сабж)
← →
@!!ex © (2008-11-24 19:52) [21]> [20] Petr V. Abramov © (24.11.08 19:10)
сорри, неправильно вопрос понял.
← →
Andy BitOff © (2008-11-24 20:35) [22]> 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));
{$I+}
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.
В код я не особо вникал ;)
← →
AndreyV © (2008-11-24 21:00) [23]> [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 Гц это для оценки быстродействия процессора.
А может на контроллере ЦАП имеется?
← →
AndreyV © (2008-11-24 23:30) [24]
> [8] AndreyV © (23.11.08 22:49)
> Был драйвер под Win3
> [14] iZEN © (24.11.08 14:22)
> Был драйвер под Win95, который эмулировал звуковую карту
> и пускал все звуки на спикер.
А может и Win95.
Ещё был эмулятор Sound Blaster под DOS. И даже работал с некоторыми играми. Он эмулировал только ЦАП, а не ФМ синтезатор.
> для полосы 10000 Гц
Имелось ввиду для частоты квантования 10000 Гц, полоса будет до 5000 Гц, что для кота может даже и лишнее.
← →
AndreyV © (2008-11-25 00:01) [25]> [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
← →
Petr V. Abramov © (2008-11-25 00:24) [26]
> AndreyV © (24.11.08 21:00) [23]
> А может на контроллере ЦАП имеется?
а хрен его знает, что там имеется, есть Device Basic, в нем есть ф-ции "пищать на такой-то частоте", "заткнуться", и есть что-то типа OnTimer
> Andy BitOff © (24.11.08 20:35) [22]
я правильно понимаю, что приведенный код проигрывает wav через спикер?
тогда это интереснее.
← →
Petr V. Abramov © (2008-11-25 00:25) [27]
> Прочитал о вокальных данных одомашненых представителей семейства
> кошачих, оказывается слух 10-80000 Гц
слушать будут не кошки, а люди :)
← →
Petr V. Abramov © (2008-11-25 01:06) [28]
> Если автору нужет кошачий крик, надо ШИМ.
автору пофиг, ШИМ или ХАИМ, нужны исходные данные для паршивого качества мяукания в виде "частота-длительность"
← →
AndreyV © (2008-11-25 01:31) [29]> [28] Petr V. Abramov © (25.11.08 01:06)
Ну тогда действительно прийдётся сдвигать спектр, это посложнее самого вывода, а вывод остаётся как я описал. Но судя по
> [28] Petr V. Abramov © (25.11.08 01:06)
> в нем есть ф-ции "пищать на такой-то частоте", "заткнуться",
> и есть что-то типа OnTimer
есть ли там такая возможность. Что за девайс такой?
← →
Petr V. Abramov © (2008-11-25 01:42) [30]
> AndreyV © (25.11.08 01:31) [29]
> есть ли там такая возможность.
есть. пищит-не-пищит в соответствии с программой, проверено :)
> Что за девайс такой?
терминал сбора данных. сканер штрих-кода с сауной и видеозалом :)
девайс достался по наследству, других нет, поэтому про WinCE не травмируйте душу, господа, нет ее там, и линуха там нет, и дос нет. Есть Terminal Basic, для своих задач совсем недурно сделанный :)
← →
AndreyV © (2008-11-25 02:01) [31]> [30] Petr V. Abramov © (25.11.08 01:42)
> есть. пищит-не-пищит в соответствии с программой, проверено
Ну это может генератр включается/выключается, надо чтобы был доступ к динамику, как на PC сделано.
← →
Petr V. Abramov © (2008-11-25 02:07) [32]
> как на PC сделано.
сделано на Тайване, как на PC не сделано, надо частота-длительность
← →
тимохов (2008-11-25 02:12) [33]мож ту и спрашивал, вот спрошу в твоем стиле (почти)
а нахрена?
← →
Petr V. Abramov © (2008-11-25 02:24) [34]а на того, что у терминала счас вырисовывается типы сигналов:
-ты молодец, после сканирования того, что надо
-ты молодец, но сканируешь не то
-оповещение
это ессно, можно разрулить на уровне 1-2-3 писка, но: в цехе шумно, считать до трех умеют не все :)
ессно, если ниче не нарою, на уровне на уровне "1-2-3 писка" и сделаю, уже готово, но хочется как лучше :))))
← →
AlexKniga © (2008-11-25 12:20) [35]Возми нотные записи. На молодец - играешь веселую мелодию. Плохиш - траурную. Оповещение - третью.
Как от нот перейти к частотам-длительностям написано выше.
← →
Andy BitOff (PPC) (2008-11-25 12:30) [36]Petr V. Abramov © (25.11.08 00:24) [26]
Да. Так написано, но я не пробовал.
← →
Ega23 © (2008-11-25 12:37) [37]
> Возми нотные записи. На молодец - играешь веселую мелодию.
> Плохиш - траурную. Оповещение - третью.Procedure BadSound;
begin
Windows.Beep(100,200);
end;
Procedure GoodSound;
begin
WinProcs.Beep(500,200);
end;
Практика показывает, что этого достаточно.
← →
Petr V. Abramov © (2008-11-25 17:18) [38]
> Ega23 © (25.11.08 12:37) [37]
> Windows.Beep(100,200);
НЕТУ WINDOWS У ДЕВАЙСА
← →
Ega23 © (2008-11-25 17:27) [39]
> НЕТУ WINDOWS У ДЕВАЙСА
А что есть? Управление динамиком есть? Просто ещё на старом добром Turbo Pascal 5.5 я, помнится, "Кан-кан" в заставку программы бипами вставлял.
← →
Petr V. Abramov © (2008-11-25 17:46) [40]
> Управление динамиком есть?
есть, вот я хочу натырить раскладку всяких канканов и хрюков
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.058 c