Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 22:31

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:04 
Offline
DGL Member

Registriert: Do Jun 17, 2010 10:45
Beiträge: 36
Hallo zusammen,

ich möchte in mein c++ Opengl Programm Ton einbauen.

genauer: Ich möchte ein Lied (wav format) abspielen und dabei die Lautstärke regeln können.
Um schöne übergänge zwischen den Liedern zu machen brauche ich noch ein zweites Lied,
dessenLautstärke ich unabhängig des ersten regulieren kann.

Kann mir jemand einen Tip geben, wie man das macht?


Beim suchen im Internet bin ich auf WaveOut gestossen.
Damit sollte es klappen. Allerdings konnte mein compiller die Klasse WaveOut nicht finden
und ich habe keine Ahnung wie ich das Problem lösen könnte.


Bin dankbar für jeden Tipp.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:07 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
OpenGL ist eine Graphics Library, und kann daher nur Grafik. Ich hab dein Thema deshalb auch mal verschoben. WaveOut ist das grundlegenste unter Windows, kann aber kaum was. Bessere Alternative wäre OpenAL (das direkt aber nichts mit OpenGL zu tun hat) oder andere Soundlibs wie FMOD oder BASS.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:09 
Offline
DGL Member

Registriert: Do Jun 17, 2010 10:45
Beiträge: 36
Vielen Dank für deine schnelle Antwort.
Kann ich mit openal das Problem lösen?

Wen ja, wie kann ich openal verwenden? Muss ich da wieder etwas downloaden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Was meinst du mit "Problem"? Klappt etwas nicht, oder möchtest du halt einfach Sound in deiner Anwendung? Wenn Letzteres, dann schau hier im Forum, hier gibt es die OpenAL-Header von noeska (falls du Delphi verwendest), ansonsten halt mal auf [url=OpenAL.org]openal.org[/url] schauen, da gibts C++ Header und auch Beispiele etc.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:14 
Offline
DGL Member

Registriert: Do Jun 17, 2010 10:45
Beiträge: 36
Es liegt tatsächlich kein Problem vor.

Ich fühle mich von der Fülle von Möglichkeiten erdrückt, dabei möchte ich einfach nur ein Lied abspielen.


Bisher habe ich das mit der Funktion PLaySound() gemacht.
Dabei war das Problem, dass ich keinen Übergang zwischen zwe Liedern machen konnte.

Gibt es keine Möglichkeit, nur ein Lied abzuspielen, ohne wieder viel downloaden zu müssen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn du Lieder ineinander übergehen lassen willst wirst du um eine Soundlibrary nicht herumkommen. OpenAL ist halt komplett frei, aber zum Streamen und für die Übergänge muss man halt einiges selber machen. Für Anfänger ist daher BASS oder FMOD die bessere Wahl, die sind frei für nicht-kommerzielle Zwecke und erlauben es dir direkt Lieder zu streamen. Oder schau dir mal Audorra von einem unserer Mitglieder an, wobei ich da nicht sicher bin obs auch mit C++ läuft.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:50 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Für dein "Problem" empfehle ich dir SDL_Mixer. Noch einfacher geht es kaum.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 16:52 
Offline
DGL Member

Registriert: Do Jun 17, 2010 10:45
Beiträge: 36
Gibt es denn keine Funktion, analog zu Playsound(), bei der ich noch die Lautstärke verstellen kann? dann wäre ich schon beinahe zufrieden.

Was muss ich machen, um WaveOut verenden zu können?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
WaveOut ist quasi "fire-and-forget". Wenn du etwas mit Playsound abspielst (was man bei einem kompletten Lied eh nicht machen sollte) dann verlierst du direkt nach diesem Kommando jeglichen Zugriff auf das was abgespielt wird, kannst an der Ausgabe also nix mehr verändern (ausser evtl. diese zu stoppen).

Du wirst also etwas anderes als WaveOut nehmen müssen, entweder eine der Libs die ich vorgeschlagen hab, oder das von Ziz erwähnte SDL und seinen Mixer (auch eine gute Alternative, SDL bietet ja diverse "Helfer" die man brauchen kann).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 17:31 
Offline
DGL Member

Registriert: Do Jun 17, 2010 10:45
Beiträge: 36
ok. Du hast mich überzeugt.

Welche Bibliothe schlägst du mir dazu vor?

Ich kenne beide nicht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 17:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das ist Geschmackssache und hängt v.a. von deinen Anforderungen ab, da musst du selbst evaluieren. Also am besten alle Features der einzelnen Libs mal überfliegen und gut ist. Unter Windows nutzen die auf unterster Ebene sowieso allesamt DirectSound (auch OpenAL), die können als fast alle das gleiche. Ich selbst hab mir daher einen Wrapper geschrieben (quasi ein SoundSystem) dass FMOD, BASS und OpenAL kapselt. So kann ich nach Belieben wählen was ich selbst verwenden will.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
SDL hat den Vorteil, dass man damit später auch andere Dinge wie das OpenGL-Initiliasieren, Event-Handling, Input-Output, Thread, Netzwerk, etc. sehr einfach machen kann. Wobei das Wegkapseln zu einer plattformunabhängigen Lösung für dich bestimmt nicht Primärziel ist.

Hier wird step by step erklärt, wie man z.B. eine Wav-File ausgibt. Dabei kannst du den Teil, wo auch ein Fenster erstellt wird, getrost weglassen, also kein kein SDL_INIT_VIDEO und kein
Code:
SDL_Surface *screen;
screen = SDL_SetVideoMode(320, 240, 0, SDL_ANYFORMAT);
if (screen == NULL) {
   fprintf(stderr, "Unable to set video mode: %s\n", SDL_GetError());
   return 1;
}

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 18:12 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Haut mir die virtuelle Rübe ab, aber wenn du keine Bibliotheken herunterladen möchtest kannst du auch DirectX 7 verwenden. Das ist auf jedem Windows Rechner seit 2000 drauf und auf den meisten älteren Windows Systemen auch. DirectSound hast du natürlich nur unter Windows, aber das trifft auf PlaySound/WaveOut natürlich genauso zu. Was du mit SDL, Bass, FMOD und co. vor allem gewinnst, ist dass dein Programm portabel wird, du also auch eine Version für MacOS oder Linux kompilieren kannst. Ich selbst habe leider auch null Ahnung von Sound-Bibliotheken, deshalb halte ich jetzt auch meine klappe. Du könntest auch die Wave-Dateien selbst zusammen mischen. Das hätte ich vermutlich damals gemacht. Also im Grunde die Dateien in den Speicher laden und die letzten Samples der ersten Datei mit denen der nächsten zusammenlegen. Unkomprimierte Wave-Dateien sind letztlich ja nur aneinandergereihte 16-bit-Zahlen (und der Header). Und dann spielst du die fertig gemischte Datei im Speicher wieder mit WaveOut ab.
Aber das ist bei mir typbedingt. Ich muss immer alles ein mal selber gemacht haben, und verweigere mich oft hartnäckig Hilfsbibliotheken. Abgesehen von solchen persönlichen Vorlieben muss man klar sehen, dass man mit fertigen Bibliotheken meist schneller zum Ziel kommt.

- Willst du unabhängig von Windows sein?
- Gibt es dir ein gutes Gefühl, selbst den Kleinkram, der in deinem Programm steckt zu erarbeiten?
- Hast du einen engen zeitlichen Rahmen?
- Willst du in Zukunft 3D Sound, Tracker Musik o.Ä. verwenden?
- Wie wichtig ist die Zusammenarbeit mit OpenGL?
- Welche IDE/Compiler verwendest du? MS VisualC++ hat vermutlich Header für DirectSound im Installationspaket und du sparst dir Bastelei wenn was nicht klappt.

Hier noch mal eine Liste, um dir die Entscheidung zu erschweren ^^:

MfG Marco


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Andererseits sind die Bibliotheken wie Bass, OpenAL, SDL_Mixer und Co auch Vereinfachungen, wo die DirectSoundLib u.U. mehr Aufwand braucht.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sound in Opengl
BeitragVerfasst: Sa Jul 03, 2010 19:34 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
So sähe der Code aus, um in DirectSound mit C# das klassische 'ding!' mit Chorus und Echo abzuspielen. Hatte auch schon befürchtet man müsse die Puffer kompliziert initialisieren, aber das geht schon oder?
Code:
Device dev = new Device();
dev.SetCooperativeLevel(this,CooperativeLevel.Normal);

//Create and setup the buffer description.
BufferDescription buffer_desc = new BufferDescription();
buffer_desc.ControlEffects = true; //this has to be true to use effects.
buffer_desc.GlobalFocus = true; //play sound even if application loses focus.

//Create and setup the buffer for playing the sound.
SecondaryBuffer buffer = new SecondaryBuffer(
   @"C:\WINDOWS\Media\ding.wav",
   buffer_desc,
   dev);

//Create an array of effects descriptions,
//set the effect objects to echo and chorus and
//set it in the buffer.
EffectDescription[] effects = new EffectDescription[2];
effects[0].GuidEffectClass = DSoundHelper.StandardEchoGuid;
effects[1].GuidEffectClass = DSoundHelper.StandardChorusGuid;
buffer.SetEffects(effects);

//Play Buffer.
buffer.Play(0,BufferPlayFlags.Default);

Die Lautstärke kann man vermutlich mit einem Fade-In/Out-Filter am Anfang bzw. Ende des Liedes beeinflussen. Wenn nicht, könnte man auch nach jedem Bild die Lautstärken anpassen, was etwas holprig klingen könnte, wenn die Anwendung 'ruckelt'.

In BASS kannst du die Lautstärke mit folgendem Kommando automatisch in den nächsten 1000ms auf Null bringen:
Code:
BASS_ChannelSlideAttribute(File_Stream,BASS_ATTRIB_VOL,0,1000)

Du kannst BASS wenn ich das richtig verstanden habe auch dazu bringen, deine Anwendung zu informieren, wenn nur noch eine Sekunde Spielzeit des ersten Liedes verbleiben, damit du das FadeOut des ersten Liedes und das FadeIn des zweiten exakt timen kannst.
Danke für den Thread, jetzt weiß ich mehr :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 14 Queries | GZIP : On ]