Autor Beitrag
delphistart
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 10:19 
Hallo,

Ich möchte gerne mit Delphi einen Ton über die Soundkarte (nicht den PC-Speaker) wiedergeben. Es sollte möglich sein z.B. eine Folge von
2ms. C - 15ms. F - 23ms. pause - 50ms D ...

Ich habe schon viel gegoogelt und gelesen mit MIDI usw. habe aber noch nichts gefunden was mir wirklich weiter hilft. Vielleicht hat ja jemand von euch einen passenden Link für mich.


Moderiert von user profile iconjasocul: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 29.09.2007 um 11:20
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 29.09.07 10:38 
Siehe hier: www.noeska.com/doal/

Dann noch

de.wikipedia.org/wiki/Tonleiter

Und die Formel

f = 440 * 2 ^ ((n-8)/12)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 11:29 
Danke für die Hilfe aber das hift mir nicht weiter. Eventuell verstehe ich den ersten Link nur nicht weil er auf Englisch ist, aber ich finde auch so keine Befehle dort mit dehnen mir Delphi einen Ton macht...

Die Tonleite in Hz ümrechnen wäre ja kein Problem, das kann ich auch, aber grig ich das dann zur Sounsdkarte und als TON da raus mit Delphi? Da liegt mein Problem.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 29.09.07 11:35 
Im Ersten Link wird genau das erklärt, wie Du einen Ton auf die Soundkarte bekommst. Und so schwer ist das Tutorial von Noeska ja nun auch nicht zu verstehen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 12:21 
Delphi-Hilfe
Zitat:

Unit
Windows

Syntax
[Delphi] function Beep(dwFreq: Cardinal; dwDuration: Cardinal): LongBool;

Beschreibung
Beep generiert ein Nachrichtensignal mit einer Qt-API.

Also: Windows.Beep(440,500) oder so ähnlich ;)
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 12:31 
Ja, Beep ist mir schon bekannt, aber damit geht die Wiedergabe doch nur über den PC-Speaker oder? Ich brauche aber die Ausgabe über die Soundkarte
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 12:41 
stimmt, geht über den Speaker, ich such mal, irgendwo hab ich auch ne Routine für die Soundkarte.
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 13:07 
user profile iconBenBE hat folgendes geschrieben:
Im Ersten Link wird genau das erklärt, wie Du einen Ton auf die Soundkarte bekommst. Und so schwer ist das Tutorial von Noeska ja nun auch nicht zu verstehen.


Ich war wie ich jetzt festgestellt habe wirklich etwas vorschnell mit meiner Antwort. Habe erst jetzt www.noeska.com/doal/lesson1.aspx gefunden.
Werde das gleich mal probieren.

DANKE!
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 13:08 
so, habs gefunden, im Anhang die Unit. Es wird ein Sound generiert und im Speicher abgelegt, der dann über sndPlaySound ausgegeben wird.
Einloggen, um Attachments anzusehen!
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 13:21 
user profile icondelphistart hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Im Ersten Link wird genau das erklärt, wie Du einen Ton auf die Soundkarte bekommst. Und so schwer ist das Tutorial von Noeska ja nun auch nicht zu verstehen.


Ich war wie ich jetzt festgestellt habe wirklich etwas vorschnell mit meiner Antwort. Habe erst jetzt www.noeska.com/doal/lesson1.aspx gefunden.
Werde das gleich mal probieren.

DANKE!


Wenn ich das jetzt richtig verstanden habe, dann brauche och dafür die Töne in .wav-Dateien. Damit ist das Ganze für mich nicht tauchlich. Ich mussdie Töne wie mit Beep erzeugen aber über die Soundkarte wiedergeben können.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 13:23 
schau in die von mir im Anhang gepostete procedure, die macht genau das ;)
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 29.09.07 13:26 
user profile iconTProgger hat folgendes geschrieben:
so, habs gefunden, im Anhang die Unit. Es wird ein Sound generiert und im Speicher abgelegt, der dann über sndPlaySound ausgegeben wird.


Bekomme fehler: Datei nicht gefunden al.dcu, ähnliches Problem habe ich auch bei dem anderen Hilfeansatz. Woher bekomme ich die Datei. Kann die nirgends finden.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 13:30 
die unit al.dcu ist doch eine OpenAL-Unit, die wird in meiner Unit/Procedure doch gar nicht gebraucht und steht auch nicht in der uses-Anweisung.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 13:35 
so, hier nochmal nen komplettes project im Anhang. Mehr kann ich nun wirklich nicht tun ;)
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 29.09.07 13:44 
Auf der oben von Noeska verlinkten Seite findest Du unter Downloads die benötigten Dateien: www.noeska.com/doal/downloads/openal.zip

Einfach entpacken.

Das Tutorial (Lesson 1) beschreibt die Grundlegende Funktionsweise. In Lesson 11 wird auch die Software-Synthese von Tönen noch etwas genauer erklärt. Will man diese nicht selber ausführen (was an sich nicht kompliziert ist), muss man auf vorgefertigte WAV-Sounds (oder andere Formate) zurückgreifen. In Lesson 11 ist aber auch noch einiges über die Physiologie erklärt, wodurch man die Sounds "angenehmer" klingen lassen kann.

Insgesamt unterscheided sich dieses Vorgehen von der MMSystem-Version von TProgger nicht allzu sehr, außer, dass sie:
1. Platform-unabhängig
2. nahezu ohne Latenzen
3. vollständig lückenlos beim aneinanderreihen von Tönen
ist.

@TProgger: In deiner Unit ist sogar ein semantischer Fehler bzgl. der oberen Grenzfrequenz drin. Laut Abtasttheorem liegt die maximale Wiedergabe-Frequenz nicht bei 60% der Sampling-Rate, sondern bei höchstens 50%. Da bei Integer-Wiedergabe aber zusätzlich durch Rundungsfehler Aliasing-Effekte auftreten, können schon bei etwa 40% hörbare Stör-Effekte auftauchen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Sa 29.09.07 14:13 
@BenBE:
Mag sein, jedenfalls funktioniert es, das wurde mal verwendet für ein Programm zum Morsezeichen lernen/üben. Und Fehler lassen sich ja korrigieren ;)