1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Dismiss Notice

Which Sound API to use?

Discussion in 'Creativity section (Sound / Graphics / Music)' started by ZXDunny, Nov 15, 2010.

  1. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    Hi all -


    I've been spending the time waiting for my pandora developing a BASIC interpreter. It's based on Sinclair BASIC, and has gained quite a following on the PC amongst Speccy enthusiasts. It's very fast and has lots of lovely commands for working with graphics and memory, but now I'd like to add sound. I was told that FMOD would be a good idea, but I'm not sure that it will be suitable (no pandora port of the library, AFAICS). My interpreter has been ported to linux, so I know it should be relatively simple to port to the Pandora.


    What I need is:


    1. An open-source sound API that is compatible with my development environment and portable between win32 and linux


    2. Able to play sound samples from a buffer that I create at the rate and bitdepth I specify. The data will probably be raw PCM.


    3. I'd like to expose the samples played to the user via a "memory bank" structure in the BASIC interpreter, so they can modify the samples


    4. Be able to play music from MP3/MOD/S3M/XM/IT etc either from memory or streaming from disk.


    I can write my own PCM extraction routines for WAV and other simple sample formats, but I'd like the API to handle loading MP3/OGG samples if possible. Under windows, I'd use a looping directsound buffer and inject my samples into that - and the most important thing is being able to edit the memory that holds the sample while the sample is playing if at all possible.


    Can anyone suggest an API that would be suitable for use on the Pandora?


    D.
     
  2. sebt3

    sebt3 homebrew player (P. & C.)

    Joined:
    Sep 9, 2008
    Messages:
    4,478
    Location:
    France
    SDL_Mixer can also be used without the rendering engine if needed and provide everything you asked.
     
  3. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    Excellent, I'll have a look at that then. Is there a Pandora-friendly ARM version of the mikmod library at all?


    D.
     
  4. sebt3

    sebt3 homebrew player (P. & C.)

    Joined:
    Sep 9, 2008
    Messages:
    4,478
    Location:
    France
    SDL_Mixer have mikmod integrated (that's how it support MOD/S3M/XM/IT).


    But if you need mikmod outside of SDL, it's easy to build (I think I've built it for audacious, not sure though). Angstrom only list a few modification to the built process but nothing major.
     
  5. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    Interesting, I was led to believe by the documentation that you needed the external libraries (such as FLAC, MikMod etc) present if you want to use those formats - SDL_Mixer appears to be a "wrapper" library.


    Good news that all I'll need is the SDL_Mixer lib then!


    D.
     
  6. sebt3

    sebt3 homebrew player (P. & C.)

    Joined:
    Sep 9, 2008
    Messages:
    4,478
    Location:
    France
    Your belief is right (Mine was wrong, I just had a look to sdl sources), SDL_Mixer is just a wrapper around the external libraries. But then Mikmod have to be installed on pandora anyway 'cause, I've already used SDL to play mikmod (*it) files on pandora.


    (It is also highly probable that I didn't built it for audacious :p )
     
  7. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    Went with BASS in the end - it builds for linux and PC, which is currently my target platform, and does everything I want - SDL_Mixer just turned out to be a pile of crap, at least for what I wanted it for. I really don't have the inclination write my own mixer to sit on top of the SDL mixer itself, but it turns out I'd have to :(


    BASS rocks. There's no pandora/ARM port that I'm aware of and I have no idea if one is possible - but that's kind of moot as it's unlikely I'll ever get my Pandora before OPT file for bankruptcy, so I'll stick with the PC version of my code for now. Realistically, I don't have much choice :)


    D.
     
  8. sebt3

    sebt3 homebrew player (P. & C.)

    Joined:
    Sep 9, 2008
    Messages:
    4,478
    Location:
    France
    I've only seen mac and windows download on their web site.

    Unfree, close-source so very very very unlikely :(


    You're wrong... But then, you'll hopefully change your mind.
     
  9. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    http://www.un4seen.com/forum/?topic=8682.msg59533#msg59533

    I know, I know... But I'm really really not liking the idea of having to write shitloads of code that BASS can do for nothing. This afternoon I've got my interpreter playing up to 128 samples from the same memory bank (yes, the same sample many times) with virtually no CPU slowdown. This API really does rock.


    Not holding out much hope for an ARM port, but if I do ever get a Pandora, I'll look at doing the port myself - the interpreter uses callbacks to minimise the amount of platform-specific code I have to write. There's a few devs in my little community that want to write games (they've mostly written amiga-style demos in it so far) and this is really shaping up well. Hopefully OpenGL support will go across with no rewriting necessary!


    D.
     
  10. sebt3

    sebt3 homebrew player (P. & C.)

    Joined:
    Sep 9, 2008
    Messages:
    4,478
    Location:
    France
    Sure the 9 channels of SDL_mixer is limiting when you want to handle that much streams.


    Maybe Jack could help you, but i'm no audio nor coding expert.
     
  11. j0n

    j0n Member

    Joined:
    Nov 25, 2010
    Messages:
    103
  12. ZXDunny

    ZXDunny Advanced Member

    Joined:
    Oct 12, 2010
    Messages:
    2,256
    No need - I'm running BASS on the Pandora now, and it seems to work just fine :)


    D.
     
  13. smcameron

    smcameron Still Fresh

    Joined:
    May 6, 2011
    Messages:
    14
    For the C programmers, portaudio isn't too bad (it is what audacity uses), if you don't mind writing your own mixer, and if you do mind, then you can use portaudio + wwviaudio. Wwviaudio provides a very simple interface for audio. It is here:


    http://ccan.ozlabs.org/info/wwviaudio.html


    depends on ogg_to_pcm, which is here:


    http://ccan.ozlabs.org/info/ogg_to_pcm.html


    Full disclosure, I wrote both wwviaudio and ogg_to_pcm (though the latter is heavily derived from code from xiph.org). I wrote them while developing the game Word War vi, you can check that game out and see how you like the sound. It mixes something like 25 channels of sound in real time.


    Also, wwviaudio only does 16-bit 44Khz mono sounds (doing stereo wouldn't be very hard though.)


    -- steve
     
    Last edited by a moderator: Jun 2, 2011
  14. klapse

    klapse Central Scrutinizer

    Joined:
    Aug 30, 2012
    Messages:
    1,468
    Location:
    Germany
    I don't know if SDL mixer is really a pile of crap, but it resets volume of looped .it tracks to 100%. I have a workaround posted to the xu4 thread where your code manually restarts a track at correct volume based on a finished-playing callback function.
     
  15. ibisum

    ibisum Well-Known Member

    Joined:
    May 6, 2009
    Messages:
    1,135
    wwviaudio is a hoot! ;)
     
  16. Pickle

    Pickle Mega GP Mania

    Joined:
    May 30, 2006
    Messages:
    5,350
    Location:
    Detroit, Michigan
    You can allocate more channels in SDL_mixer with Mix_AllocateChannels


    http://sdl.beuc.net/sdl.wiki/Mix_AllocateChannels
     
  17. Rockthesmurf

    Rockthesmurf Advanced Member

    Joined:
    Jul 18, 2003
    Messages:
    1,080
    Location:
    Manchester, UK
    Sounds like you have a solution, but just for reference, in KAMI RETRO, I use a combination of: OpenAL, libvorbis, libogg, libmikmod to handle audio on most platforms (one one or two I use SDL, for example WebOS, and for Android I currently use Java side code over JNI). Relatively straight forwards to set up a solution that allows for steaming audio and position SFX.


    One thing about SDL, certainly the way I use it (for audio), I had to make sure a couple of things were thread safe, as the mixing callback runs on another thread. This may add complications (hopefully not) but it does mean you get a performance win of having the audio on another thread (so if nothing else in the game/engine is threaded, at least the audio can be processing whilst the draw is going).


    Steve
     

Share This Page