diff --git a/Bindings/EsounD.hsc b/Bindings/EsounD.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/EsounD.hsc
@@ -0,0 +1,187 @@
+#include <bindings.dsl.h>
+#include <esd.h>
+
+module Bindings.EsounD where
+#strict_import
+import Bindings.AudioFile
+
+#globalarray ESD_UNIX_SOCKET_DIR , CChar
+#globalarray ESD_UNIX_SOCKET_NAME, CChar
+
+#num ESD_BUF_SIZE
+#num ESD_MAX_WRITE_SIZE
+#num ESD_KEY_LEN
+#num ESD_DEFAULT_PORT
+#num ESD_DEFAULT_RATE
+#num ESD_NAME_MAX
+#num ESD_ENDIAN_KEY
+#num ESD_VOLUME_BASE
+
+#num ESD_PROTO_CONNECT
+#num ESD_PROTO_LOCK
+#num ESD_PROTO_UNLOCK
+#num ESD_PROTO_STREAM_PLAY
+#num ESD_PROTO_STREAM_REC
+#num ESD_PROTO_STREAM_MON
+#num ESD_PROTO_SAMPLE_CACHE
+#num ESD_PROTO_SAMPLE_FREE
+#num ESD_PROTO_SAMPLE_PLAY
+#num ESD_PROTO_SAMPLE_LOOP
+#num ESD_PROTO_SAMPLE_STOP
+#num ESD_PROTO_SAMPLE_KILL
+#num ESD_PROTO_STANDBY
+#num ESD_PROTO_RESUME
+#num ESD_PROTO_SAMPLE_GETID
+#num ESD_PROTO_STREAM_FILT
+#num ESD_PROTO_SERVER_INFO
+#num ESD_PROTO_ALL_INFO
+#num ESD_PROTO_SUBSCRIBE
+#num ESD_PROTO_UNSUBSCRIBE
+#num ESD_PROTO_STREAM_PAN
+#num ESD_PROTO_SAMPLE_PAN
+#num ESD_PROTO_STANDBY_MODE
+#num ESD_PROTO_LATENCY
+#num ESD_PROTO_MAX
+
+#num ESD_MASK_BITS
+#num ESD_BITS8
+#num ESD_BITS16
+
+#num ESD_MASK_CHAN
+#num ESD_MONO
+#num ESD_STEREO
+
+#num ESD_MASK_MODE
+#num ESD_STREAM
+#num ESD_SAMPLE
+#num ESD_ADPCM
+
+#num ESD_MASK_FUNC
+#num ESD_PLAY
+#num ESD_MONITOR
+#num ESD_RECORD
+#num ESD_STOP
+#num ESD_LOOP
+
+#integral_t esd_format_t
+#integral_t esd_proto_t
+
+#integral_t octet
+
+#ccall esd_open_sound, Ptr CChar -> IO CInt
+#ccall esd_send_auth , CInt -> IO CInt
+#ccall esd_lock      , CInt -> IO CInt
+#ccall esd_unlock    , CInt -> IO CInt
+#ccall esd_standby   , CInt -> IO CInt
+#ccall esd_resume    , CInt -> IO CInt
+
+#ccall esd_play_stream           , <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_play_stream_fallback  , <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_monitor_stream        , <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_record_stream         , <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_record_stream_fallback, <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_filter_stream         , <esd_format_t> -> CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+#ccall esd_sample_cache          , CInt -> <esd_format_t> -> CInt -> CInt -> Ptr CChar -> IO CInt
+#ccall esd_confirm_sample_cache  , CInt -> IO CInt
+#ccall esd_sample_getid          , CInt -> Ptr CChar -> IO CInt
+#ccall esd_sample_free           , CInt -> CInt -> IO CInt
+#ccall esd_sample_play           , CInt -> CInt -> IO CInt
+#ccall esd_sample_loop           , CInt -> CInt -> IO CInt
+#ccall esd_sample_stop           , CInt -> CInt -> IO CInt
+#ccall esd_sample_kill           , CInt -> CInt -> IO CInt
+#ccall esd_close                 , CInt -> IO CInt
+#ccall esd_get_latency           , CInt -> IO CInt
+
+#starttype struct esd_server_info
+#  field version, CInt
+#  field format , <esd_format_t>
+#  field rate   , CInt
+#stoptype
+#synonym_t esd_server_info_t, <esd_server_info>
+
+#starttype struct esd_player_info
+#  field next           , Ptr <esd_player_info>
+#  field server         , Ptr <esd_server_info_t>
+#  field source_id      , CInt
+#  array_field name     , CChar
+#  field rate           , CInt
+#  field left_vol_scale , CInt
+#  field right_vol_scale, CInt
+#  field format         , <esd_format_t>
+#stoptype
+#synonym_t esd_player_info_t, <esd_player_info>
+
+#starttype struct esd_sample_info
+#  field next           , Ptr <esd_sample_info>
+#  field server         , Ptr <esd_server_info_t>
+#  field sample_id      , CInt
+#  array_field name     , CChar
+#  field rate           , CInt
+#  field left_vol_scale , CInt
+#  field right_vol_scale, CInt
+#  field format         , <esd_format_t>
+#  field length         , CInt
+#stoptype
+#synonym_t esd_sample_info_t, <esd_sample_info>
+
+#starttype struct esd_info
+#  field server     , Ptr <esd_server_info_t>
+#  field player_list, Ptr <esd_player_info_t>
+#  field sample_list, Ptr <esd_sample_info_t>
+#stoptype
+#synonym_t esd_info_t, <esd_info>
+
+#num ESM_ERROR
+#num ESM_ON_STANDBY
+#num ESM_ON_AUTOSTANDBY
+#num ESM_RUNNING
+#integral_t esd_standby_mode_t
+
+#callback esd_new_player_callback_t, Ptr <esd_player_info_t> -> IO CInt
+#callback esd_old_player_callback_t, Ptr <esd_player_info_t> -> IO CInt
+#callback esd_new_sample_callback_t, Ptr <esd_sample_info_t> -> IO CInt
+#callback esd_old_sample_callback_t, Ptr <esd_sample_info_t> -> IO CInt
+
+#starttype struct esd_update_info_callbacks
+#  field esd_new_player_callback, Ptr <esd_new_player_callback_t>
+#  field esd_old_player_callback, Ptr <esd_old_player_callback_t>
+#  field esd_new_sample_callback, Ptr <esd_new_sample_callback_t>
+#  field esd_old_sample_callback, Ptr <esd_old_sample_callback_t>
+#stoptype
+#synonym_t esd_update_info_callbacks_t, <esd_update_info_callbacks>
+
+#ccall esd_print_server_info     , Ptr <esd_server_info_t> -> IO ()
+#ccall esd_print_player_info     , Ptr <esd_player_info_t> -> IO ()
+#ccall esd_print_sample_info     , Ptr <esd_sample_info_t> -> IO ()
+#ccall esd_print_all_info        , Ptr <esd_info_t> -> IO ()
+#ccall esd_get_server_info       , CInt -> IO (Ptr <esd_server_info_t>)
+#ccall esd_free_server_info      , Ptr <esd_server_info_t> -> IO ()
+#ccall esd_get_all_info          , CInt -> IO (Ptr <esd_info_t>)
+#ccall esd_subscribe_all_info    , CInt -> IO (Ptr <esd_info_t>)
+#ccall esd_update_info           , CInt -> Ptr <esd_info_t> -> Ptr <esd_update_info_callbacks_t> -> IO (Ptr <esd_info_t>)
+#ccall esd_unsubscribe_info      , CInt -> IO (Ptr <esd_info_t>)
+#ccall esd_free_all_info         , Ptr <esd_info_t> -> IO ()
+#ccall esd_set_stream_pan        , CInt -> CInt -> CInt -> CInt -> IO CInt
+#ccall esd_set_default_sample_pan, CInt -> CInt -> CInt -> CInt -> IO CInt
+#ccall esd_get_standby_mode      , CInt -> IO <esd_standby_mode_t>
+
+#ccall esd_send_file , CInt -> <AFfilehandle> -> CInt -> IO CInt
+#ccall esd_play_file , Ptr CChar -> Ptr CChar -> CInt -> IO CInt
+#ccall esd_file_cache, CInt -> Ptr CChar -> Ptr CChar -> IO CInt
+
+#globalvar esd_audio_format, <esd_format_t>
+#globalvar esd_audio_rate  , CInt
+#globalvar esd_audio_device, Ptr CChar
+
+#ccall esd_audio_devices, IO (Ptr CChar)
+#ccall esd_audio_open   , IO CInt
+#ccall esd_audio_close  , IO ()
+#ccall esd_audio_pause  , IO ()
+#ccall esd_audio_write  , Ptr () -> CInt -> IO CInt
+#ccall esd_audio_read   , Ptr () -> CInt -> IO CInt
+#ccall esd_audio_flush  , IO ()
+
+#ccall esd_get_socket_dirname, IO (Ptr CChar)
+#ccall esd_get_socket_name   , IO (Ptr CChar)
+
+#ccall have_ipv6, IO CInt
diff --git a/COPYING b/COPYING
new file mode 100644
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+<!-- -*- xml -*-
+
+bindings-EsounD はパブリックドメインに在ります。
+bindings-EsounD is in the public domain.
+
+See http://creativecommons.org/licenses/publicdomain/
+
+-->
+
+<rdf:RDF xmlns="http://web.resource.org/cc/"
+	     xmlns:dc="http://purl.org/dc/elements/1.1/"
+	     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+  <Work rdf:about="http://cielonegro.org/Bindings-EsounD.html">
+	<dc:title>bindings-EsounD</dc:title>
+	<dc:rights>
+      <Agent>
+	    <dc:title>PHO</dc:title>
+	  </Agent>
+    </dc:rights>
+	<license rdf:resource="http://web.resource.org/cc/PublicDomain" />
+  </Work>
+      
+  <License rdf:about="http://web.resource.org/cc/PublicDomain">
+	<permits rdf:resource="http://web.resource.org/cc/Reproduction" />
+	<permits rdf:resource="http://web.resource.org/cc/Distribution" />
+	<permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+  </License>
+
+</rdf:RDF>
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,4 @@
+#!/usr/bin/env runghc
+
+import Distribution.Simple
+main = defaultMain
diff --git a/bindings-EsounD.cabal b/bindings-EsounD.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-EsounD.cabal
@@ -0,0 +1,39 @@
+Name: bindings-EsounD
+Synopsis: Low level bindings to EsounD (ESD; Enlightened Sound Daemon)
+Description:
+        Bindings to EsounD: <http://www.tux.org/~ricdude/EsounD.html>
+Version: 0.1
+License: PublicDomain
+License-File: COPYING
+Author: PHO <pho at cielonegro dot org>
+Maintainer: PHO <pho at cielonegro dot org>
+Stability: experimental
+Homepage: http://cielonegro.org/Bindings-EsounD.html
+Category: FFI
+Tested-With: GHC == 6.12.3
+Cabal-Version: >= 1.6
+Build-Type: Simple
+Extra-Source-Files:
+    COPYING
+
+Source-Repository head
+    Type: git
+    Location: git://git.cielonegro.org/bindings-EsounD.git
+
+Library
+    Build-Depends:
+        base               == 4.2.*,
+        bindings-DSL       == 1.0.*,
+        bindings-audiofile == 0.1.*
+
+    Exposed-Modules:
+        Bindings.EsounD
+
+    PkgConfig-Depends:
+        esound >= 0.2.41
+
+    C-Sources:
+        cbits/helper_EsounD.c
+
+    Extensions:
+        ForeignFunctionInterface
diff --git a/cbits/helper_EsounD.c b/cbits/helper_EsounD.c
new file mode 100644
--- /dev/null
+++ b/cbits/helper_EsounD.c
@@ -0,0 +1,5 @@
+#include <bindings.cmacros.h>
+#include <esd.h>
+
+BC_GLOBALARRAY(ESD_UNIX_SOCKET_DIR , char)
+BC_GLOBALARRAY(ESD_UNIX_SOCKET_NAME, char)
