AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi soundkarte ohne bass.dll

soundkarte ohne bass.dll

Ein Thema von mr.unbekannt · begonnen am 7. Sep 2005 · letzter Beitrag vom 7. Sep 2005
Antwort Antwort
mr.unbekannt

Registriert seit: 20. Jul 2005
Ort: Schwerin
152 Beiträge
 
Delphi 7 Professional
 
#1

soundkarte ohne bass.dll

  Alt 7. Sep 2005, 13:11
Hallo ihr!

wie kann man die soundkarte ohne bass.dll ansprechen und manipulieren? wäre nett wenn ihr da ein paar sources hättet!

thx for all!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: soundkarte ohne bass.dll

  Alt 7. Sep 2005, 16:39
mache es so:
Delphi-Quellcode:

  const
    Mono : Word = $0001;
    RiffId : string = 'RIFF';
    WaveId : string = 'WAVE';
    FmtId : string = 'fmt ';
    DataId : string = 'data';

type
  TWaveFile = class
    WaveFormatEx : TWaveFormatEx;
    MS : TMemoryStream;
    TempInt,
    DataCount,
    RiffCount : integer;
    SoundValue : byte;
    w : double; // omega ( 2 * pi * frequency)
    duration : integer;
    samplerate : integer;
  constructor Create;
  procedure AddHeader(HSampleRate,HDuration:Integer);
  procedure AddData (Freq,HDuration:Integer);
  procedure SaveToFile(FileName:String);
  procedure Play;
  destructor Free;
end;

constructor TWaveFile.Create;
begin
  inherited Create;
  MS := TMemoryStream.Create;
  samplerate := 11025;
end;

destructor TWaveFIle.Free;
begin
    MS.Free;
end;

procedure TWaveFile.AddHeader(HSampleRate,HDuration:integer);
begin
  duration := hduration;
  samplerate := HSampleRate;
  with WaveFormatEx do begin
    wFormatTag := WAVE_FORMAT_PCM;
    nChannels := Mono;
    nSamplesPerSec := SampleRate;
    wBitsPerSample := $0008;
    nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
    nBlockAlign := (nChannels * wBitsPerSample) div 8;
    cbSize := 0;
  end;
  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
  end;
end;

procedure TWaveFile.AddData(Freq,HDuration:integer);
var i :integer;
begin
    w := 2 * Pi * Freq; // omega
    for i := 0 to hduration*samplerate div 1000 - 1 do begin
      // wt = w *i /SampleRate
      SoundValue := 127 + trunc(127 * sin(i * w / SampleRate));
      MS.Write(SoundValue, SizeOf(Byte));
    end;
end;

procedure TWavefile.SaveToFile(FileName:String);
begin
    MS.Seek(0, soFromBeginning);
    MS.SaveToFile(Filename);
end;

procedure TWaveFile.Play;
begin
    sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
end;
Ein Beispiel:
Du möchtest eine Frequenz erzeugen von 400 hz und 1 sekunde dann
Delphi-Quellcode:
  wavefile := TWaveFile.Create;
  wavefile.addheader(44100,1000);
  wavefile.adddata(400,1000);
  wavefile.play;
ich hoffe das ist was du meinst!

Was willst du genau machen?
Andreas
  Mit Zitat antworten Zitat
mr.unbekannt

Registriert seit: 20. Jul 2005
Ort: Schwerin
152 Beiträge
 
Delphi 7 Professional
 
#3

Re: soundkarte ohne bass.dll

  Alt 7. Sep 2005, 16:56
hi igel, ich wollte eine mp3 abspielen und sie manipulieren indem ich bestimmte frequenzen nicht spiele, kannste mir da helfen?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: soundkarte ohne bass.dll

  Alt 7. Sep 2005, 17:03
Dann solltest du dich zunächst über das mp3-Dateiformat informieren, und zudem die Mathematik dahinter verstehen (FFT). Dann musst du die Files komplett von Hand dekodieren, in einen geeignet großen Buffer schreiben und dass dann evtl. mit o.g. Möglichkeit abspielen. Je nach Kenntnis von Delphi, höherer Mathematik, Datenstrukturen und in deinem Fall auch die Theorie hinter Filtern kann es schon sehr lange dauer bis man auch nur ansatzweise zu einem Ergebnis kommt . Allein der Aufbau von mp3s ist heftig, und das dekodieren - da reden wir erstmal nicht drüber =)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
mr.unbekannt

Registriert seit: 20. Jul 2005
Ort: Schwerin
152 Beiträge
 
Delphi 7 Professional
 
#5

Re: soundkarte ohne bass.dll

  Alt 7. Sep 2005, 18:46
thx for all
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz