public void TestCancelFromOwner() { PreviewTrack track = null; AddStep("get track", () => track = getOwnedTrack()); AddStep("start", () => track.Start()); AddStep("stop by owner", () => trackManager.StopAnyPlaying(this)); AddAssert("stopped", () => !track.IsRunning); }
public void TestStartStop() { PreviewTrack track = null; AddStep("get track", () => track = getOwnedTrack()); AddStep("start", () => track.Start()); AddAssert("started", () => track.IsRunning); AddStep("stop", () => track.Stop()); AddAssert("stopped", () => !track.IsRunning); }
public void TestCancelFromNonOwner() { TestTrackOwner owner = null; PreviewTrack track = null; AddStep("get track", () => Add(owner = new TestTrackOwner(track = getTrack()))); AddStep("start", () => track.Start()); AddStep("attempt stop", () => trackManager.StopAnyPlaying(this)); AddAssert("not stopped", () => track.IsRunning); AddStep("stop by true owner", () => trackManager.StopAnyPlaying(owner)); AddAssert("stopped", () => !track.IsRunning); }
public void TestOwnerNotRegistered() { PreviewTrack track = null; AddStep("get track", () => Add(new TestTrackOwner(track = getTrack(), registerAsOwner: false))); AddUntilStep("wait for loaded", () => track.IsLoaded); AddStep("start track", () => track.Start()); AddUntilStep("track is running", () => track.IsRunning); AddStep("cancel from anyone", () => trackManager.StopAnyPlaying(this)); AddAssert("track stopped", () => !track.IsRunning); }
public void TestCurrentTrackChanges() { PreviewTrack track = null; TestTrackOwner owner = null; AddStep("get track", () => Add(owner = new TestTrackOwner(track = getTrack()))); AddUntilStep("wait loaded", () => track.IsLoaded); AddStep("start track", () => track.Start()); AddAssert("current is track", () => trackManager.CurrentTrack == track); AddStep("pause manager updates", () => trackManager.AllowUpdate = false); AddStep("stop any playing", () => trackManager.StopAnyPlaying(owner)); AddAssert("current not changed", () => trackManager.CurrentTrack == track); AddStep("resume manager updates", () => trackManager.AllowUpdate = true); AddAssert("current is null", () => trackManager.CurrentTrack == null); }
public void TestStartMultipleTracks() { PreviewTrack track1 = null; PreviewTrack track2 = null; AddStep("get tracks", () => { track1 = getOwnedTrack(); track2 = getOwnedTrack(); }); AddStep("start track 1", () => track1.Start()); AddStep("start track 2", () => track2.Start()); AddAssert("track 1 stopped", () => !track1.IsRunning); AddAssert("track 2 started", () => track2.IsRunning); }
public MainViewModel() { ExperimentName = "Experiment01"; FishName = "TLAB"; Comment = ""; MaskRadius = 360; DOB = DateTime.Now - new TimeSpan(5, 0, 0, 0); DisplayImage = ImageType.Camera; if (IsInDesignMode) { return; } _mainImage = new EZImageSource(); _fishImage = new EZImageSource(); var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
private async Task <IPlayable> GetPlayable(PreviewTrack track) { var name = Regex.Match(track.Name, @"^(?<name>(.[^\(\[]+))").Groups["name"].Value; var result = await MusicDataManager.SearchTrack(track.Artist, name); result.Tag = track; var searchResult = result as ISearchResult; if (searchResult != null) { searchResult.Title = track.Name; searchResult.Artist = track.Artist; searchResult.Cover = new BitmapImageProvider(track.Image); } return(result); }
/// <summary> /// Stop running experiment and switch back to preview /// </summary> void Stop() { if (!IsRunning) { return; } IsRunning = false; //shut down experimental threads if (_acquisitionThread != null) { _acquisitionThread.Dispose(); } //experiment stopped, restart preview FrameIndex = 0; var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
/// <summary> /// Restarts image preview /// </summary> void RestartPreview() { //Don't do this while an experiment is running if (IsRunning) { return; } //shut down acquisition thread if (_acquisitionThread != null) { _acquisitionThread.Dispose(); } //restart preview FrameIndex = 0; var preview = new PreviewTrack(Properties.Settings.Default.FrameRate, Properties.Settings.Default.PixelsPermm); _acquisitionThread = new WorkerT <IExperiment>(TrackThreadRun, preview, true, 3000); }
private void onPreviewLoaded(PreviewTrack loadedPreview) { // another async load might have completed before this one. // if so, do not make any changes. if (loadedPreview != previewTrack) { return; } AddInternal(loadedPreview); toggleLoading(false); loadedPreview.Stopped += () => Schedule(() => Playing.Value = false); if (Playing.Value) { tryStartPreview(); } }
private void onPreviewLoaded(PreviewTrack loadedPreview) { // Make sure that we schedule to after the next audio frame to fix crashes in single-threaded execution. // See: https://github.com/ppy/osu-framework/issues/4692 Schedule(() => { // another async load might have completed before this one. // if so, do not make any changes. if (loadedPreview != previewTrack) { return; } AddInternal(loadedPreview); toggleLoading(false); loadedPreview.Stopped += () => Schedule(() => Playing.Value = false); if (Playing.Value) { tryStartPreview(); } }); }
public void TestEnsureMutingCorrectly(bool stopAnyPlaying) { PreviewTrack track = null; TestTrackOwner owner = null; AddStep("ensure volume not zero", () => { if (audio.Volume.Value == 0) { audio.Volume.Value = 1; } if (audio.VolumeTrack.Value == 0) { audio.VolumeTrack.Value = 1; } }); AddAssert("game not muted", () => audio.Tracks.AggregateVolume.Value != 0); AddStep("get track", () => Add(owner = new TestTrackOwner(track = getTrack()))); AddUntilStep("wait loaded", () => track.IsLoaded); AddStep("start track", () => track.Start()); AddAssert("game is muted", () => audio.Tracks.AggregateVolume.Value == 0); if (stopAnyPlaying) { AddStep("stop any playing", () => trackManager.StopAnyPlaying(owner)); } else { AddStep("stop track", () => track.Stop()); } AddAssert("game not muted", () => audio.Tracks.AggregateVolume.Value != 0); }
public TestTrackOwner(PreviewTrack track) { AddInternal(track); }
public TestTrackOwner(PreviewTrack track, bool registerAsOwner = true) { this.track = track; this.registerAsOwner = registerAsOwner; }
void TrackThreadRun(AutoResetEvent stop, IExperiment experiment) { //Set up image for small region around fish Image8 fishImage = new Image8(60, 60); CameraLinkCamera camera = null; try { camera = new CameraLinkCamera(Properties.Settings.Default.CameraInterface); using (Image8 image = new Image8(camera.Width, camera.Height)) { if (experiment != null && experiment.SuggestedBufferSeconds != null) { int buffsize = (int)(experiment.SuggestedBufferSeconds.Value * FrameRate); camera.Start(buffsize > 2 ? buffsize : 2); } else { camera.Start(100);//start camera with 100 frames in buffer by default } while (!stop.WaitOne(0)) { try { FrameIndex = camera.Extract(image, FrameIndex) + 1; IppiPoint?fishCentroid = null; if (experiment != null) { if (!experiment.ProcessNext((int)FrameIndex, image, out fishCentroid)) { break; } } //at 10Hz display camera and fish image if (FrameIndex % (FrameRate / 10) == 0) { //blank the fish image ip.ippiSet_8u_C1R(0, fishImage.Image, fishImage.Stride, fishImage.Size); if (experiment is PreviewTrack && DisplayImage != ImageType.Camera) { Image8 toHandle = null; PreviewTrack pt = experiment as PreviewTrack; switch (DisplayImage) { case ImageType.Background: toHandle = pt.Background; MainImage.CMax = 255; FishImage.CMax = 255; break; case ImageType.Foreground: toHandle = pt.Foreground; MainImage.CMax = 255; FishImage.CMax = 255; break; default: toHandle = pt.Thresholded; MainImage.CMax = 1; FishImage.CMax = 1; break; } if (toHandle != null) { if (fishCentroid != null) { CopyRegionImage(fishCentroid.Value, fishImage, toHandle); } MainImage.Write(toHandle, stop); FishImage.Write(fishImage, stop); } } else { //In preview we also apply our mask if (experiment is PreviewTrack) { if (_maskImage == null || _maskImage.Width != image.Width || _maskImage.Height != image.Height) { if (_maskImage != null) { _maskImage.Dispose(); } _maskImage = new Image8(image.Width, image.Height); DishCenter = new IppiPoint(_maskImage.Width / 2, _maskImage.Height / 2); CreateCircularMask(_maskImage, DishCenter, MaskRadius); } DrawMask(_maskImage, image); } if (fishCentroid != null) { CopyRegionImage(fishCentroid.Value, fishImage, image); } MainImage.CMax = 255; FishImage.CMax = 255; MainImage.Write(image, stop); FishImage.Write(fishImage, stop); } } } catch (OperationCanceledException) { break; } } } } catch (NIImaqException camException) { System.Diagnostics.Debug.WriteLine(camException); } finally { if (experiment != null && experiment is IDisposable) { (experiment as IDisposable).Dispose(); } if (camera != null) { camera.Dispose(); } if (fishImage != null) { fishImage.Dispose(); } if (IsRunning) { DispatcherHelper.CheckBeginInvokeOnUI(() => { Stop(); }); } } }
public TestTrackOwner(PreviewTrack track) { this.track = track; }