public void MultiChanneltest() { AS.Wall.Material mat = AS.Wall.Material.OakWoodCarpeted; AS.Room room = new AS.Room(); room.FloorMaterial = AS.Wall.Material.Brick; room.CeilingMaterial = AS.Wall.Material.OakWood; room.CeilingHeight = 2; room.AddWall(new AS.Wall(0, 0, 4, 0, mat)); room.AddWall(new AS.Wall(0, 0, 0, 10, mat)); room.AddWall(new AS.Wall(4, 0, 4, 10, mat)); room.AddWall(new AS.Wall(0, 10, 4, 10, mat)); AS.SoundPoint source = new AS.SoundPoint(2, 1); source.Sound = AS.Sound.GetSoundFromWav(@"D:\Whistling.wav"); room.AddSource(source); room.AddListener(new AS.ListenerPoint(1, 8, new AS.Line(0, 0, -1, 0), AS.ListenerPoint.Cardioid)); room.AddListener(new AS.ListenerPoint(3, 8, new AS.Line(0, 0, 1, 0), AS.ListenerPoint.Cardioid)); room.AddListener(new AS.ListenerPoint(2, 8, 2)); room.Listeners[2].Channel = (AS.Sound.Channel) 3; room.CalculateSound(); AS.Sound sound = room.GetSoundFromListeners(); sound.AdjustVolume(0.75); sound.CreateWav(@"D:\Result.wav"); }
private void RoomCanvas_MouseUp(object sender, MouseButtonEventArgs e) { switch (mChosenButton) { case 0: { //Add wall rectangle System.Windows.Point position = e.GetPosition(RoomCanvas); AddMarker(position); Point leftTop = new Point((position.X-mXDrawOffset)/pixelPerMeter, (position.Y-mYDrawOffset)/pixelPerMeter); RoomCanvas.MouseUp -= RoomCanvas_MouseUp; MouseButtonEventHandler roomCanvasRectDraw = null; roomCanvasRectDraw=(sndr, earg) => { mMarkers.Remove(mMarkers.Last()); RoomCanvas.MouseUp-=roomCanvasRectDraw; RoomCanvas.MouseUp += RoomCanvas_MouseUp; position = earg.GetPosition(RoomCanvas); Point bottomRight = new Point((position.X - mXDrawOffset) / pixelPerMeter, (position.Y - mYDrawOffset) / pixelPerMeter); if (Geometry.Distance(leftTop, bottomRight) < 0.25) { mMarkers.Clear(); DrawRoom(); return; } Point topRight = new Point(bottomRight.X,leftTop.Y); Point bottomLeft = new Point(leftTop.X,bottomRight.Y); mUndoElements.Add(mRoom.AddWall(new Wall(leftTop,topRight,Wall.MaterialPreset.OakWood))); mUndoElements.Add(mRoom.AddWall(new Wall(topRight, bottomRight, Wall.MaterialPreset.OakWood))); mUndoElements.Add(mRoom.AddWall(new Wall(bottomRight, bottomLeft, Wall.MaterialPreset.OakWood))); mUndoElements.Add(mRoom.AddWall(new Wall(leftTop, bottomLeft, Wall.MaterialPreset.OakWood))); UndoMenuItem.IsEnabled = true; DrawRoom(); }; mCanvasMousehandlers.Add(roomCanvasRectDraw); RoomCanvas.MouseUp += roomCanvasRectDraw; break; } case 1: { //Add wall System.Windows.Point position = e.GetPosition(RoomCanvas); AddMarker(position); Point first = new Point((position.X-mXDrawOffset) / pixelPerMeter, (position.Y - mYDrawOffset) / pixelPerMeter); //Magneting foreach (Wall wall in mRoom.Walls) { if (Geometry.Distance(wall.Start, first) < closeDistance) { first = wall.Start; break; } if (Geometry.Distance(wall.End, first) < closeDistance) { first = wall.End; break; } } RoomCanvas.MouseUp -= RoomCanvas_MouseUp; MouseButtonEventHandler roomCanvasLineDraw = null; roomCanvasLineDraw = (sndr, earg) => { mMarkers.Remove(mMarkers.Last()); RoomCanvas.MouseUp -= roomCanvasLineDraw; RoomCanvas.MouseUp+=RoomCanvas_MouseUp; position = earg.GetPosition(RoomCanvas); Point second = new Point((position.X-mXDrawOffset) / pixelPerMeter, (position.Y - mYDrawOffset) / pixelPerMeter); if (Geometry.Distance(first, second) < closeDistance) { mMarkers.Clear(); DrawRoom(); return; } //Magneting foreach (Wall wall in mRoom.Walls) { if (Geometry.Distance(wall.Start, second) < closeDistance) { second = wall.Start; break; } if (Geometry.Distance(wall.End, second) < closeDistance) { second = wall.End; break; } } mUndoElements.Add(mRoom.AddWall(new Wall(first,second,Wall.MaterialPreset.OakWood))); UndoMenuItem.IsEnabled = true; DrawRoom(); }; mCanvasMousehandlers.Add(roomCanvasLineDraw); RoomCanvas.MouseUp += roomCanvasLineDraw; break; } case 2: { //Add source System.Windows.Point position = e.GetPosition(RoomCanvas); SoundPoint point = new SoundPoint((position.X-mXDrawOffset)/pixelPerMeter, (position.Y-mYDrawOffset)/pixelPerMeter); if (mBaseSound != null) { point.Sound = mBaseSound; } mUndoElements.Add(point); mRoom.AddSource(point); break; } case 3: { //Add listener System.Windows.Point position = e.GetPosition(RoomCanvas); ListenerPoint point = new ListenerPoint((position.X-mXDrawOffset) / pixelPerMeter, (position.Y-mYDrawOffset) / pixelPerMeter); mUndoElements.Add(point); mRoom.AddListener(point); break; } case 4: { break; } default: { //Select element System.Windows.Point position = e.GetPosition(RoomCanvas); Point point = new Point((position.X-mXDrawOffset) / pixelPerMeter, (position.Y-mYDrawOffset) / pixelPerMeter); mSelectedRoomObject = SelectObject(point); if (mSelectedRoomObject == null) { ((TextBlock) PropsPanel.Children[0]).Text = "Properties"; PropsPanel.Children.RemoveRange(1,PropsPanel.Children.Count-1); mSelectedRoomObject = null; DrawRoom(); return; } if (mSelectedRoomObject is Wall) { Wall wall = mSelectedRoomObject as Wall; UpdateWallProps(wall); } else if (mSelectedRoomObject is ListenerPoint) { ListenerPoint listener = mSelectedRoomObject as ListenerPoint; UpdateListenerProps(listener); } else if (mSelectedRoomObject is SoundPoint) { SoundPoint source = mSelectedRoomObject as SoundPoint; UpdateSourceProps(source); } break; } } DrawRoom(); }
private void UpdateSourceProps(SoundPoint source) { PropsPanel.Children.Clear(); TextBlock name = new TextBlock { FontSize = 20, Text = "SOURCE", TextAlignment = TextAlignment.Center, Width = rightPanelWidth }; PropsPanel.Children.Add(name); TextBlock location = new TextBlock { FontSize = 14, Text = "Location", Width = rightPanelWidth, TextAlignment = TextAlignment.Center }; PropsPanel.Children.Add(location); StackPanel locationPanel = new StackPanel { Orientation = Orientation.Horizontal, Width = rightPanelWidth }; TextBlock xblock = new TextBlock { FontSize = 10, Text = "X: ", Margin = new Thickness(5, 5, 5, 0) }; locationPanel.Children.Add(xblock); TextBox xbox = new TextBox { FontSize = 10, Text = source.X + "", Width = numFieldWidth, TextAlignment = TextAlignment.Left }; locationPanel.Children.Add(xbox); TextBlock yblock = new TextBlock { FontSize = 10, Text = "Y: ", Margin = new Thickness(5, 5, 5, 0) }; locationPanel.Children.Add(yblock); TextBox ybox = new TextBox { FontSize = 10, Text = source.Y + "", Width = numFieldWidth, TextAlignment = TextAlignment.Left }; locationPanel.Children.Add(ybox); PropsPanel.Children.Add(locationPanel); StackPanel altitudePanel = new StackPanel { Orientation = Orientation.Horizontal, Width = rightPanelWidth }; TextBlock altitudeBlock = new TextBlock { FontSize = 10, Text = "Altitude: ", Margin = new Thickness(5, 5, 5, 0) }; TextBox altitudeBox = new TextBox { FontSize = 10, Text = source.Altitude + "", Width = numFieldWidth, TextAlignment = TextAlignment.Left, Margin = new Thickness(5, 5, 5, 0) }; altitudePanel.Children.Add(altitudeBlock); altitudePanel.Children.Add(altitudeBox); PropsPanel.Children.Add(altitudePanel); Button deleteButton = new Button { Content = "Delete source", HorizontalAlignment = HorizontalAlignment.Center, Margin = new Thickness(10, 10, 10, 10) }; PropsPanel.Children.Add(deleteButton); xbox.TextChanged += delegate { double newValue; if (!double.TryParse(xbox.Text, out newValue)) return; for (int i = 0; i < mRoom.Sources.Count; i++) { if (mRoom.Sources[i] == (SoundPoint)mSelectedRoomObject) { mRoom.Sources[i].X = newValue; DrawRoom(); return; } } }; xbox.LostFocus += delegate { var sourcePoint = mSelectedRoomObject as SoundPoint; if (sourcePoint != null) xbox.Text = sourcePoint.X + ""; }; ybox.TextChanged += delegate { double newValue; if (!double.TryParse(ybox.Text, out newValue)) return; for (int i = 0; i < mRoom.Sources.Count; i++) { if (mRoom.Sources[i] == (SoundPoint)mSelectedRoomObject) { mRoom.Sources[i].Y = newValue; DrawRoom(); return; } } }; ybox.LostFocus += delegate { var sourcePoint = mSelectedRoomObject as SoundPoint; if (sourcePoint != null) ybox.Text = sourcePoint.Y + ""; }; altitudeBox.TextChanged += delegate { double newValue; if (!double.TryParse(altitudeBox.Text, out newValue)) return; for (int i = 0; i < mRoom.Sources.Count; i++) { if (mRoom.Sources[i] == (SoundPoint)mSelectedRoomObject) { mRoom.Sources[i].Altitude = newValue; DrawRoom(); return; } } }; altitudeBox.LostFocus += delegate { var sourcePoint = mSelectedRoomObject as SoundPoint; if (sourcePoint != null) altitudeBox.Text = sourcePoint.Altitude + ""; }; deleteButton.Click += delegate { ((TextBlock)PropsPanel.Children[0]).Text = "Properties"; PropsPanel.Children.RemoveRange(1, PropsPanel.Children.Count - 1); mRoom.RemoveSource(mSelectedRoomObject as SoundPoint); mSelectedRoomObject = null; DrawRoom(); }; }
public void PrimaryReflectionsComplexTest() { AS.Wall.Material mat = AS.Wall.Material.OakWoodCarpeted; AS.Room room = new AS.Room(); room.FloorMaterial = AS.Wall.Material.Brick; room.CeilingMaterial = AS.Wall.Material.OakWood; room.CeilingHeight = 2; room.AddWall(new AS.Wall(0, 0, 4, 0, mat)); room.AddWall(new AS.Wall(0, 0, 0, 10, mat)); room.AddWall(new AS.Wall(4, 0, 4, 10, mat)); room.AddWall(new AS.Wall(0, 10, 4, 10, mat)); AS.SoundPoint source = new AS.SoundPoint(2, 1); source.Sound = AS.Sound.GetSoundFromWav(@"D:\Whistling.wav"); room.AddSource(source); room.AddListener(new AS.ListenerPoint(1, 8,new AS.Line(0,0,-1,0),AS.ListenerPoint.Cardioid)); room.AddListener(new AS.ListenerPoint(3, 8, new AS.Line(0,0,1,0),AS.ListenerPoint.Cardioid )); room.CalculateSound(); AS.Sound sound = new AS.Sound(2,source.Sound.DiscretionRate,source.Sound.BitsPerSample); sound.Add(room.Listeners[1].Sound,0,0,0); sound.Add(room.Listeners[0].Sound,0,1,0); sound.AdjustVolume(0.75); //sound.SetVolume(0.6,0); //sound.SetVolume(0.6,1); sound.CreateWav(@"D:\Result.wav"); }
public void PrimaryReflectionsHugeTest() { AS.Wall.Material mat = AS.Wall.Material.Brick; AS.Room room = new AS.Room(); room.FloorMaterial = AS.Wall.Material.Brick; room.CeilingMaterial = AS.Wall.Material.OakWood; room.CeilingHeight = 2; room.AddWall(new AS.Wall(0,5,10,0,mat)); room.AddWall(new AS.Wall(10,0,20,5,mat)); room.AddWall(new AS.Wall(20,5,20,45,mat)); room.AddWall(new AS.Wall(20,45,0,45,mat)); room.AddWall(new AS.Wall(0,45,0,5, mat)); AS.SoundPoint source = new AS.SoundPoint(10,40); source.Sound = AS.Sound.GetSoundFromWav(@"D:\dirac.wav"); room.AddSource(source); room.AddListener(new AS.ListenerPoint(9,4)); room.AddListener(new AS.ListenerPoint(11,4)); room.CalculateSound(); AS.Sound sound = new AS.Sound(2, source.Sound.DiscretionRate, source.Sound.BitsPerSample); sound.Add(room.Listeners[1].Sound, 0, 0, 0); sound.Add(room.Listeners[0].Sound, 0, 1, 0); sound.AdjustVolume(0.75); //sound.SetVolume(0.6, 0); //sound.SetVolume(0.6, 1); sound.CreateWav(@"D:\diracR.wav"); Console.WriteLine(GC.GetTotalMemory(false)/(1024*1024)+""); }