Posted by : Unknown Jumat, 08 Mei 2015

Artikel mengenai cara menghasilkan bunyi tone menggunakan Delphi. Bunyi tone yang dihasilkan kemudian dapat disimpan sebagai file WAV.

Pendahuluan

Untuk membuat bunyi tone yang frekuensinya ditentukan saat runtime, kita bisa menggunakan Beep() milik Windows. Fungsi ini simple tapi sayangnya mungkin untuk beberapa kasus, tidak cocok. Contohnya suara beep yang dibangkitkan, tidak bisa disimpan di file.
Problem ini sempat mengemuka di milis Delphindo. Oleh karena itu saya tulis artikelnya. Untuk artikel kali ini, kita akan membuat aplikasi tone generator. Tone generator ini saya buat ketika terlibat dalam sebuah proyek active noise cancellation yakni sistem peredaman suara aktif dimana gelombang suara diredam menggunakan gelombang suara yang sama tapi dengan fase yang berbeda 180 derajat. ok langsung saja ke kode.

Implementasi Tone Generator

Kode berikut ini adalah deklarasi tipe-tipe yang akan kita pakai di tone generator dan beberapa deklarasi fungsi-fungsi helper. Tidak susah bukan?
{======================================
Sound type definition
=======================================
(c) 2006 zamrony p juhara
=======================================}unit uSoundTypes;

interface

type

  TVolumeLevel = 0..127;
  TSampleRate=(sr8KHz,sr11_025KHz,sr22_05KHz,sr44_1KHz);
  TSoundChannel=(chMono,chStereo);
  TBitsPerSample=(bps8Bit,bps16Bit,bps32Bit);

function GetSampleRate(SampleRate:TSampleRate):integer;
function GetEnumSampleRate(SampleRate:integer):TSampleRate;

function GetNumChannels(ch:TSoundChannel):word;
function GetSoundChannels(nChannel:word):TSoundChannel;

function GetBitsPerSample(bits:TBitsPerSample):word;
function GetEnumBitsPerSample(bits:word):TBitsPerSample;

implementation


const SampleRates:array[sr8KHz..sr44_1KHz] of integer=
       (8000,11025,22050,44100);

     Channels:array[chMono..chStereo] of word=
     (1,2);
     BitsPerSample:array[bps8Bit..bps32Bit] of word=
     (8,16,32);

function GetSampleRate(SampleRate:TSampleRate):integer;
begin
  result:=SampleRates[SampleRate];
end;

function GetEnumSampleRate(SampleRate:integer):TSampleRate;
begin
  result:=sr8KHz;
  case sampleRate of
    8000:result:=sr8KHz;
    11025:result:=sr11_025KHz;
    22050:result:=sr22_05KHz;
    44100:result:=sr44_1KHz;
  end;
end;

function GetNumChannels(ch:TSoundChannel):word;
begin
  result:=Channels[ch];
end;

function GetSoundChannels(nChannel:word):TSoundChannel;
begin
  result:=chMono;
  case nChannel of
    1:result:=chMono;
    2:result:=chStereo;
  end;
end;

function GetBitsPerSample(bits:TBitsPerSample):word;
begin
  result:=BitsPerSample[bits];
end;

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Popular Post

Link Support

Diberdayakan oleh Blogger.

- Copyright © all of information -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -