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

Aktuelle Zeit: Mi Mai 15, 2024 02:31

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: SDL Sound - Einsteigerfrage
BeitragVerfasst: So Mär 29, 2009 18:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jul 22, 2006 00:43
Beiträge: 30
Wohnort: Borland
Hi Community,

nachdem ich jetzt doch so weit bin, dass ich Sound in mein Projekt integrieren möchte, bin ich durch eines der Tutorials auf SDL gestoßen und tue mir gerade etwas schwer das halbwegs hinzubekommen bzw. ich verstehe das allgemeine Vorgehen nicht ganz.

Laut Dokumentation muss ich als erstes das Soundsubsystem initialisieren, was soweit auch funktioniert.
Dann das einmal das Audio Device öffnen:

Code:
  1.  
  2. procedure fill_audio( udata : pointer; stream : PUint8; len : integer );
  3.     var
  4.       wanted : TSDL_AudioSpec;
  5.     begin
  6.        // Set the audio format
  7.       wanted.freq := 22050;
  8.       wanted.format := AUDIO_S16;
  9.       wanted.channels := 2;    // 1 = mono, 2 = stereo
  10.       wanted.samples := 1024;  // Good low-latency value for callback
  11.       wanted.callback := fill_audio;
  12.       wanted.userdata := nil;
  13.  
  14.       // Open the audio device, forcing the desired formats
  15.       if ( SDL_OpenAudio( @wanted, nil ) < 0 ) then
  16.       begin
  17.         MessageBox( 0, PChar( Format( 'Couldn''t open SDL Audio : %s', [SDL_GetError] ) ), 'Error', MB_OK or MB_ICONHAND );
  18.         exit;
  19.       end;
  20.     end;
  21.  


Die Parameter scheinen in diesem Falle wohl nutzlos zu sein, ich habe sie in meinem Code einfach entfernt und die Prozedur umbenannt.
Btw, was genau hat es mit diesem Callback auf sich?

Als nächstes dann abspielen.

Code:
  1.  
  2. var    
  3.     audio_chunk : PUint8;
  4.     audio_len : Uint32;
  5.     audoi_pos : PUint8;
  6.  
  7.     (* The audio function callback takes the following parameters:
  8.        stream:  A pointer to the audio buffer to be filled
  9.        len:     The length (in bytes) of the audio buffer
  10.     *)
  11.     procedure fill_audio( udata : pointer; stream : PUint8; len : integer );
  12.     begin
  13.         // Only play if we have data left
  14.         if ( audio_len = 0 ) then
  15.             exit;
  16.  
  17.         // Mix as much data as possible
  18.         if ( len > audio_len ) then
  19.           len := audio_len;
  20.         SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME );
  21.         inc( audio_pos, len );
  22.         dec( audio_len, len );
  23.     end;
  24.  
  25.     // Load the audio data ...
  26.  
  27.     ....
  28.  
  29.     audio_pos := audio_chunk;
  30.  
  31.     // Let the callback function play the audio chunk
  32.     SDL_PauseAudio( 0 );
  33.  
  34.     // Do some processing
  35.  
  36.     ....
  37.  
  38.     // Wait for sound to complete
  39.     while ( audio_len > 0 ) do
  40.     begin
  41.         SDL_Delay( 100 );         // Sleep 1/10 second
  42.     end;
  43.     SDL_CloseAudio;
  44.  


So wirklich hilft mir das nicht weiter. Was davon genau triggert das Abspielen meines Sounds? Ach ja, im Moment liegt der Sound nur als wav Datei vor. Da ich aber nicht bei jedem Abspielen HDD I/Os verursachen will würde ich alle Sounds gerne schon früher laden. Da ich das bisher noch nicht in der Form gemacht habe würde ich außerdem gerne wissen wie man das am schlausten macht, sprich welcher Datentyp bietet sich an, sodass es einfach mittels SDL abspielbar ist? Ach ja, es sollte auch möglich sein mehrere Sounds gleichzeitig abzuspielen ohne zu warten bis der gerade aktive Sound fertig abgespielt wurde.

Wäre sehr dankbar für jede Hilfestellung, stehe doch sehr auf dem Schlauch :D
MfG MB


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.026s | 17 Queries | GZIP : On ]