02. september 2000 - 19:49Der er
11 kommentarer og 1 løsning
create lyd (hz)
Hej
Hvordan kan man genere lyde, altså bare en tone med x hz. Jeg er ikke interesseret i at lave lyd med computerens indbyggede speaker, da jeg har leget en del med det. Men med speakeren kan man ikke mixe to toner.
Det jeg er interesseret i er, at kunne genere toner med x hz, og mixe 2, 3 eller flere toner.
Hvis du \"bare\" vil generere en wav-fil, som kan afspilles i f.eks mediaplayer skal du finde ud af hvordan en sådan fil er opbygget. Her er et link til en siden \"programmers fileformat collection\". Der ved jeg du kan finde information om den. http://www.wotsit.org/
Hvis du vil afspille den direkte inde fra dit program skal du bruge mmsystem.pas filen. Den indeholder en masse funktioner til afspilning af både midi, wav og video. Men det er lidt hæftigt.
Det er helt forkert det i er inde på (tror jeg) Som jeg har forstået det vil du generere en tone, fx en sinus tone. Det har ikke noget med midi at gøre. Det har noget med wave filer at gøre. Der ligger også funktioner til afspilning af wave\'s i mmsystem filen, og det er dem du skal bruge. Midi er kun kommandoer til dit lydkort om at spille fx et C med en klaver lyd. Med en wave fil angiver man de forskellige frekvenser der skal spilles.
jeppebecool>> Jamen kan du hjælpe ?? Så opretter jeg da gerne et spørgsmål til dig. Skriv lige hvis du er i stand til at hjælpe. Jeg har været inde på de der sider om hvordan man generer en wav, men jeg fatter det simpelt hen ikke :((
Håber du lige gider at give svar. Så opretter jeg som sagt et spørgsmål til dig.
Ja ... jeg kan godt hjælpe. Men du skal lige fortælle mig om du vil (generere en wavefil) , som du så kan spille i en medieafspiller , eller du vil skrive til lydkortet direkte ( Det kræver en præsis timer ), og tålmodighed :).
function ReturnWaveOutDeviceName(DeviceID : integer) : String; var WaveOutCaps: TWaveOutCaps; begin WaveRes := WaveOutGetDevCaps(DeviceID, @WaveOutCaps, sizeof(TWaveOutCaps)); if WaveRes <> MMSYSERR_NOERROR then begin ShowMessage(\'Fejl ved søgning af produktnavn\'); end; Result := StrPas(WaveOutCaps.szPname); end;
procedure OpenWaveDevice(); var WaveFormat : TWaveFormatEx; begin WaveFormat.wFormatTag := WAVE_FORMAT_PCM; { format type } WaveFormat.nChannels := 2; { number of channels (i.e. mono, stereo, etc.) } WaveFormat.nSamplesPerSec := 44100; { sample rate } WaveFormat.wBitsPerSample:= 16; { number of bits per sample of mono data } WaveFormat.nBlockAlign:= WaveFormat.nChannels * (WaveFormat.wBitsPerSample div 8); { block size of data } WaveFormat.nAvgBytesPerSec:= WaveFormat.nSamplesPerSec * WaveFormat.nBlockAlign; { for buffer estimation } WaveFormat.cbSize:= 0; { the count in bytes of the size of } WaveRes := WaveOutOpen( @devHandle, deviceID, @WaveFormat, DWORD(Form1.WindowHandle), 0, CALLBACK_WINDOW); if WaveRes <> MMSYSERR_NOERROR then begin showMessage(\'Fejl ved WaveOutOpen\' + IntToStr(MidiRes)); end; end;
Procedure CloseWaveDevice(); begin WaveRes := WaveOutClose(devHandle); if WaveRes <> MMSYSERR_NOERROR then begin showMessage(\'Fejl ved WaveOutClose\' + IntToStr(WaveRes)); end; end;
procedure TForm1.Button1Click(Sender: TObject); var i : integer; vol : DWord;
begin memo1.clear; for i := 0 to WaveOutGetNumDevs - 1 do begin Memo1.Lines.add(ReturnWaveOutDeviceName(i) + \' , ID : \' + IntToStr(i)); WaveRes := waveOutGetVolume(DevHandle, @Vol); Memo1.Lines.add(\'Volume : \' + IntToStr(Vol)); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin DeviceID := WAVE_MAPPER; end;
Jeg sidder lige og finder ud af hvordan man sender dataene .....
Ovenstående On-click procedure udskriver de WaveOutdevices ( altså de lydkort som kan afspille lyd) , som er installeret.
Procedurerne til at åbne og lukke lydkortet virker, så der er ikke så lang vej igen.
Hvis du selv vil rode lidt med det så er det procedurerne waveOutPrepareHeader(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr; uSize: UINT): MMRESULT; stdcall; og function waveOutWrite(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr; uSize: UINT): MMRESULT; stdcall; du skal have fat i. Men jeg skal nok gøre hvad jeg kan.
Jeg venter med at oprette spørgsmålet til det virker. Ok ??
/SpEeDy
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.