-
Во времена 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)
Конечно написали уже... на два поста выше.
|