PC ses kartından ses sinyal jenaratörü yapmak

Başlatan z, 17 Kasım 2015, 06:37:40

z

Bu günlerde ses sinyal jenaratörüne ihtiyacım var.

Devre kuracaktım ki PC ses kartını kullanabilirsem devreydi beslemeydi uğraşmama gerek kalmayacak ve ses sinyalini kulaklık çıkışından alabilirim.

Bunun için hazır program yada Delphi için örnek kod bilen varmı?
Bana e^st de diyebilirsiniz.   www.mikrostep.com

zipzip

Daqarta veya  virtins multi-instrument işine yarayabilir. Ayrıca Audiocity de sinyal üretme imkanı var.

polleme

Bu yapılır ama ses kartı çıkışına devreden gelecek ters bir gerilimle zarar verme ihtimaline karşı tedbirli olmak gerek. Bunun için bir buffer kullanabilirsiniz ama yine küçük de olsa bir devre yapımı ve yine bir besleme gündeme gelecektir. Bir örnek:

https://sites.google.com/site/hobbydebraj/home/pc-based-signal-generator

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

z

Alıntı yapılan: polleme - 17 Kasım 2015, 08:09:39
Bu yapılır ama ses kartı çıkışına devreden gelecek ters bir gerilimle zarar verme ihtimaline karşı tedbirli olmak gerek. Bunun için bir buffer kullanabilirsiniz ama yine küçük de olsa bir devre yapımı ve yine bir besleme gündeme gelecektir. Bir örnek:

https://sites.google.com/site/hobbydebraj/home/pc-based-signal-generator

Kulaklık çıkışı ile kulaklığı süren çip arasında kapasitif kuplaj yokmu?
Bana e^st de diyebilirsiniz.   www.mikrostep.com

z

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;
procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeSound(1200, 1000, 60);
end;
Bana e^st de diyebilirsiniz.   www.mikrostep.com

Mucit23

Abi android telefon kullanıyorsan bu konuda birkaç güzel uygulama var. Şiddetle tavsiye ederim.

Frekans aralığı elbette donanımın müsade ettiği sınırlar içerisindedir.
Bunları bir incele
https://play.google.com/store/search?q=frequency%20generator&c=apps&docType=1&sp=CAFiFQoTZnJlcXVlbmN5IGdlbmVyYXRvcnoFGADAAQKKAQIIAQ%3D%3D%3AS%3AANO1ljKSRhA&hl=tr
Zamanında FFT ile çalışıyorken bana bayağı bir kolaylık sağlamıştı.