Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.09.2009, 21:50
Аватар для grigory
grigory grigory вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 17
Репутация: 11
Печаль Терминатор и размер блока

Пытаюсь написать программку. Использую в ней функции BlockSize, Terminated, а Delphi 7 утверждает что не знаит таких... Как кто думает в чем дело?
Ответить с цитированием
  #2  
Старый 19.09.2009, 22:11
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

скорее всего не подключены нужные модули в Uses
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 19.09.2009, 22:16
Аватар для grigory
grigory grigory вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 17
Репутация: 11
По умолчанию

Вот основной вопрос тогда: какие не подключены?
Ответить с цитированием
  #4  
Старый 19.09.2009, 22:37
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

дык,мы же не телепаты ... показывай код
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #5  
Старый 19.09.2009, 22:46
Аватар для grigory
grigory grigory вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 17
Репутация: 11
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MMSystem, ComCtrls , MPlayer, Menus, Buttons, ExtCtrls, Gauges, WinSock;


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

var
  Form1: TForm1;
  WOutCaps: TWAVEOUTCAPS;
  wfx: TWAVEFORMATEX;
  hEvent: THandle;
  hwo: HWAVEOUT;
  si: TSYSTEMINFO;
  wh: array[0..1] of TWAVEHDR;
  Buf: array[0..1] of PChar;
  CnlBuf: array[0..1] of PChar;


implementation

{$R *.dfm}

//проверяем наличие аудиоустройства
procedure TForm1.CheckAudio(Sender: TObject);
begin
 FillChar(WOutCaps, SizeOf(TWAVEOUTCAPS), #0);
 if MMSYSERR_NOERROR <> WaveOutGetDevCaps(0, @WOutCaps, SizeOf(TWAVEOUTCAPS)) then
 begin
  ShowMessage('Error');
  Exit;
 end;
end;
//заканчиваем проверять наличие аудиоустройства
//заполняем структуру формата
procedure TForm1.StructFormat;
begin
 FillChar(wfx, Sizeof(TWAVEFORMATEX), #0);
 with wfx do
 begin
  wFormatTag:= WAVE_FORMAT_PCM;
  nChannels:= 2;
  nSamplesPerSec:= 44100;
  wBitsPerSample:= 16;
  nBlockAlign:= wBitsPerSample div 8 * nChannels;
  nAvgBytesPerSec:= nSamplesPerSec * nBlockAlign;
  cbSize:=0;
 end;
end;
//заканчиваем заполнять структуру формата
//открываем устройство
procedure TForm1.OpenDevice;
begin
 hEvent := CreateEvent(nil, false, false, nil);
 if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then
 begin
  GetSystemInfo(si);
  buf[0]:= VirtualAlloc(nil, ( BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  buf[1]:= PChar(LongInt(Buf[1])+ BlockSize);
  ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize);
  ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2);
  for I:= 0 to 1 do
  begin
   FillChar(wh[i], sizeof(TWAVEHDR), #0);
   wh[i].lpData:= buf[i];
   wh[i].dwBufferLength:= BlockSize;
   waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR));
  end;
  Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]);
  Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]);
  Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2);
  I:=0;
  while not Terminated do
  begin
   waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR));
   WaitForSingleObject(hEvent, INFINITE);
   I:=I xor 1;
   Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]);
   Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]);
   Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2);
  end;
 end;
end;





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

procedure TForm1.Button2Click(Sender: TObject);
begin
waveOutReset(hwo);
waveOutUnprepareHeader(hwo, @wh[0], sizeof(WAVEHDR));
waveOutUnprepareHeader(hwo, @wh[1], sizeof(WAVEHDR));
CloseHandle(hEvent);
end;

end.

Нашел код. Решил воплотить в жизнь, а не работает. Всё что знал, всё подключил.
Ответить с цитированием
  #6  
Старый 19.09.2009, 23:19
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
procedure TForm1.OpenDevice;
var
BlockSize:dword;
ChlBuf :array of string;
i:integer;
Terminated :boolean;
begin
 hEvent := CreateEvent(nil, false, false, nil);
 if WaveOutOpen(@hwo, 0, @wfx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then
 begin
  GetSystemInfo(si);
  buf[0]:= VirtualAlloc(nil, ((BlockSize * 4)+ si.dwPageSize-1) div si.dwPagesize * si.dwPageSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  buf[1]:= PChar(LongInt(Buf[1])+ BlockSize);
  ChlBuf[0]:= PChar(LongInt(Buf[1]) + BlockSize);
  ChlBuf[1]:= PChar(LongInt(CnlBuf[0]) + BlockSize div 2);
  for I:= 0 to 1 do
  begin
   FillChar(wh[i], sizeof(TWAVEHDR), #0);
   wh[i].lpData:= buf[i];
   wh[i].dwBufferLength:= BlockSize;
   waveOutPrepareHeader(hwo, @wh[i], sizeof(TWAVEHDR));
  end;
//  Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура
//  Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура
//  Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2);	// какая-то процедура
  I:=0;
  while not Terminated do
  begin
   waveOutWrite(hwo, @wh[i], sizeof(WAVEHDR));
   WaitForSingleObject(hEvent, INFINITE);
   I:=I xor 1;
//   Generator(CnlBuf[0], Typ[0], Freq[0], Lev[0], BlockSize div 2, tPred[0]); // какая-то процедура
//   Generator(CnlBuf[1], Typ[1], Freq[1], Lev[1], BlockSize div 2, tPred[1]); // какая-то процедура
//   Mix(buf[i], CnlBuf[0], CnlBuf[1], BlockSize div 2); // какая-то процедура
  end;
 end;
end;

Процедур: Generator и Mix нет в коде ... поэтому он их и не находит
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 19.09.2009 в 23:21.
Ответить с цитированием
  #7  
Старый 04.10.2009, 15:57
Аватар для grigory
grigory grigory вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 17
Репутация: 11
По умолчанию

Вот программа эта как бы предназначена для вывода звука... Сам звук генерируется функциями генератор и микс(смешаваются 2 канала). Функции не известны поэтому вопрос: куда надо что присвоить чтоб появился звук? Звук нужен банальный писк заданой частотой. В гугле одни и теже примеры и ничегошеньки не понятно.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter