Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как подать на колонки звук определенной частоты??? [D7, WinXP]


rolex ©   (2005-07-24 20:06:00) 

Нужна процедурка, в которую забиваешь цифру (частота, Гц), и из колонок будет воспроизводиться звук заданной частоты. Ну нигде не нашёл, может кто знает?


Zeqfreed   (2005-08-15 12:45:00) [1]

CTPAX.RU ©   (15.08.05 9:06) [10]
Т.е. тебе гораздо легче написать вопрос в форум и неизвестно сколько ждать ответ, который посредством поисковиков находится на несколько секунд? По-моему, это, как минимум, странно.


vrem   (2005-08-15 10:41:00) [2]

>спросить у знающих людей и быстро перейти
Точно! И ещё что бы формулировали определённым образом. а то что такое - ну может ответили, но не в привычной/ожидаемой форме. Воспринять и не получилось... да ещё злоба появилась. вот и ходи после такого по форумам...
;)


CTPAX.RU   (2005-08-15 09:06:00) [3]

> А слово яндекс о чем-нибудь говорит?
 -(со злобой в голосе): Форумы в т.ч. для того и существуют, чтобы не лазить по поисковикам, а спросить у знающих людей и быстро перейти по КОНКРЕТНОЙ ссылке типа этой:
http://www.delphi32.com/vcl/5039 .


Zeqfreed   (2005-08-15 01:46:00) [4]

rolex   (24.07.05 20:06)
Кстати, по сабжу =)


uses mmSystem;

procedure MakeSound(Frequency,Duration : Integer);
var
WaveFormatEx: TWaveFormatEx;
MS: TMemoryStream;
i, TempInt, DataCount, RiffCount: integer;  
SoundValue: byte;  
w: double; // omega ( 2 * pi * frequency)
SampleRate : Integer;
const
Mono: Word = $0001;
RiffId: string = 'RIFF';
WaveId: string = 'WAVE';
FmtId: string = 'fmt ';  
DataId: string = 'data';  
begin
SampleRate := 44100;
with WaveFormatEx do  
begin
  wFormatTag := WAVE_FORMAT_PCM;  
  nChannels := Mono;  
  nSamplesPerSec := SampleRate;
  wBitsPerSample := $0008;
  nBlockAlign := (nChannels * wBitsPerSample) div 8;
  nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;  
  cbSize := 0;
end;
MS := TMemoryStream.Create;
with MS do  
begin
  {Calculate length of sound data and of file data}
  DataCount := (Duration * SampleRate) div 1000; // sound data
  RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
    SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // file data
  {write out the wave header}
  Write(RiffId[1], 4); // 'RIFF'
  Write(RiffCount, SizeOf(DWORD)); // file data size
  Write(WaveId[1], Length(WaveId)); // 'WAVE'
  Write(FmtId[1], Length(FmtId)); // 'fmt '
  TempInt := SizeOf(TWaveFormatEx);
  Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
  Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record
  Write(DataId[1], Length(DataId)); // 'data'
  Write(DataCount, SizeOf(DWORD)); // sound data size
  {calculate and write out the tone signal} // now the data values
  w := 2 * Pi * Frequency; // omega
  for i := 0 to DataCount - 1 do
  begin
    SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate
    Write(SoundValue, SizeOf(Byte));
  end;
  {now play the sound}
  sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
  MS.Free;
end;
end;


Линк на источник, к сожалению, утерян.


Zeqfreed   (2005-08-15 01:42:00) [5]

CTPAX.RU ©   (14.08.05 10:27) [7]
http://www.yandex.ru/yandsearch?rpt=rad&text=torry
А слово яндекс о чем-нибудь говорит? Первый линк.


CTPAX.RU   (2005-08-14 10:27:00) [6]

А где скачать MidiGen? Слово Torry мне мало что говорит.


vrem   (2005-08-14 08:29:00) [7]

rolex   (24.07.05 20:06)
Посмотри эту программу. Реализуется согласно [2], может изменишь под себя. Ха, 96-го года, но компилируется под дельфи 7 без пинков :)

На странице http://bbs.ru/cgi-bin/bbs2html?pub/language/delphi
находишь это:

sweepgen.arj    13k Dec-96  SweepGen turns a sound-equipped PC into an  Audio
                              Oscillator and Sweep Generator.   SweepGen is
                              written with Borland's Delphi  2.0, and full
                              source is included, which  will be helpful in
                              understanding  programming sound hardware under
                              Windows.


wnew   (2005-08-14 01:04:00) [8]


> rolex   (25.07.05 11:36) [3]
> MidiGen - установил, нету там такого.


Вчера  пытался возразить, но с дельфийскими мастерами что-то не не так было, поэтому не прошло. Повторяю.

Всё необходимое в MidiGen есть. Буквенное обозначение нот, чем не частота?
procedure TForm1.Button3Click(Sender: TObject);
begin
 MidiGen1.Instrument := mgAcousticSteelGuitar;
 MidiGen1.Duration := 100;
 MidiGen1.PlayString('C4,50;D,E,F,G,A,B');

end;


А выбором инструмента можете звук окрашивать от флейты до барабана:)

Можно и без этих компонентов:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := True;
 Timer1.Interval := 1000;
 PlaySound('EINS',HInstance,SND_ASYNC or SND_RESOURCE or SND_NODEFAULT);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 PlaySound('DREI',HInstance,SND_ASYNC or SND_RESOURCE or SND_NODEFAULT);
 Timer1.Interval := 400;
 Timer1.Enabled := False;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
срабатывает по событию таймера.

Просто записываешь в рессурсы звуки нужной частоты и длительностью с некоторым запасом и воспроизводишь их, как вздумается.


CTPAX.RU   (2005-08-11 18:13:00) [9]

Люди, ну ответьте кто-нибудь поподробнее. Это многим надо. Желательно, чтобы можно было задавать не только частоту, но и длительность, и другие параметры звучания.


rolex   (2005-07-25 11:36:00) [10]


>
> DrPass ©   (24.07.05 21:37) [1]
> windows.beep

Нужно из колонок, а не из системного динамика.


> Sound   (24.07.05 22:19) [2]

MidiGen - установил, нету там такого.


Sound   (2005-07-24 22:19:00) [11]

auxGetDevCaps
auxGetNumDevs
auxGetVolume
auxOutMessage
auxSetVolume
PlaySound
sndPlaySound
waveInAddBuffer
waveInClose
waveInGetDevCaps
waveInGetErrorText
waveInGetID
waveInGetNumDevs
waveInGetPosition
waveInMessage
waveInOpen
waveInPrepareHeader
waveInProc
waveInReset
waveInStart
waveInStop
waveInUnprepareHeader
waveOutBreakLoop
waveOutClose
waveOutGetDevCaps
waveOutGetErrorText
waveOutGetID
waveOutGetNumDevs
waveOutGetPitch
waveOutGetPlaybackRate
waveOutGetPosition
waveOutGetVolume
waveOutMessage
waveOutOpen
waveOutPause
waveOutPrepareHeader
waveOutProc
waveOutReset
waveOutRestart
waveOutSetPitch
waveOutSetPlaybackRate
waveOutSetVolume
waveOutUnprepareHeader
waveOutWrite

Хотя, есть хороший компонент - MidiGen. Если нужно, ищи на Torry.


DrPass   (2005-07-24 21:37:00) [12]

windows.beep


Наверх

Титульная страница Поиск, карта сайта Написать письмо