[JAVA] Gitarrenbundrechner

Überblick

Es wurde auf GitHub in einem Projekt namens fret-calulator veröffentlicht, aber da das Programm keine Kommentare enthält, habe ich diesen Satz mit der Absicht geschrieben, ihn zu erklären. Ich tat. Früher wurde der Quellcode als Anwendung für iOS verteilt, aber da viele Leute keine Build-Umgebung hatten, habe ich ihn zu einer Webanwendung gemacht.

Wenn Sie auf die Anwendung zugreifen, wird dieser Bildschirm angezeigt. Es gibt 4 Registerkarten, aber "verschiedene Fretting" ist noch nicht implementiert. Ich habe vor, hier eine Bundberechnungsfunktion für nicht standardmäßige Skalen zu implementieren, überspringe jedoch die Implementierung, da ich sie noch nicht verwendet habe.

Verwenden Sie Ihr Smartphone oder Tablet, um auf die Anwendung zuzugreifen und beim Schneiden der Bundnut auf dem Griffbrett zu berechnen.

Es sieht so aus, als wäre die Bundnut geschnitten worden.

Umgebung für die Entwicklung verwendet

Serverseite

Spring Boot und Java 1.8

Client-Seite

AngularJS 1.6.2、Angular Translate 2.13.1、Angular Translate Loader Static Files 2.13.1、HTML、CSS、JavaScript

IDE Eclipse mit installiertem Sprint Tool Suite-Plug-In und Java 1.8

Wenn Sie eine Anwendung auf heroku bereitgestellt haben und diese in Aktion sehen möchten, können Sie sie unter https://guitar-calc.herokuapp.com/ anzeigen.

Berechnungskomponente

GuitarCalculator.java ist der Hauptteil des Programms. Hergestellt als Servicekomponente.

package net.artesware.service;

import java.util.Map;

import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Component
public class GuitarCalculator {

  // [1]
  public List<Map<String, Object>> calcFretPositions(
    float scale,
    int numFrets)
  {
    float f = scale;
    float lastPos = 0.0f;
    List <Map<String, Object>>result = new ArrayList<Map<String, Object>>();
    Map<String, Object> pos;
    for(int i = 0; i < numFrets + 1; i++) {
      float fretPos = f / 17.817f;
      f -= fretPos;
      pos = new HashMap<String, Object>();
      pos.put("fret", i+1);
      pos.put("positionFromNut", lastPos + fretPos);
      pos.put("positionFromFret", fretPos);
      result.add(pos);
      lastPos += fretPos;
    }
    return result;
  }

  // [2]
  public Map<String, Object> calcBridgePosition(
    float scale,
    float jointPos,
    float neckAngle,
    float stringHeight,
    float fretHeight,
    float thickness)
  {
    float base = (float) ((scale - jointPos) * Math.cos((double)neckAngle * Math.PI / 180.0f));
    float height = (float) ((scale - jointPos) * Math.sin((double)neckAngle * Math.PI / 180.0f));
    float strHeight = (stringHeight - 0.1f) * 2.0f + fretHeight;
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("saddlePosition", base);
    result.put("saddleHeight", (height + strHeight + thickness));
    return result;
  }

  // [3]
  public Map<String, Object> calcFingerboardSize(
    float scale,
    int numStrings,
    int numFrets,
    float nutPitch,
    float saddlePitch,
    float nutSpacing)
  {
    float fretboardLength = (float) (scale - scale / Math.pow(2.0f, ((numFrets+1.0f)/12.0f)));
    float nutWidth = nutPitch * (numStrings - 1) + nutSpacing * 2;
    float bw = saddlePitch * (numStrings - 1) + nutSpacing * 2;
    float endWidth = nutWidth + (bw-nutWidth) * (fretboardLength/scale);
    Map<String, Object> result = new HashMap<String, Object>();
    result.put("length", fretboardLength);
    result.put("nutWidth", nutWidth);
    result.put("endWidth", endWidth);
    return result;
  }


}

Berechnung der Bundposition

[1] ist eine Methode, um die Bundposition der Standardrhythmus-Skala zu ermitteln. Beim Aufruf mit der Akkordlänge und der Anzahl der Bünde als Argumente wird die Position jedes Bundes berechnet. Das Ergebnis ist eine Liste der Abstände von der Mutter (0 Bund) und des Abstands vom vorherigen Bund. Im Fall von Gibson Les Paul beträgt die Saitenlänge beispielsweise 628 mm und 22 Bünde. Nennen Sie sie also scale = 628, numFrets = 22.

Berechnung der Brückenposition und -höhe

[2] ist eine Methode zur Berechnung der Brückenposition und -höhe. Bei Angabe der Saitenlänge, der Position des Halskörpergelenks, des Halsvorbereitungswinkels, der Saitenhöhe am 12. Bund, der Bundhöhe und der Dicke der Fingerplatte als Argumente werden die Position und Höhe der Brücke vom Hals- und Körpergelenkpunkt berechnet. ..

Berechnung der Fingerplattenabmessungen

[3] ist eine Methode zur Berechnung der Abmessungen der Fingerplatte. Die Abmessungen des Griffbretts können berechnet werden, indem die Saitenlänge, die Anzahl der Saiten, die Anzahl der Bünde, der Saitenabstand an der Mutterposition, der Saitenabstand an der Sattelposition und der Abstand von der Seite des Griffbretts zu den höchsten und niedrigsten Noten als Argumente verwendet werden. Berechnung.

REST-Controller

GuitarCalcController.java ist eine REST-Controller-Klasse. Es ist so einfach wie das Aufrufen einer Methode in der GuitarCalculator-Komponente, wenn sie eine HTTP-Anforderung empfängt und das Ergebnis zurückgibt.

package net.artesware.controller;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import net.artesware.service.GuitarCalculator;

@RestController
public class GuitarCalcController {

  @Autowired
  private GuitarCalculator calculator;

  // [1]
  @GetMapping("/calcFretPositions")
  @ResponseBody
  public List<Map<String, Object>> calcFretPositions(
    @RequestParam float scale,
    int numFrets) {
    return calculator.calcFretPositions(scale, numFrets);
  }

  // [2]
  @GetMapping("/calcBridgePosition")
  @ResponseBody
  public Map<String, Object> calcBridgePosition(
    @RequestParam float scale,
    float jointPos,
    float neckAngle,
    float stringHeight,
    float fretHeight,
    float thickness) {
    return calculator.calcBridgePosition(scale, jointPos, neckAngle, stringHeight, fretHeight, thickness);
  }

  // [3]
  @GetMapping("/calcFingerboardSize")
  @ResponseBody
  public Map<String, Object> calcFingerboardSize(
    @RequestParam float scale,
    int numStrings,
    int numFrets,
    float nutPitch,
    float saddlePitch,
    float nutSpacing) {
    return calculator.calcFingerboardSize(scale, numStrings, numFrets, nutPitch, saddlePitch, nutSpacing);
  }
}

abschließend

Als ich das gemacht habe, wollte ich nur Spring Boot verwenden. Es wäre möglicherweise einfacher und besser gewesen, diese Art von Programm nur auf der Clientseite mit AngularJS ohne Spring zu implementieren. Es steht Ihnen frei, den Quellcode zu ändern oder bereitzustellen. Keine Gutschrift erforderlich.

Recommended Posts

Gitarrenbundrechner
Rechnerprogramm