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

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

Азбука Морзе [Win2k, WinXP]


lota ©   (2004-06-29 20:27:00) 

Подскажите, плиз, по возможности с примерчиком, как в 2000 винде
сформировать телеграфную азбуку морзе через колонки. Можно на е-mail: lota(@)nm.ru.


Burich   (2004-07-30 03:42:00) [1]

Ну вы и живодеры...
Хоть подгоретский сказал про старый добрый спикер...


Anatoly Podgoretsky   (2004-07-02 23:01:00) [2]

Beep и никаких PlaySound


Константинов   (2004-07-02 22:57:00) [3]

Тут нет необходимости ворошить API. Достаточно PlaySound

Пример из FAQ

uses  
 MMSystem;  

type  
 TVolumeLevel = 0..127;  

procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel);  
 {writes tone to memory and plays it}  
var  
 WaveFormatEx: TWaveFormatEx;  
 MS: TMemoryStream;  
 i, TempInt, DataCount, RiffCount: integer;  
 SoundValue: byte;  
 w: double; // omega ( 2 * pi * frequency)  
const  
 Mono: Word = $0001;  
 SampleRate: Integer = 11025; // 8000, 11025, 22050, or 44100  
 RiffId: string = 'RIFF';  
 WaveId: string = 'WAVE';  
 FmtId: string = 'fmt ';  
 DataId: string = 'data';  
begin  
 if Frequency > (0.6 * SampleRate) then  
 begin  
   ShowMessage(Format('Sample rate of %d is too Low to play a tone of %dHz',  
     [SampleRate, Frequency]));  
   Exit;  
 end;  
 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;  

// How to call the function:  

procedure TForm1.Button1Click(Sender: TObject);  
begin  
 MakeSound(1200, 1000, 60);  
end;  

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

Нужно только немного усложнить цикл записи данных в MemorySteam.

Удачи!


S@shka   (2004-07-01 16:23:00) [4]

Как вариант...
1. Необходимо сопоставление букв - значкам азбуки.
НАпример
А .-
Б -...
и т.д
далее тока, тире - определенный тон.
Определяем массив
в который и занесем тоны
затем с помощью waveAPI открываем устройство вывода и проигрываем
данный массивчик :)


Рыба   (2004-07-01 16:16:00) [5]

Ну я человек рассеяный с улицы бассеяной :))
Вместо ника указал мыло..


FilinPro@list.ru   (2004-07-01 16:13:00) [6]

Смог бы, если бы знал азбуку морзе =)
Ещё проблема, что у меня нет по рукой W2k и что завтра уезжаю в отпуск.. Впрочем, попробую примерчик сваять.


lota   (2004-07-01 06:05:00) [7]

Для рыбы
А смогли бы вы написать подобное?
О размере благодарности можно договориться.
lota


Рыба   (2004-06-29 23:24:00) [8]

Можно найти (или создать) файл wav, и с нужной частотой проигрывать его.


Наверх

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