Liedertexte, chopro Umsetzung mit Purebasic ?

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Liedertexte, chopro Umsetzung mit Purebasic ?

Beitrag von Simon74 »

Chopro, Idee ?

Hallo Leute,
da ich manchmal Liedertexte mit Akkorden per MS-Word niederschreibe, und dies sehr mühsam ist Formatierungen, Einrückungen etc..
Es gibt eigentlich dazu eine gute Idee die auch auf Lyricseiten häufig zu sehen ist, Stichwort chopro Format.

Wie könnte eine Purebasic Lösung dazu aussehen ?
Ich erstelle ein Editorgadget um das Textfile einzulesen, klar.
Nun stellt sich mir die Frage mit welchen Mitteln das (formatierte) Ausgabegadget aussehen soll, ich tippe mal auf das Canvas,
dieses könnte bei jeder Änderung neu gezeichnet werden.
Hier wiederrum stellt sich mir die Frage wie dieses dann "1:1" auf Drucker, PDF zu bringen ist (A4) ?
Die Schwierigkeit dabei dürfte die Problematik sein das Canvas -> PDF nicht dasselbe Format verstehen bzw. hier "viel Arbeit" dahinter stehen wird.

Jemand eine Idee wie das am besten zu realisieren wäre ?
Benutzeravatar
dige
Beiträge: 1179
Registriert: 08.09.2004 08:53

Re: Liedertexte, chopro Umsetzung mit Purebasic ?

Beitrag von dige »

Es geht prinzipiell darum bestimte Marker [Akkord] aus dem Text zu fischen und diese bündig über dem nächsten Wort darzustellen, oder?

Ich würde das auch mit nem CanvasGadget visualisieren. Als Font müsste man einen nehmen, der eine konstante Laufweite
besitzt, bspw. Courier, um die korrekte Position berechnen zu können.

Hier mal ein quick'n dirty Ansatz:

Code: Alles auswählen

Global FontID = LoadFont(#PB_Any, "Courier New", 20, #PB_Font_HighQuality)

Procedure Update_Canvas()
  
  txt.s = ReplaceString(GetGadgetText(0), #CRLF$, "\")
  
  
  StartDrawing(CanvasOutput(1))
  
  Box (0, 0, OutputWidth(), OutputHeight(), #White)
  DrawingFont(FontID(FontID))
  DrawingMode(#PB_2DDrawing_Transparent)
  FrontColor(#Blue)
  
  h = TextHeight("A")
  w = TextWidth("A")
  
  x = 10
  y = 10 + h
  
  For a = 1 To Len(txt)
    
    If Mid(txt, a, 1) = "["
      ChordMode = #True
      
    ElseIf Mid(txt, a, 1) = "]"
      ChordMode = #False
      DrawText(x, y - h, Chord.s)
      Chord = ""
      
    ElseIf ChordMode = #True
      Chord.s + Mid(txt, a, 1)
      
    ElseIf Mid(txt, a, 1) = "\"  
      y + (2.5*h)
      x = 10
    Else  
      
      DrawText(x, y, Mid(txt, a, 1))
      x + w
      
      If w > OutputWidth()
        y + (2.5*h)
        x = 10
      EndIf
    EndIf
    
  Next  

  
  StopDrawing()
EndProcedure

OpenWindow(0, 0, 0, 800, 600, "" )

EditorGadget(0, 5, 5, 790, 80)
CanvasGadget(1, 5, 90, 790, 500, #PB_Canvas_Border)

SetGadgetText(0, "[Am]All ya need [E#]is" + #CRLF$ + "what you [D#]need")
BindGadgetEvent(0, @Update_Canvas(), #PB_EventType_Change)

Update_Canvas()

Repeat
  
  
Until WaitWindowEvent() = #PB_Event_CloseWindow
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: Liedertexte, chopro Umsetzung mit Purebasic ?

Beitrag von Simon74 »

dige hat geschrieben:Es geht prinzipiell darum bestimte Marker [Akkord] aus dem Text zu fischen und diese bündig über dem nächsten Wort darzustellen, oder?
Genau, und noch weiteres..
Ich muss mal die Möglichkeiten zw. Canvas und Scintilla vergleichen, welches sich besser dafür eignet, und vor allem das drucken dann daraus :)
Aber danke für dein Beispiel.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Liedertexte, chopro Umsetzung mit Purebasic ?

Beitrag von Derren »

Eine Schriftart mit konstanter Breite ist nicht notwendig, wenn man TextWidth() verwendet.


"[G]Hallo Welt [A]neuer Akkord jetzt: [F]und nochmal"

Erstmal muss du ja die Akkorde "rausfischen" und markieren, wo sie stehen. (StringField()...)
Dann hast du deinen Text "Hallo Welt ", "neuer Akkord jetzt: ", "und nochmal" (mit Leerzeichen und Satzzeichen etc.) und speicherst die Breite der Textfragmente mit TextWidth()

Dann malst du einfach dein "A" an der X-Position TextWidth("Hallo Welt ") und dein "F" an der Position TextWidth("Hallo Welt ") + TextWidth("neuer Akkord jetzt: ")


Zum Drucken hast du zwei Möglichkeiten. Du nutzt die PrinterLib von ABB Klaus (die man offenbar nicht mehr findet oO), die besser ist als die von PB.
Oder du speicherst das Canvas einfach als Bild und fügst es in ein Word-Dokument ein. Bei Word, oder auch LibreOffice etc... kann man die Grafik auch verknüpfen, so dass du nur einmal ein Dokument einrichten muss. Dann speicherst du deine Canvas-Bilder immer als "ChordPage01 (02 etc).png", und im Dokument sind sie dann automatisch drin und du musst nur noch drucken / PDF erstellen
Signatur und so
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: Liedertexte, chopro Umsetzung mit Purebasic ?

Beitrag von matbal »

Vor einiger Zeit hatte ich mich auch mit dem ChordPro-Format beschäftigt.

Ich legte mit ein Tablet zu und eine App, die auch ChordPro-Dateien anzeigen kann. Also brauchte ich einen Editor zum komfortabelen Schreiben von ChordPro-Dateien. Mein Editor unterstützt allerdings nur das, was ich brauche. Das ist hauptsächlich die formatierte Anzeige von Text mit Akkordsymbolen. Als Klavierspieler brauche ich keine Tabulatoren, die fehlen deshalb.
Drucken ist nur rudimentär enthalten; ich wollte wissen, ob ich das hinbekomme. Aber Seitenumbrüche fehlen noch.

Für die Anzeige des formatierten Textes mit Akkordsymbolen verwende ich ein Canvas.


Hier ist der Link zu meinem Projekt
Antworten