Index: trunk/nv/array2d.hh
===================================================================
--- trunk/nv/array2d.hh	(revision 201)
+++ trunk/nv/array2d.hh	(revision 202)
@@ -38,5 +38,5 @@
 		 * Creates a new 2D array.
 		 */
-		array2d() : m_size(), m_data( nullptr ) {}
+		array2d() : m_data( nullptr ), m_size() {}
 
 		/**
@@ -45,5 +45,5 @@
 		 * @param asize The dimensions of the new array.
 		 */
-		array2d( const ivec2& asize ) : m_size(), m_data( nullptr ) { resize( asize ); }
+		array2d( const ivec2& asize ) : m_data( nullptr ), m_size() { resize( asize ); }
 
 		/**
@@ -53,5 +53,5 @@
 		 * @param asize_y The height of the new array.
 		 */
-		array2d( const sint32 asize_x, const sint32 asize_y ) : m_size(), m_data( nullptr ) { resize( new ivec2( asize_x, asize_y ) ); }
+		array2d( const sint32 asize_x, const sint32 asize_y ) : m_data( nullptr ), m_size() { resize( new ivec2( asize_x, asize_y ) ); }
 		
 		/**
Index: trunk/src/sdl/sdl_audio.cc
===================================================================
--- trunk/src/sdl/sdl_audio.cc	(revision 202)
+++ trunk/src/sdl/sdl_audio.cc	(revision 202)
@@ -0,0 +1,69 @@
+// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
+// http://chaosforge.org/
+//
+// This file is part of NV Libraries.
+// For conditions of distribution and use, see copyright notice in nv.hh
+
+#include "nv/sdl/sdl_audio.hh"
+
+#include "nv/lib/sdl.hh"
+#include "nv/lib/sdl_mixer.hh"
+#include "nv/logging.hh"
+
+using namespace nv;
+
+sdl::audio::audio()
+{
+	nv::load_sdl_library();
+	nv::load_sdl_mixer_library();
+
+	if ( SDL_Init( SDL_INIT_AUDIO ) == -1 ) 
+	{
+		NV_LOG( LOG_CRITICAL, "SDL_AUDIO failed to load -- " << SDL_GetError() );
+		return;
+	}
+
+	if( Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT, 2, 1024 ) == -1 )
+	{
+		NV_LOG( LOG_CRITICAL, "SDL_mixer failed to load -- " << Mix_GetError() );
+		return;
+	}
+}
+
+
+nv::channel* sdl::audio::play_sound( nv::sound* a_sound )
+{
+	if ( Mix_PlayChannel(-1, (Mix_Chunk*)( down_cast< sdl::sound >( a_sound )->m_sound), 0) == -1 )
+	{
+		NV_LOG( LOG_WARNING, "SDL_mixer failed to play -- " << Mix_GetError() );
+	}
+	return nullptr;
+}
+
+nv::sound* nv::sdl::audio::load_sound( const std::string& a_path )
+{
+	Mix_Chunk *sample = Mix_LoadWAV( a_path.c_str() );
+	if ( sample == nullptr )
+	{
+		NV_LOG( LOG_ERROR, "SDL_mixer failed to load sample '" << a_path << "' -- " << Mix_GetError() );
+		return nullptr;
+	}
+	return new sdl::sound( sample );
+}
+
+void nv::sdl::audio::update()
+{
+	// no-op
+}
+
+nv::sdl::audio::~audio()
+{
+	Mix_CloseAudio();
+	// TODO: should we do it here?
+	SDL_Quit();
+}
+
+nv::sdl::sound::~sound()
+{
+	Mix_FreeChunk( (Mix_Chunk*)m_sound );
+}
