View Full Version : PyroAudioび「

24-12-2007, 03:01 AM
Welcome to PyroAudioび「, an audio framework API for PC's running Microsoft Windows. PyroAudio was designed to be easy to use, robust and feature rich and should be easy to add a audio solution to you projects.

PyroAudio is a pure audio API usable from Delphi, C/C++ and other modern languages that work with standard Win32 DLLs. It exports enough routines to give you a solid foundation for usage. You can build on top of this layer to any level of complexity that is required for your project. The API includes support for mixing sounds, streaming background music, complete control over channels and much more.

* Default language bindings for Delphi.
* Works with any language that supports standard Win32 DLLs.
* Uses DirectSound for audio playback
* Play WAV|MP3|OGG|MOD|IT|S3M|XM formats including background streaming.
* Load and manage 256 buffered sounds
* Mix up to 256 channels of buffered sound
* Set master sound/music volumes
* Set volume, pan, frequency pitch and looping of buffered sounds
* set volume, and looping of streaming background sound
* Stream one channel of background music
* Dynamically change volume, pan and freq pitch in real-time for 2D effects
* Total control over sound channels (you can even reserve channels) and music playback
* Include a audio player for easy control and playback of music files
* CHM documentation
* Robust and feature rich.


DOWNLOAD (http://www.pyrogine.com/temp/PyroAudio_v1.0.0.24.zip)

24-12-2007, 08:57 PM
Sounds awesome. Is it possible to combine two sources of sound and save result as a single wave file or mp3?

I would like to be able to combine music with voice into a singe file.

24-12-2007, 08:57 PM
BTW I got an error when posting my reply something about the emailer.php line 234.

24-12-2007, 09:34 PM
That is an impressive list of features :o , You really implemented a lot of audio-format's. Did you write code for that yourself, does DirectSound handle this, or did you get some third-party code to do this??

and eh... what is the "trick" to make such a large module working, without drowning in your own code :s ??

@czar: I've had that error several times, in the past few weeks. I allready PMed to dom about this, so maybe she'll fix it when she's back from spain :)

24-12-2007, 11:37 PM
Thanks. At present I do not have any facilities for combining sounds, sorry. Maybe a future version I can get this support in.

Thanks. I use some 3rd party libs to assist with the decoding (ogg/voribis for OGGs, dumb for MODs, MPEG Audio Decoder for MPEGS). The idea is to think abstraction layer. Create players for each format to feed you the data to a consistent format (PCM data) and then have a master player that talks to DirectSound feeding it that audio data from those players as needed. Finally wrap all of this up into a nice, simple and easy to use API. Once you have a good working abstraction layer, where and how the data arrives become less important so you are able to do some cool stuff. The version that's in Pyrogine2D 2.0 can even stream background music from a zip archive.

25-12-2007, 12:04 AM
The version that's in Pyrogine2D 2.0 can even stream background music from a zip archive.
This is really impressive :shock:

25-12-2007, 02:03 AM
Thanks. Yes, I was thrilled when it "just worked." One of those rare programming moments. Since the archive interface in Pyrogine2D is polymorphic, all derived archive types that maybe implemented in the future should "just work" as well.

Robert Kosek
26-12-2007, 04:51 PM
Since the archive interface in Pyrogine2D is polymorphic, all derived archive types that maybe implemented in the future should "just work" as well.I assume when you say this, that I can override an archive with my own custom type and have another fully working archive type with music streaming from it? If so it's more an interface for streaming/data-storage than it is a strictly zip archive.

26-12-2007, 07:08 PM
Robert Kosek
There is a polymorphic streaming system in Pyrogine2D called TP2DStream. I've implemented TP2DMemoryStream, TP2DFileStream and TP2DExeResourceStream. Now on top of this there is TP2DArchive of which I've implemented TP2DUnzipArchive, which support unzipping standard zip archives. Any place in the library that accepts TP2DStream or TP2DArchive you can pass to it any of those descendants. So yes, if you've implemented TUnRAR for example, in theory you should be able to just pass this instance and it should just work. There are of coarse factors that can prevent it (music streaming) from working as expected. I was concerned with would it be fast enough to keep up. As it turned out it seems to work well with zip files.

Overall, by having the polymorphic streaming interface you can then load textures, surfaces, sound and more from any place you have a TP2DStream/TP2dArchive descendant.