Ton als Morsezeichen ausgeben mit Tastendruck.

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von funkheld »

Hallo, nach länge eines Tastendruckes möchte ich ein Ton ausgeben (Morsezeichen-Ton).

Irgendwie finde ich keinen Anfang, wie ich mich mit den Soundbefehlen einen Ton ausgebe, der so lang ist, wie ich die Taste festhalte.

Wer kann helfen?
Danke.

gruss
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von STARGÅTE »

Den Ton selbst musst du selbst erstellen (zB mit Audacity, Sin-Schwingung)

Dann kannst du diese Sound-Datei in PB einladen und mit PlaySound() wiedergeben, wenn die Taste gedrückt wird.
Wird die Taste losgelassen brichst du den Sound mit StopSound() ab.

PlaySound dabei als Schleife abspielen lassen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von funkheld »

Hmmm., wie wird denn eine Taste immer abgefragt ob sie gedrückt ist oder losgelassen wird?
Wenn ich sie einmal drücke, wird ja der Ton abgespielt, ich habe den Finger aber immer noch auf diese Taste, wird der Ton immer wieder neu abgespielt ?
Es gibt ja lange Töne und kurze.

gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von RSBasic »

Wo möchtest du abfragen, ob z.B. die linke Maustaste gedrückt wurde?

In einem Screen?

Code: Alles auswählen

EnableExplicit

InitSprite()
InitMouse()
InitKeyboard()

If OpenScreen(1024,768,32,"Screen")
  
  SetFrameRate(60)
  
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
    
    
    
    ExamineKeyboard()
    ExamineMouse()
    
    If MouseButton(#PB_MouseButton_Left)=1
      If StartDrawing(ScreenOutput())
        DrawText(350,350,"Linke Maustaste wird gerade gedrückt.",RGB(200,200,255),0)
        
        StopDrawing()
      EndIf
      
    EndIf
    
    If KeyboardReleased(#PB_Key_Escape)
      End
    EndIf
    
  ForEver
EndIf
Oder in einem Fenster?

Code: Alles auswählen

EnableExplicit

Procedure WindowCallback(Windowid,Message,wParam,lParam)
  Protected Result
  
  Result = #PB_ProcessPureBasicEvents
  
  Select Message
    Case #WM_LBUTTONDOWN
      Debug "Linke Maustaste wird gerade gedrückt."
    Case #WM_LBUTTONUP
      Debug "Linke Maustaste wurde losgelassen."
  EndSelect
  
  ProcedureReturn Result
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  SetWindowCallback(@WindowCallback())
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von funkheld »

Jup, danke.
Kann ich auch noch gut verwenden.

Ich wollte die A-Taste nehmen zum Morsen.

Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ton als Morsezeichen ausgeben mit Tastendruck.

Beitrag von RSBasic »

In einem Screen:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitMouse()
InitKeyboard()

If OpenScreen(1024,768,32,"Screen")
 
  SetFrameRate(60)
 
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
    
    
    
    ExamineKeyboard()
    ExamineMouse()
    
    If KeyboardPushed(#PB_Key_A)
      If StartDrawing(ScreenOutput())
        DrawText(350,350,"A-Taste wird gerade gedrückt.",RGB(200,200,255),0)
       
        StopDrawing()
      EndIf
      
    EndIf
   
    If KeyboardReleased(#PB_Key_Escape)
      End
    EndIf
   
  ForEver
EndIf
Allgemein z.B. in einem Fenster:

Code: Alles auswählen

If GetAsyncKeyState_(#VK_A)
  Debug "A-Taste wird gerade gedrückt."
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten