Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Звуки для 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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.016 c
15-1227961027
KELA
2008-11-29 15:17
2009.01.25
Delphi Помогите плз решить задачу с массивами


2-1229087384
webpauk
2008-12-12 16:09
2009.01.25
Скорость


2-1229358627
Laner6666
2008-12-15 19:30
2009.01.25
Поля MS Word


2-1228998782
Андрей (Начинающий)
2008-12-11 15:33
2009.01.25
Отслеживание ситемного времени.


1-1207244471
jiny
2008-04-03 21:41
2009.01.25
Как выдать список форм проекта, даже те которые еще не созданы ?