 +  bool opened;
 +
 +  int sample_frame_count;
-+  pp::Audio audio;
++  PP_Resource audio;
 +};
 +
 +#endif /* _SDL_naclaudio_h */

+    mount("", "/", "memfs", 0, "");
+  }
+
+  for (int i = 0; i < argc_; i++) {
+    if (!strcmp(argn_[i], "sdl_tar_extract")) {
+      const char* source;
+      const char* target = "/";
+      char* sep;
+      char buf[64];
+
+      const char *q, *p = argv_[i];
+      while (*p) {
+        while (*p && isspace(*p))
+          ++p;
+        if (!*p)
+          break;
+        q = p;
+        while (*p && !isspace(*p))
+          ++p;
+
+        int n = sizeof(buf) - 1;
+        if (p - q < n)
+          n = p - q;
+        strncpy(buf, q, n);
+        buf[n] = '\0';
+

+  SDL_UnlockMutex(_this->hidden->mutex);
+}
+
+static void AudioCallback(void* samples, uint32_t buffer_size, PP_TimeDelta,
+                          void* data) {
+  SDL_AudioDevice* _this = reinterpret_cast<SDL_AudioDevice*>(data);
+
+  SDL_LockMutex(_this->hidden->mutex);
+  if (_this->hidden->opened) {
+    SDL_memset(samples, _this->spec.silence, buffer_size);
+    SDL_LockMutex(_this->mixer_lock);
+    (*_this->spec.callback)(_this->spec.userdata, (Uint8*)samples, buffer_size);
+    SDL_UnlockMutex(_this->mixer_lock);
+  } else {
+    SDL_memset(samples, 0, buffer_size);
