diff --git a/cicm_web/Controllers/MachineController.cs b/cicm_web/Controllers/MachineController.cs index e4393a2f..4fbfaf14 100644 --- a/cicm_web/Controllers/MachineController.cs +++ b/cicm_web/Controllers/MachineController.cs @@ -28,7 +28,8 @@ // Copyright © 2003-2018 Natalia Portillo *******************************************************************************/ -using cicm_web.Models; +using System.Linq; +using Cicm.Database.Models; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; @@ -36,18 +37,20 @@ namespace cicm_web.Controllers { public class MachineController : Controller { + readonly cicmContext _context; readonly IHostingEnvironment hostingEnvironment; - public MachineController(IHostingEnvironment env) + public MachineController(IHostingEnvironment env, cicmContext context) { hostingEnvironment = env; + _context = context; } public IActionResult View(int id) { ViewBag.WebRootPath = hostingEnvironment.WebRootPath; - return View(Machine.GetItem(id)); + return View(_context.Machines.FirstOrDefault(m => m.Id == id)); } } } \ No newline at end of file diff --git a/cicm_web/Views/Machine/View.cshtml b/cicm_web/Views/Machine/View.cshtml index cea6db50..168646cb 100644 --- a/cicm_web/Views/Machine/View.cshtml +++ b/cicm_web/Views/Machine/View.cshtml @@ -33,8 +33,12 @@ } @using System.IO @using Cicm.Database -@model Machine - +@using Cicm.Database.Models +@using MemoryByMachine = Cicm.Database.Models.MemoryByMachine +@using SoundByMachine = Cicm.Database.Models.SoundByMachine +@using StorageByMachine = Cicm.Database.Models.StorageByMachine +@model Cicm.Database.Models.Machine +@* TODO

@if(Model.Company.LastLogo != null && File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos", Model.Company.LastLogo.Guid + ".svg"))) { @@ -56,8 +60,11 @@ }

+*@ -@if(Model.Introduced.Year == 1000) +@{ int counter = 0; } + +@if(Model.Introduced.HasValue && Model.Introduced.Value.Year == 1000) {
PROTOTYPE
@@ -71,7 +78,7 @@ @Model.Company.Name @Model.Name
-@if(Model.Introduced.Year != 1000) +@if(Model.Introduced.HasValue && Model.Introduced.Value.Year != 1000) { } @@ -119,7 +126,7 @@ } -@if(Model.Processors != null && Model.Processors.Length > 0) +@if(Model.Processors.Count > 0) { } -@if(Model.Memories != null && Model.Memories.Length > 0) +@if(Model.Memory != null && Model.Memory.Count > 0) {
- @Model.Introduced.ToLongDateString() + asp-route-id="@Model.Introduced.Value.Year"> + @Model.Introduced.Value.ToLongDateString()
@@ -129,239 +136,239 @@ - @for(int i = 0; i < Model.Processors.Length; i++) + @{ counter = 0; } + @foreach(ProcessorsByMachine processorByMachine in Model.Processors) { - if(Model.Processors[i] != null) + + + + + + counter++; }
+ @if(processorByMachine.Speed > 0) { @(processorByMachine.Processor.GprSize > 0 ? $"{processorByMachine.Processor.Name} @ {processorByMachine.Speed}Mhz ({processorByMachine.Processor.GprSize} bits)" : $"{processorByMachine.Processor.Name} @ {processorByMachine.Speed}Mhz") } + else + { @($"{processorByMachine.Processor.Name}") } + +
+
+ + @if(processorByMachine.Processor.ModelCode != null && processorByMachine.Processor.ModelCode != processorByMachine.Processor.Name) { - - + + } + + + + + @if(processorByMachine.Processor.Introduced != DateTime.MinValue) + { + + + + + } + @if(processorByMachine.Processor.InstructionSet != null) + { + + + + + } + @if(processorByMachine.Processor.Speed > 0) + { + + + + + } + @if(processorByMachine.Processor.Gprs > 0 || processorByMachine.Processor.Fprs > 0 || processorByMachine.Processor.SimdRegisters > 0) + { + + + + + } + @if(processorByMachine.Processor.Cores > 1) + { + + + + + } + @if(processorByMachine.Processor.Cores > 1) + { + + + + + } + @if(processorByMachine.Processor.DataBus > 0 || processorByMachine.Processor.AddrBus > 0) + { + + + + + } + + @if(processorByMachine.Processor.L1Instruction > 0 || processorByMachine.Processor.L1Data > 0 || processorByMachine.Processor.L2 > 0 || processorByMachine.Processor.L2 > 0) + { + + + + + } + @if(processorByMachine.Processor.Package != null) + { + + + + + } + @if(processorByMachine.Processor.Process != null || processorByMachine.Processor.ProcessNm > 0) + { + + + + + } + @if(processorByMachine.Processor.DieSize > 0) + { + + + + + } + @if(processorByMachine.Processor.Transistors > 0) + { + + + + + } +
- @if(Model.Processors[i].Speed > 0) { @(Model.Processors[i].Processor.GprSize > 0 ? $"{Model.Processors[i].Processor.Name} @ {Model.Processors[i].Speed}Mhz ({Model.Processors[i].Processor.GprSize} bits)" : $"{Model.Processors[i].Processor.Name} @ {Model.Processors[i].Speed}Mhz") } - else - { @($"{Model.Processors[i].Processor.Name}") } - -
-
- - @if(Model.Processors[i].Processor.ModelCode != null && Model.Processors[i].Processor.ModelCode != Model.Processors[i].Processor.Name) - { - - - - - } - - - - - @if(Model.Processors[i].Processor.Introduced != DateTime.MinValue) - { - - - - - } - @if(Model.Processors[i].Processor.InstructionSet != null) - { - - - - - } - @if(Model.Processors[i].Processor.Speed > 0) - { - - - - - } - @if(Model.Processors[i].Processor.Gpr > 0 || Model.Processors[i].Processor.Fpr > 0 || Model.Processors[i].Processor.Simd > 0) - { - - - - - } - @if(Model.Processors[i].Processor.Cores > 1) - { - - - - - } - @if(Model.Processors[i].Processor.Cores > 1) - { - - - - - } - @if(Model.Processors[i].Processor.DataBus > 0 || Model.Processors[i].Processor.AddressBus > 0) - { - - - - - } - - @if(Model.Processors[i].Processor.L1Instruction > 0 || Model.Processors[i].Processor.L1Data > 0 || Model.Processors[i].Processor.L2 > 0 || Model.Processors[i].Processor.L2 > 0) - { - - - - - } - @if(Model.Processors[i].Processor.Package != null) - { - - - - - } - @if(Model.Processors[i].Processor.Process != null || Model.Processors[i].Processor.ProcessNm > 0) - { - - - - - } - @if(Model.Processors[i].Processor.DieSize > 0) - { - - - - - } - @if(Model.Processors[i].Processor.Transistors > 0) - { - - - - - } -
Model@Model.Processors[i].Processor.ModelCode
Manufacturer - - @Model.Processors[i].Processor.Company.Name -
Introduction date@($"{Model.Processors[i].Processor.Introduced:yyyy}")
Instruction set@Model.Processors[i].Processor.InstructionSet.Name
Nominal speed@Model.Processors[i].Processor.Speed MHz
Registers - - @if(Model.Processors[i].Processor.Gpr > 0) - { - - - - } - @if(Model.Processors[i].Processor.Fpr > 0) - { - - - - } - @if(Model.Processors[i].Processor.Simd > 0) - { - - - - } -
- @Model.Processors[i].Processor.Gpr general purpose registers of @Model.Processors[i].Processor.GprSize bits - @if(Model.Processors[i].Processor.FprSize > 0 && Model.Processors[i].Processor.Fpr == 0) { @($", that can be used as floating point registers of {Model.Processors[i].Processor.FprSize}") } - @if(Model.Processors[i].Processor.SimdSize > 0 && Model.Processors[i].Processor.Simd == 0) { @($", that can be used as SIMD registers of {Model.Processors[i].Processor.FprSize}") } -
- @Model.Processors[i].Processor.Fpr floating-point registers of @Model.Processors[i].Processor.FprSize bits - @if(Model.Processors[i].Processor.SimdSize > 0 && Model.Processors[i].Processor.Simd == 0) { @($", that can be used as SIMD registers of {Model.Processors[i].Processor.FprSize}") } -
- @Model.Processors[i].Processor.Simd SIMDregisters of @Model.Processors[i].Processor.SimdSize bits -
-
Multi-core@Model.Processors[i].Processor.Cores cores
- SMT - - @Model.Processors[i].Processor.ThreadsPerCore threads - @if(Model.Processors[i].Processor.Cores > 1) { @(" per core") } -
Bus - - @if(Model.Processors[i].Processor.DataBus > 0) - { - - - - } - @if(Model.Processors[i].Processor.AddressBus > 0) - { - - - - } -
- @Model.Processors[i].Processor.DataBus-bit data -
- @Model.Processors[i].Processor.AddressBus-bit address -
-
Cache - - @if(Model.Processors[i].Processor.L1Instruction > 0) - { - - - - } - @if(Model.Processors[i].Processor.L1Data > 0) - { - - - - } - @if(Model.Processors[i].Processor.L2 > 0) - { - - - - } - @if(Model.Processors[i].Processor.L3 > 0) - { - - - - } -
- @(Model.Processors[i].Processor.L1Data < 0 ? $"{Model.Processors[i].Processor.L1Instruction}KiB combined instruction-data L1" : $"{Model.Processors[i].Processor.L1Instruction}KiB instruction L1") -
- @($"{Model.Processors[i].Processor.L1Data}KiB data L1") -
- @($"{Model.Processors[i].Processor.L2}KiB L2") -
- @($"{Model.Processors[i].Processor.L3}KiB L3") -
-
Package@Model.Processors[i].Processor.Package
Manufacturing process - @if(Model.Processors[i].Processor.Process != null && Model.Processors[i].Processor.ProcessNm > 0) - { - @Model.Processors[i].Processor.Process - @("@") - @(Model.Processors[i].Processor.ProcessNm > 100 ? $"{Model.Processors[i].Processor.ProcessNm / 100}µm" : $"{Model.Processors[i].Processor.ProcessNm}nm") - } - else if(Model.Processors[i].Processor.ProcessNm > 0) { @(Model.Processors[i].Processor.ProcessNm > 100 ? $"{Model.Processors[i].Processor.ProcessNm / 100}µm" : $"{Model.Processors[i].Processor.ProcessNm}nm") } - else - { @Model.Processors[i].Processor.Process } -
Die size@Model.Processors[i].Processor.DieSize mm²
Transistors@Model.Processors[i].Processor.Transistors
-
-
-
Model@processorByMachine.Processor.ModelCode
Manufacturer + + @processorByMachine.Processor.Company.Name +
Introduction date@($"{processorByMachine.Processor.Introduced:yyyy}")
Instruction set@processorByMachine.Processor.InstructionSet.Name
Nominal speed@processorByMachine.Processor.Speed MHz
Registers + + @if(processorByMachine.Processor.Gprs > 0) + { + + + + } + @if(processorByMachine.Processor.Fprs > 0) + { + + + + } + @if(processorByMachine.Processor.SimdRegisters > 0) + { + + + + } +
+ @processorByMachine.Processor.Gprs general purpose registers of @processorByMachine.Processor.GprSize bits + @if(processorByMachine.Processor.FprSize > 0 && processorByMachine.Processor.Fprs == 0) { @($", that can be used as floating point registers of {processorByMachine.Processor.FprSize}") } + @if(processorByMachine.Processor.SimdSize > 0 && processorByMachine.Processor.SimdRegisters == 0) { @($", that can be used as SIMD registers of {processorByMachine.Processor.FprSize}") } +
+ @processorByMachine.Processor.Fprs floating-point registers of @processorByMachine.Processor.FprSize bits + @if(processorByMachine.Processor.SimdSize > 0 && processorByMachine.Processor.SimdRegisters == 0) { @($", that can be used as SIMD registers of {processorByMachine.Processor.FprSize}") } +
+ @processorByMachine.Processor.SimdRegisters SIMDregisters of @processorByMachine.Processor.SimdSize bits +
+
Multi-core@processorByMachine.Processor.Cores cores
+ SMT + + @processorByMachine.Processor.ThreadsPerCore threads + @if(processorByMachine.Processor.Cores > 1) { @(" per core") } +
Bus + + @if(processorByMachine.Processor.DataBus > 0) + { + + + + } + @if(processorByMachine.Processor.AddrBus > 0) + { + + + + } +
+ @processorByMachine.Processor.DataBus-bit data +
+ @processorByMachine.Processor.AddrBus-bit address +
+
Cache + + @if(processorByMachine.Processor.L1Instruction > 0) + { + + + + } + @if(processorByMachine.Processor.L1Data > 0) + { + + + + } + @if(processorByMachine.Processor.L2 > 0) + { + + + + } + @if(processorByMachine.Processor.L3 > 0) + { + + + + } +
+ @(processorByMachine.Processor.L1Data < 0 ? $"{processorByMachine.Processor.L1Instruction}KiB combined instruction-data L1" : $"{processorByMachine.Processor.L1Instruction}KiB instruction L1") +
+ @($"{processorByMachine.Processor.L1Data}KiB data L1") +
+ @($"{processorByMachine.Processor.L2}KiB L2") +
+ @($"{processorByMachine.Processor.L3}KiB L3") +
+
Package@processorByMachine.Processor.Package
Manufacturing process + @if(processorByMachine.Processor.Process != null && processorByMachine.Processor.ProcessNm > 0) + { + @processorByMachine.Processor.Process + @("@") + @(processorByMachine.Processor.ProcessNm > 100 ? $"{processorByMachine.Processor.ProcessNm / 100}µm" : $"{processorByMachine.Processor.ProcessNm}nm") + } + else if(processorByMachine.Processor.ProcessNm > 0) { @(processorByMachine.Processor.ProcessNm > 100 ? $"{processorByMachine.Processor.ProcessNm / 100}µm" : $"{processorByMachine.Processor.ProcessNm}nm") } + else + { @processorByMachine.Processor.Process } +
Die size@processorByMachine.Processor.DieSize mm²
Transistors@processorByMachine.Processor.Transistors
+
+
+
@@ -371,7 +378,7 @@ - @foreach(MemoryByMachine memory in Model.Memories) + @foreach(MemoryByMachine memory in Model.Memory) { string memValue; if(memory.Size > 1073741824) { memValue = $"{memory.Size / 1073741824} GiB"; } @@ -397,7 +404,7 @@ } -@if(Model.Gpus != null && Model.Gpus.Length > 0) +@if(Model.Gpus.Count > 0) { } -@if(Model.SoundSynths != null && Model.SoundSynths.Length > 0) +@if(Model.Sound.Count > 0) { } -@if(Model.Storage != null && Model.Storage.Length > 0) +@if(Model.Storage.Count > 0) {
@@ -407,121 +414,116 @@ - @for(int i = 0; i < Model.Gpus.Length; i++) + @{ counter = 0; } + @foreach(GpusByMachine gpuByMachine in Model.Gpus) { - if(Model.Gpus[i] != null) + if(gpuByMachine.Gpu.Id == -2) { - if(Model.Gpus[i].Gpu.Id == -2) - { - - } - else - { - - } + + } else { - + } + counter++; }
- Framebuffer - -
-
- This computer directly draws pixels from software to a memory region that's converted to video output by a DAC or similar without using any specific graphics processing unit. -
+
+ Framebuffer + +
+
+ This computer directly draws pixels from software to a memory region that's converted to video output by a DAC or similar without using any specific graphics processing unit.
-
- @($"{Model.Gpus[i].Gpu.Name}") - -
-
- - @if(Model.Gpus[i].Gpu.ModelCode != null && Model.Gpus[i].Gpu.ModelCode != Model.Gpus[i].Gpu.Name) - { - - - - - } - - - - - @if(Model.Gpus[i].Gpu.Introduced != DateTime.MinValue) - { - - - - - } - @if(Model.Gpus[i].Gpu.Package != null) - { - - - - - } - @if(Model.Gpus[i].Gpu.Process != null || Model.Gpus[i].Gpu.ProcessNm > 0) - { - - - - - } - @if(Model.Gpus[i].Gpu.DieSize > 0) - { - - - - - } - @if(Model.Gpus[i].Gpu.Transistors > 0) - { - - - - - } -
Model@Model.Gpus[i].Gpu.ModelCode
Manufacturer - - @Model.Gpus[i].Gpu.Company.Name -
Introduction date@($"{Model.Gpus[i].Gpu.Introduced:yyyy}")
Package@Model.Gpus[i].Gpu.Package
Manufacturing process - @if(Model.Gpus[i].Gpu.Process != null && Model.Gpus[i].Gpu.ProcessNm > 0) - { - @Model.Gpus[i].Gpu.Process - @("@") - @(Model.Gpus[i].Gpu.ProcessNm > 100 ? $"{Model.Gpus[i].Gpu.ProcessNm / 100}µm" : $"{Model.Gpus[i].Gpu.ProcessNm}nm") - } - else if(Model.Gpus[i].Gpu.ProcessNm > 0) { @(Model.Gpus[i].Gpu.ProcessNm > 100 ? $"{Model.Gpus[i].Gpu.ProcessNm / 100}µm" : $"{Model.Gpus[i].Gpu.ProcessNm}nm") } - else - { @Model.Gpus[i].Gpu.Process } -
Die size@Model.Gpus[i].Gpu.DieSize mm²
Transistors@Model.Gpus[i].Gpu.Transistors
-
-
-
Unknown data + @($"{gpuByMachine.Gpu.Name}") + +
+
+ + @if(gpuByMachine.Gpu.ModelCode != null && gpuByMachine.Gpu.ModelCode != gpuByMachine.Gpu.Name) + { + + + + + } + + + + + @if(gpuByMachine.Gpu.Introduced != DateTime.MinValue) + { + + + + + } + @if(gpuByMachine.Gpu.Package != null) + { + + + + + } + @if(gpuByMachine.Gpu.Process != null || gpuByMachine.Gpu.ProcessNm > 0) + { + + + + + } + @if(gpuByMachine.Gpu.DieSize > 0) + { + + + + + } + @if(gpuByMachine.Gpu.Transistors > 0) + { + + + + + } +
Model@gpuByMachine.Gpu.ModelCode
Manufacturer + + @gpuByMachine.Gpu.Company.Name +
Introduction date@($"{gpuByMachine.Gpu.Introduced:yyyy}")
Package@gpuByMachine.Gpu.Package
Manufacturing process + @if(gpuByMachine.Gpu.Process != null && gpuByMachine.Gpu.ProcessNm > 0) + { + @gpuByMachine.Gpu.Process + @("@") + @(gpuByMachine.Gpu.ProcessNm > 100 ? $"{gpuByMachine.Gpu.ProcessNm / 100}µm" : $"{gpuByMachine.Gpu.ProcessNm}nm") + } + else if(gpuByMachine.Gpu.ProcessNm > 0) { @(gpuByMachine.Gpu.ProcessNm > 100 ? $"{gpuByMachine.Gpu.ProcessNm / 100}µm" : $"{gpuByMachine.Gpu.ProcessNm}nm") } + else + { @gpuByMachine.Gpu.Process } +
Die size@gpuByMachine.Gpu.DieSize mm²
Transistors@gpuByMachine.Gpu.Transistors
+
+
+
@@ -531,153 +533,148 @@ - @for(int i = 0; i < Model.SoundSynths.Length; i++) + @{ counter = 0; } + @foreach(SoundByMachine soundByMachine in Model.Sound) { - @if(Model.SoundSynths[i] != null) + @if(soundByMachine.SoundSynth.Id == -2) { - if(Model.SoundSynths[i].SoundSynth.Id == -2) - { - - } - else - { - - } + + } else { - + } + counter++; }
- Software - -
-
- This computer directly sends data to a DAC or similar connected to the audio output. -
+
+ Software + +
+
+ This computer directly sends data to a DAC or similar connected to the audio output.
-
- @($"{Model.SoundSynths[i].SoundSynth.Name}") - -
-
- - @if(Model.SoundSynths[i].SoundSynth.ModelCode != null && Model.SoundSynths[i].SoundSynth.ModelCode != Model.SoundSynths[i].SoundSynth.Name) - { - - - - - } - @if(Model.SoundSynths[i].SoundSynth.Company != null) - { - - - - - } - @if(Model.SoundSynths[i].SoundSynth.Introduced != DateTime.MinValue) - { - - - - - } - @if(Model.SoundSynths[i].SoundSynth.Voices != 0 || Model.SoundSynths[i].SoundSynth.SquareWave != 0 || Model.SoundSynths[i].SoundSynth.WhiteNoise != 0) - { - - - - - } - @if(Model.SoundSynths[i].SoundSynth.Depth != 0 || Model.SoundSynths[i].SoundSynth.Frequency > 0) - { - - - - - } - @if(Model.SoundSynths[i].SoundSynth.Type != 0) - { - - - - - } -
Model@Model.SoundSynths[i].SoundSynth.ModelCode
Manufacturer - - @Model.SoundSynths[i].SoundSynth.Company.Name -
Introduction date@($"{Model.Gpus[i].Gpu.Introduced:yyyy}")
Generators - - @if(Model.SoundSynths[i].SoundSynth.Voices != 0) - { - - - - } - @if(Model.SoundSynths[i].SoundSynth.SquareWave != 0) - { - - - - } - @if(Model.SoundSynths[i].SoundSynth.WhiteNoise != 0) - { - - - - } -
@Model.SoundSynths[i].SoundSynth.Voices voices
@Model.SoundSynths[i].SoundSynth.SquareWave square wave
@Model.SoundSynths[i].SoundSynth.WhiteNoise white noise
-
Sample rate - - @if(Model.SoundSynths[i].SoundSynth.Depth != 0 && Model.SoundSynths[i].SoundSynth.Frequency > 0) - { - - - - } - else if(Model.SoundSynths[i].SoundSynth.Depth != 0) - { - - - - } - else - { - - - - } -
@Model.SoundSynths[i].SoundSynth.Depth bits at @(Model.SoundSynths[i].SoundSynth.Frequency > 1000 ? $"{Model.SoundSynths[i].SoundSynth.Frequency / 1000}KHz" : $"{Model.SoundSynths[i].SoundSynth.Frequency}Hz")
@Model.SoundSynths[i].SoundSynth.Depth bits
@(Model.SoundSynths[i].SoundSynth.Frequency > 1000 ? $"{Model.SoundSynths[i].SoundSynth.Frequency / 1000}KHz" : $"{Model.SoundSynths[i].SoundSynth.Frequency}Hz")
-
Synthetizer type - @Model.SoundSynths[i].SoundSynth.Type -
-
-
-
Unknown data + @($"{soundByMachine.SoundSynth.Name}") + +
+
+ + @if(soundByMachine.SoundSynth.ModelCode != null && soundByMachine.SoundSynth.ModelCode != soundByMachine.SoundSynth.Name) + { + + + + + } + @if(soundByMachine.SoundSynth.Company != null) + { + + + + + } + @if(soundByMachine.SoundSynth.Introduced != DateTime.MinValue) + { + + + + + } + @if(soundByMachine.SoundSynth.Voices != 0 || soundByMachine.SoundSynth.SquareWave != 0 || soundByMachine.SoundSynth.WhiteNoise != 0) + { + + + + + } + @if(soundByMachine.SoundSynth.Depth != 0 || soundByMachine.SoundSynth.Frequency > 0) + { + + + + + } + @if(soundByMachine.SoundSynth.Type != 0) + { + + + + + } +
Model@soundByMachine.SoundSynth.ModelCode
Manufacturer + + @soundByMachine.SoundSynth.Company.Name +
Introduction date@($"{soundByMachine.SoundSynth.Introduced:yyyy}")
Generators + + @if(soundByMachine.SoundSynth.Voices != 0) + { + + + + } + @if(soundByMachine.SoundSynth.SquareWave != 0) + { + + + + } + @if(soundByMachine.SoundSynth.WhiteNoise != 0) + { + + + + } +
@soundByMachine.SoundSynth.Voices voices
@soundByMachine.SoundSynth.SquareWave square wave
@soundByMachine.SoundSynth.WhiteNoise white noise
+
Sample rate + + @if(soundByMachine.SoundSynth.Depth != 0 && soundByMachine.SoundSynth.Frequency > 0) + { + + + + } + else if(soundByMachine.SoundSynth.Depth != 0) + { + + + + } + else + { + + + + } +
@soundByMachine.SoundSynth.Depth bits at @(soundByMachine.SoundSynth.Frequency > 1000 ? $"{soundByMachine.SoundSynth.Frequency / 1000}KHz" : $"{soundByMachine.SoundSynth.Frequency}Hz")
@soundByMachine.SoundSynth.Depth bits
@(soundByMachine.SoundSynth.Frequency > 1000 ? $"{soundByMachine.SoundSynth.Frequency / 1000}KHz" : $"{soundByMachine.SoundSynth.Frequency}Hz")
+
Synthetizer type + @soundByMachine.SoundSynth.Type +
+
+
+