Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
4-1204631197
Dmitry S
2008-03-04 14:46
2009.01.25
LDAP


1-1207386579
Da109
2008-04-05 13:09
2009.01.25
HTMLViewer


15-1228120463
Scot Storch
2008-12-01 11:34
2009.01.25
Окна приложения


15-1227781745
Vudu
2008-11-27 13:29
2009.01.25
Пользователей обяжут проверять лицензионность используемых програ


2-1228807718
noob_one
2008-12-09 10:28
2009.01.25
Разный размер исполнимого файла.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский