Results 1 to 10 of 14

Thread: [DirectSound][FreePascal 2.4.x]Playing OGG in separate threads

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1

    [DirectSound][FreePascal 2.4.x]Playing OGG in separate threads

    Hello everyone!

    I have one problem with FreePascal 2.4.x and DirectSound - my application crash when I use two and more threads for playing OGG. But I have no problems when I compile my code by FreePascal 2.2.4 and any version of Delphi(7,2009,2010). Maybe this is a luck that I have no problems with Delphi, but maybe I do something wrong. Can you help me?

    Here you can find source code and all needed dll's. Examples only for Lazarus, but you can adopt them for Delphi(there are only few lines of code in unit1.pas). Directory "source" contains "lite" version of modules from ZenGL library. "Problematic" functions - snd_PlayFile and snd_ProcFile(thread function) in zgl_sound.pas. DirectSound stuff contained in zgl_sound_dsound.pas. All other code works fine, because there are no problems with OpenAL variant.

    Oh... there is one problem with ButtonClick function in unit1.pas, so here correct code for example:
    Code:
      var
        t : Double;
        a : Integer;
    begin
      wnd_Handle := Form1.Handle; // getting handle of Window for DirectSound
    
      snd_Init(); // Sound subsystem initialization
    
      snd_PlayFile( 'music.ogg' ); // creating first thread for playing
      t := timer_GetTicks();
    
      while timer_GetTicks() - t < 1000 do; // waiting one second
      a := snd_PlayFile( 'music.ogg' ); // creating second thread for playing
    
      while sfStream[ a ]._playing do; // waiting before second thread end playing
    end;

  2. #2
    I don't have any experience with directsound, so I'm afraid I cant really help you.

    But why are you using DirectSound? First of all, it will only work on windows. Moreover, I've heard that it's a very hard API to work with (allthough you seem to be using a wrapper). Have you looked into OpenAL or SDL Mixer? Those seem quite good to me, especially for games.
    Coders rule nr 1: Face ur bugz.. dont cage them with code, kill'em with ur cursor.

  3. #3
    Quote Originally Posted by chronozphere
    But why are you using DirectSound? First of all, it will only work on windows.
    Yeah, I know about this and I'm using Linux on my home PC Also I have OpenAL variant of OGG streaming(for Linux and MacOS X), but I want use DirectSound on Windows, because with it there is no need in 3rd party heavy dll's

  4. #4
    Why go through all the trouble, just to get rid of one or two DLL's? If you can make the game work with OpenAL on both linux and windows, you're done. Generally, users don't worry about DLL's.

    Also, the OpenAL installer is really lightweight, as far as I can tell. I normally include the installer when I distribute my games. It's about 750kb.
    Coders rule nr 1: Face ur bugz.. dont cage them with code, kill'em with ur cursor.

  5. #5
    Quote Originally Posted by chronozpher
    Why go through all the trouble, just to get rid of one or two DLL's?
    Because of fun and I have some principles So, I want understand why my code didn't work correct with FreePascal 2.4.x

  6. #6
    I don't know if this has anything to do with the problem but posting anyway. It's about pointer size and integers, which work differently than Delphi i presume:
    http://wiki.freepascal.org/Integer

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •