tcm123 发表于 2013-1-24 11:45:19

跨平台的覆盖音频图像XML网络 C++开源库

JUCE (Jules' Utility Class Extensions)是由Raw MaterialSoftware发布的一套基于c++的跨平台应用程序框架类库(Windows, Mac,Linux)。JUCE的特殊之处在于其友好的用户界面以及强大的音频、图像处理能力。JUCE适合那些想使用干净、快捷、高层的API,而不想 把时间浪费在使用不同类库,面向不同平台上的开发者。JUCE能够胜任大型、复杂的应用程序(C++)的开发。

与其他应用程序框架类似,JUCE有众多覆盖音频、图像、XML分析、网络等方面的类。JUCE的开发者就是被JAVA的JDK所启发,然后想做出基于C++的对等物。

JUCE最突出的特点是其对音频的特殊支持。JUCE原本是作为Tracktion audiosequencer的一部分而开发的,但后来脱离出来成为了一个独立的工程。JUCE支持音频和MIDI回放,复音合成器,对多种音频格式文件 的读取。同时,JUCE还封装了诸如VST、RTAS、AU等技术的代码,能够开发各种音源、效果插件。众多音频厂商如Imageline、M-AUDIO、cycling74、KORG、Presonus、TC Group等等都是JUCE的使用者。


http://www.rawmaterialsoftware.com/juce.php

Core Classes
Large set of versatile container classes.
A powerful string class which can handle UTF-32, UTF-16 and UTF-8.
A comprehensive set of file, directory and I/O stream classes, including streams for files, URLs, memory, buffering, built-in zlib-based compression, and zip-file handling.
A full set of cross-platform threading and multitasking abilities: threads, synchronisation, events, thread-pools, process control, etc.
A wide-ranging set of messaging classes provides many options for event-based development: listener and broadcaster classes, timers, asynchronous callbacks, inter-application messaging, and much more.
Many utility functions and classes for data conversion, time and date, atomic operations, maths functions, random numbers, etc.
Ability to compile only the non-UI classes, for use in writing command-line apps.
The ValueTree and Value classes provide a very powerful general-purpose data structure which provides change notifications and automatic undo/redo support.
User Interface

A large basic set of components including all the usual suspects: buttons, combo boxes, text editors, listboxes, treeviews, tables, viewports, sliders, tabbed boxes, etc.
A look-and-feel system allows the look of various UI elements to be changed dynamically, and customised by an application.
All components can have arbitrary affine-transforms applied to them.
OpenGL support makes it easy to have openGL running inside a Juce component.
Quicktime support allows Quicktime movies to be embedded and controlled through a platform-independent class. (Not available on Linux, of course).
Video camera catpure makes it easy to preview and record from webcams.
MDI windowing made possible with a multi-document component which can flip between putting its child windows in a tabbed box or as separate floating windows
Keyboard input can be managed in a range of ways, from intercepting keys directly to using a key-mapping set to redirect keystrokes to automatically-invoked application level commands.
Property components provide a set of components to represent various types of value as sliders, drop-down lists, text, etc These are shown in a list and make a simple way to display a set of properties for a selected object.
Internal drag-and-drop within the same application allows versatile drag-and-drop logic to be acheived, with effects like semi-transparent icons, snapping back when released, etc.
External drag-and-drop of files and text can be made to and from other applications.
Popup menus and menu bars can contain custom components, and can be used to automatically trigger application commands, display appropriate key shortcuts, and much more.
A set of file-browser components can be used to show either an entire file open/close dialog with embedded preview, or any subset of this, such as a navigable file list.
Lots of ready-made UI components are included for specialised purposes like splash-screens, editing a set of key-press mappings, choosing audio device settings, selecting colours using a HSV colour picker, a clickable MIDI keyboard, lassoing objects, etc. All of these can be subclassed and customised, of course.
Drop-shadows are used on Juce top-level windows (if possible and where the OS doesn't already do this itself).
A set of classes allow components to be positioned using expressions which describe their layout in terms of other components or markers.
The Introjucer
The Introjucer is Juce's project management tool. You can build it from the source-code included in the Juce source tree, or download a pre-built binary from SourceForge.
Use it like an IDE to build your project, adding source files to a tree, and editing the platform-specific settings for the various compilers that you want to target.
Once created, your project can be automatically exported as a bunch of ready-to-run projects for Xcode, Visual Studio, Linux make, or Android Ant.
A set of wizards make it easy to create application or plugin projects.
As well as generating projects, the introjucer will also convert any binary resource files in your project to C++ source-code, which is automatically included in the generated projects.
Also includes a utility for downloading the latest version of JUCE without needing to use the GIT.
Future plans for the Introjucer will see it become a full IDE, with integrated GUI designer and code editor.
The Jucer

The Jucer is Juce's UI component builder application. It comes as part of the Juce source tree.
Allows Juce components to be designed visually, adding from a palette of standard or custom Juce components.
Generates ready-to-compile c++ code, with embedded metadata so that the same code can be reloaded and edited again later.
Allows graphics to be edited as well as sub-components - polygons, shapes and images can be added, with various types of gradient and brush fills applied to them.
Jucer components can be embedded inside other Jucer components for WYSISYG editing of complex hierarchies.
Custom component types help to create certain types of component - e.g. the Button editor lets you design the graphics for all the button's up/down/over states.
Graphics

Image support for 24-bit RGB and 32-bit ARGB images.
All graphics operations are sub-pixel accurate and anti-aliased.
The built-in software=based rendering engine can be supplemented by native rendering if it's available (e.g. on the Mac and iPhone, CoreGraphics is used for rendering)
Image file formats supported are JPEG, PNG and GIF. JPEG and PNGs can be saved as well as loaded.
Image loading utilities make it easy to incorporate images in your app: an image cache can be used to store recently used images and avoid keeping multiple copies of the same one; images can be loaded from memory of from any kind of file stream, or just directly from a filename.
Easy embedding of images into c++ code using either the Introjucer or BinaryBuilder makes it simple to add resources in a platform-independent way.
Geometric paths and shapes can be created and manipulated with the Path class.
A set of geometric primitives include lines, rectangles, points, rectangular regions, affine transforms, and more.
Gradient fills can be linear and radial, with any number of intermediate colours
All drawing operations can have arbitrary affine-transforms applied to them
A set of "drawable" classes allow graphs of drawable elements (e.g. paths, text, images) to be built up and drawn as a unit.
Importer for simple SVG files, converting them into juce Drawable objects, ready for further manipulation or rendering.
Audio

Audio driver classes provide an abstract audio device layer, which transparently supports ASIO, WASAPI, DirectSound, CoreAudio, iPhone Audio, ALSA, JACK and Android devices.
Audio device manager class makes it simple to load/save a user's audio and midi device settings between sessions, or to choose an appropriate default device for the system.
Ready-made UI components provide UI for selecting audio and midi device settings.
A set of audio file format readers and writers include support for WAV, AIFF, Flac and Ogg-Vorbis
A set of audio stream classes allow audio graphs to be constructed and played - types of audio filter include wave file readers, sample-rate converters, mixers, and tone generators.
A Synthesiser class allows simple creation of polyphonic synthesisers, which can be easily driven by midi input using the midi classes.
On Mac and PC, a cross-platform Audio CD reader allows CD audio to be extracted as easily as reading any other audio file.
Audio-CD burning is supported for Mac and PC.
Midi
Midi input and output support, including support for creating virtual midi devices on Mac and Linux.
Midi message wrapper classes make it easy to manipulate midi without having to set the bytes directly.
Midi buffer classes provide efficient collating and editing of midi streams.
Midi keyboard state objects will monitor a midi stream and provide information about the state of a virtual keyboard. A customisable on-screen keyboard component is provided.
Classes for merging and re-timing midi input streams to synchronise with audio streams.
Support for reading/writing standard midi format files.
Audio Plugins
The audio plugin wrapper classes let you build a single module that functions as a variety of plugin formats - currently it supports VST (PC, Mac and Linux), AudioUnit (Mac), and RTAS (PC and Mac).
Audio hosting classes are provided for loading and running AU and VST plugins inside your JUCE app.
Whether you're writing a plugin or loading a third-party plugin, the same base classes are used, so you can easily embed your plugin code into a stand-alone application, or load other plugins into your own plugin.
Browser Plugins
The browser plugin wrapper classes let you build a single module that functions as an NPAPI (Firefox, Safari, etc on Mac/PC), and ActiveX (Internet Explorer).
Javascript classes let your plugin communicate with the javascript running on the webpage that's hosting the plugin.
XML
A very fast, fully-integrated XML parser, supporting entity expansion, and external entities.
XML structure classes make it easy to use XML objects as general-purpose data structures in your code, with quick methods for interpreting attributes as various numeric types other than strings.
Because the XML parser is available throughout the library very cheaply, many other classes make use of it to provide quick and easy ways to use XML data - e.g. the URL class has a method to read and parse the contents of an internet URL that contains XML.
Application Utilities
Simple cross-platform application startup/shutdown (although Juce can also be used to build plugins and DLLs with a custom entry/exit points, and command-line utilities with a traditional main() function).
Classes for language-localisation of string constants, using a simple translation file format.
Undo/redo support using an undo manager and undoable action classes
Base classes for file-based document handling, to handle all the logic involved in loading/saving documents, knowing when they are altered, keeping track of recently opened files, etc.
Versatile set of classes for managing a set of named application commands, which can be triggered automatically by menus, keystrokes or buttons. A powerful command-target structure gives flexible control over the dispatch of commands, and ready-made UI components allow sets of key-mappings to be edited and stored.
Property file support makes it very simple to store named values in a settings file for persistance between sessions. All platform-specific details about where this file should be stored are handled automatically.
A global logging object can be assigned, which is takes any output from Juce's internal logging as well as the application's log. A pre-made logger class is provided to write to a file, but custom ones can be added.
Networking
Input stream classes to handle downloads via HTTP and FTP.
URL parsing.
Cross-platform low-level sockets.
An inter-process communication abstraction layer allows communication channels to be set up using either sockets or named pipes, to either a local or remote machine.
Cryptography
Large prime number generator
RSA Key generator and encrypter
BlowFish codec
MD5 hashcode creation class
Miscellaneous
Zip file format parser can decompress and create zip files.
128-bit GUID generator
Various platform-specific utilities, e.g. registry read/write functions on Windows; NSString converters on the Mac.
High-accuracy performance counter class allows timing of code sections and averaging over multiple runs.

hncjs 发表于 2013-1-24 11:56:00

看看不错的{:smile:}

moen 发表于 2013-1-24 12:16:16

不错,........

john_8 发表于 2013-1-24 12:23:19

不错,不知道M3可以处理的来不

xiangye 发表于 2013-1-24 13:00:08

多线程吗
页: [1]
查看完整版本: 跨平台的覆盖音频图像XML网络 C++开源库