+{
+ if (!_session) {
+ return;
+ }
+
+ _session->cancel_audition();
+
+ if (access(path.c_str(), R_OK)) {
+ warning << string_compose(_("Could not read file: %1 (%2)."), path, strerror(errno)) << endmsg;
+ return;
+ }
+
+ static std::map<string, AudioRegion*> region_cache;
+
+ if (region_cache.find (path) == region_cache.end()) {
+ AudioRegion::SourceList srclist;
+ ExternalSource* sfs;
+
+ for (int n = 0; n < sf_info.channels; ++n) {
+ try {
+ sfs = ExternalSource::create (path+":"+string_compose("%1", n), false);
+ srclist.push_back(sfs);
+
+ } catch (failed_constructor& err) {
+ error << _("Could not access soundfile: ") << path << endmsg;
+ return;
+ }
+ }
+
+ if (srclist.empty()) {
+ return;
+ }
+
+ string result;
+ _session->region_name (result, Glib::path_get_basename(srclist[0]->name()), false);
+ AudioRegion* a_region = new AudioRegion(srclist, 0, srclist[0]->length(), result, 0, Region::DefaultFlags, false);
+ region_cache[path] = a_region;
+ }
+
+ play_btn.hide();
+ stop_btn.show();
+
+ _session->audition_region(*region_cache[path]);
+}