Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Вниз

Как сгенерировать звук?   Найти похожие ветки 

 
D   (2003-03-24 16:43) [0]

Что-нибудь получше Beep, вроде паскалевских пр-р Sound, Delay, NoSound ?


 
Danilcha   (2003-03-24 17:19) [1]

Во, я генерил. Могу, конечно, свою программку дать, но я бы, например, на это бы не положился. :) Лучше в MSDN Platform SDK:

Graphics and Mult. | Windows Mult. | Waveform audio

Глянь, например, пример в Юзинг:

Example of Writing Waveform Data

Причём отмечу, что память под буффер нудно выделать именно так, как в примере:

// Allocate and lock memory for the waveform data.
hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwDataSize);

иначе, он будет играть не сразу а, наверное, куда-то этот буффер сначала копировать, так, что если ему подсовывать эти буфферы всё время для непрерывной игры, будет между ними запинаться.

Для непрерывной игры так и нудно делать - делать сразу 2-8 буффера, заполнять их звуком и подсовывать играть.

Вот. Ну а если нужно спикером гудеть - Windows.Beep(Freq, Delay). Но только для NT.


 
copyr25   (2003-03-24 19:02) [2]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure SetPort(address, Value:Word);
var
bValue: byte;
begin
bValue := trunc(Value and 255);
asm
mov dx, address
mov al, bValue
out dx, al
end;
end;

function GetPort(address:word):word;
var
bValue: byte;
begin
asm
mov dx, address
in al, dx
mov bValue, al
end;
GetPort := bValue;
end;

procedure Sound(Freq : Word);
var
B : Byte;
begin
if Freq > 18 then
begin
Freq := Word(1193181 div LongInt(Freq));
B := Byte(GetPort($61));
if (B and 3) = 0 then
begin
SetPort($61, Word(B or 3));
SetPort($43, $B6);
end;
SetPort($42, Freq);
SetPort($42, Freq shr 8);
end;
end;

procedure NoSound;
var
Value: Word;
begin
Value := GetPort($61) and $FC;
SetPort($61, Value);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Sound(440);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
NoSound;
end;

end.


 
D   (2003-03-24 19:09) [3]

Cпасибо большое, попытаемся разобраться :)


 
Anatoly Podgoretsky   (2003-03-24 19:11) [4]

Вот эти две переписать так


procedure SetPort(Address: Word; Value: Byte);
asm
xchg dx,ax
out dx, al
end;

function GetPort(Address: Word): Word;
asm
xchg dx, ax
in al, dx
end;



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.028 c
3-30261
Vladislav
2003-03-21 12:22
2003.04.10
Несколько картинок в DBGrid


14-30551
Supreme 2
2003-03-23 17:14
2003.04.10
Первые плоды творчества


1-30396
Intell
2003-03-27 07:42
2003.04.10
Как создатькаталог, если он не существует?


7-30632
@Ujin
2003-02-14 23:35
2003.04.10
И опять про печать...


3-30310
ksushishka
2003-03-18 18:23
2003.04.10
Не могу вытащить из поля типа TBlobField иконку в Gif формате





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский