Piano-Projekt, Alpha-Version fertig ^^

Übersicht Sonstiges Projekte

Neue Antwort erstellen

 

tmode00

Betreff: Piano-Projekt, Alpha-Version fertig ^^

BeitragMi, Feb 14, 2007 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

nach 2 Tagen harter Arbeit ist nun endlich die Alpha-Version meines Piano-Programs fertig.

Die Idee Idea
Die Idee entstand, als ich gemerkt habe das man eine Original strumentaufnahme (z.B. von nem Piano) Pitchen kann und zwar über die ganze Tonleiter hinweg! So kann man eine Art Midi-Program schreiben was jedoch nicht den Midi-Sythesizer verwendet, sondern eine eigene Wave-Datei! Die Instrumentqualität ist dadurch bei weitem höher als bei einer Midi!

Die Alpha-Version hat folgende features:
-Steuerung der halben und ganzen Töne auf ca. 1.5 Oktaven mit ca.25 Tasten
-Anzeige der momentan gespielten Note (rot unterlegt, bzw. schwarz)
-Menüführung mit Maus, sowie Informationsausgabefenster
-Balkenanzeige der Gespielten Menge (Record-Balken)
-Tempo regelbar (0-999)
-reset möglich (von vorn beginnen)
-2 Abspielfunktionen durch drücken von c (einzelner Ton) oder Play-Button
-speichern/laden im unverschlüsselten tmid Format (tmode MIDI ^^)
-2 Oktaven Einstellbar
-Metronom auf Wunsch einspielbar
-Hilfebildschirm (Erklärung der Tastenbelegungen.....and more)

Screenshots:
user posted image
user posted image

nach vielen vielen Problemen, sowie mehrfacher überarbeitung des Skripts läuft das Programm recht Stabiel, leider habe ich es aber nicht geschafft mehrere Töne gleichzeitig aufzunehmen (da Ton für Ton in ein Array aufgenommen wird). Diese Tatsache macht Pausen/unterschiedl. Tonlängen unmöglich (nur durch manuelles drücken von c-Taste)!

Natürlich gilt es noch viel zu verbessern:
Wenn das Program fertig ist, soll es einfach möglich sein auf der Tastatur zu spielen und nicht gebrauchte Töne direkt bei der Eingabe wieder zu löschen und so auf einfachstem Wege, ohne Noten und Pausen usw. kennen zu müssen Musik machen zu können. Wert ist dabei besonders auf das DIREKT gelegt! Es soll also keinen Zeitstrahl geben und blöcke die man bearbeiten kann sondern alles soll direkt eingegeben, werden (Töne, Pausen, Tempo, Oktaven, Instrumente, Spuren...). Das klingt komisch, kann aber wenn es gut gemacht ist sehr Sinnvoll sein da man die Idee für z.B. die Melodie in dem Moment des Einfalls umsetzt.

Der Downlod der Alpha-Version:
HIER KLICKEN

Und nun noch der Quellcode (wen es Interessiert):
Code: [AUSKLAPPEN]
;Init and decleration--->
Graphics 1024,768,32,1
SetBuffer BackBuffer()

;Global variables,arrays and const:
Global snd,snd1,snd2,snd3,x,y,picture
Const samplerate = 44000
y = 578;y position for keyboard keys
tempo = 500
tempoview = 500
Dim daten(10000)

;Fonts:
thefont = LoadFont("Comic Sans MS",25,1,0,0)
info_font = LoadFont("Arial",20,0,0,0)
SetFont thefont

;Sounds
metronom_snd = LoadSound("metronom.wav")
snd2=LoadSound("c_normal.wav")
snd3=LoadSound("c_hell.wav")
snd = snd2;n
klick_snd=LoadSound("klick.wav")

;Images:
oktave_plus_on=LoadImage("oktave+_on.jpg")
oktave_plus_off=LoadImage("oktave+_off.jpg")
oktave_minus_on=LoadImage("oktave-_on.jpg")
oktave_minus_off=LoadImage("oktave-_off.jpg")
piano_back = LoadImage("piano_back.png")
Leftt = LoadImage("left.jpg")
black = LoadImage("black.png")
middle = LoadImage("middle.jpg")
Rightt = LoadImage("right.jpg")
but_tempo_off = LoadImage("but_tempo_off.jpg")
but_tempo_on = LoadImage("but_tempo_on.jpg")
but_tempo_minus_off = LoadImage("but_tempo-_off.jpg")
but_tempo_minus_on = LoadImage("but_tempo-_on.jpg")
reset_off =  LoadImage("reset_off.jpg")
reset_on =  LoadImage("reset_on.jpg")
play_off =  LoadImage("play_off.jpg")
play_on =  LoadImage("play_on.jpg")
open_off =  LoadImage("open_off.jpg")
open_on =  LoadImage("open_on.jpg")
save_off =  LoadImage("save_off.jpg")
save_on =  LoadImage("save_on.jpg")
metronom_off = LoadImage("metronom_off.jpg")
metronom_on = LoadImage("metronom_on.jpg")
help_off = LoadImage("help_off.jpg")
help_on = LoadImage("help_on.jpg")
mouse_map = LoadImage("mouse.png")
helpscreen = LoadImage("helpscreen.png")



Function play_note(note)
   Select note
      Case 14 : pitch = samplerate       : x = 2   : picture = 1;c
      Case 1    : pitch = samplerate+3000  : x = 58  : picture = 2;cis
      Case 15 : pitch = samplerate+5000  : x = 80  : picture = 3;d
      Case 2  : pitch = samplerate+8000  : x = 134 : picture = 2;dis
      Case 16 : pitch = samplerate+11000 : x = 157 : picture = 4;e
      Case 17 : pitch = samplerate+15000 : x = 233 : picture = 1;f
      Case 4  : pitch = samplerate+18000 : x = 288 : picture = 2;fis
      Case 18 : pitch = samplerate+22000 : x = 309 : picture = 3;g
      Case 5  : pitch = samplerate+26000 : x = 365 : picture = 2;gis
      Case 19 : pitch = samplerate+30000 : x = 388 : picture = 3;a
      Case 6  : pitch = samplerate+35000 : x = 444 : picture = 2;ais         
      Case 20 : pitch = samplerate+39000 : x = 464 : picture = 4;h/b
      Case 21 : pitch = samplerate+44000 : x = 541 : picture = 1;c
      Case 8  : pitch = samplerate+49000 : x = 597 : picture = 2;cis
      Case 22 : pitch = samplerate+55000 : x = 617 : picture = 3;d
      Case 9  : pitch = samplerate+60000 : x = 673 : picture = 2;dis
      Case 23 : pitch = samplerate+67000 : x = 693 : picture = 4;e
      Case 24 : pitch = samplerate+74000 : x = 765 : picture = 1;f
      Case 11 : pitch = samplerate+79500 : x = 819 : picture = 2;fis
      Case 25 : pitch = samplerate+88000 : x = 839 : picture = 3;g
      Case 12 : pitch = samplerate+95000 : x = 892 : picture = 2;gis
      Case 26 : pitch = samplerate+104000: x = 912 : picture = 3;a
      Case 42 : pitch = samplerate+113000: x = 959 : picture = 2;a'is
      Case 27 : pitch = samplerate+123000: x = 979 : picture = 4;h/b
   End Select

   SoundPitch snd,pitch
   chn=PlaySound(snd)   
End Function

;Mainprogram---------------------------------->
While Not KeyHit(1)
   DrawImage piano_back,0,0;draw background
   
   ;record-leiste:
   If record < 885 Then
      Rect 121,49,record,45,1
   Else
      record= 0
   EndIf

   ;wenn taste (tab - enter ganztöne,1-# halbtöne)
   For in = 1 To 44 Step 1
      If KeyHit(in)
         play_note(counter)
         zeile_x = zeile_x + 1
         daten(zeile_x) = counter
         record = record + 1
      EndIf
      counter = counter + 1
   Next
   counter = 0
   
   ;play with c:
   If KeyHit(46) Then
         dataset = dataset + 1
       play_note(daten(dataset))
    EndIf

    If dataset > zeile_x-1 Then dataset = 0;restart playing

   ;Tasten anzeigen:
   For laufe = 2 To 50 Step 1
      If KeyDown(laufe) Or play = 1
         If picture = 1 Then   DrawImage leftt,x,y
         If picture = 2 Then DrawImage black,x,y
         If picture = 3 Then DrawImage middle,x,y
         If picture = 4 Then   DrawImage rightt,x,y
      EndIf
   Next
   
   
   ;buttons--->
   ;tempo+:
   If RectsOverlap(MouseX(),MouseY(),1,1,0,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      If tempoview < 999 Then
          tempo  = tempo - 1   
          tempoview = tempoview + 1
      EndIf
      DrawImage but_tempo_on,0,0
   Else
      DrawImage but_tempo_off,0,0
   EndIf
   
   ;tempo-:
   If RectsOverlap(MouseX(),MouseY(),1,1,130,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      If tempoview > 0 Then
         tempo  = tempo + 1
         tempoview = tempoview - 1   
      EndIf         
      DrawImage but_tempo_minus_on,130,0
   Else
      DrawImage but_tempo_minus_off,130,0
   EndIf

   ;reset:
   If RectsOverlap(MouseX(),MouseY(),1,1,224,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then
         PlaySound(klick_snd)
         zeile_x = 0
         record = 0
      EndIf
   
      DrawImage reset_on,224,0
   Else
      DrawImage reset_off,224,0
   EndIf    
   
   ;play:
   If RectsOverlap(MouseX(),MouseY(),1,1,317,0,91,33) And MouseDown(1) Then
      SetFont info_font
      dataset = 0
      Color 10,10,140
      PlaySound(klick_snd)
      Delay 200
      For dataset = 1 To zeile_x
         Locate 123,114
         stringo$ = stringo$ + "."
         Print "Playing." + stringo$
         play_note(daten(dataset))
         Delay tempo
         playy = 1
         DrawImage play_on,317,0
      Next
      Locate 123,300
      SetFont thefont
      Color 160,20,20
      Print "PRESS ANY KEY!"
      FlushKeys
      WaitKey   
      stringo$ = "."
   Else
      playy = 0
      DrawImage play_off,317,0
   EndIf    

   
   ;save:
   If RectsOverlap(MouseX(),MouseY(),1,1,410,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      SetFont info_font
      dataset = 0
      Locate 123,114
      Color 10,10,140
      FlushKeys
      filename$ = Input$("Bitte Dateiname angeben:")
      Locate 123,130
      If filename$ = "" Then
         filename$ = "default"
         Print "Saving as " + filename$ + ".tmid"
      Else
         Print "Saving as " + filename$ + ".tmid"
      EndIf
      Delay 1000
      file_stream=WriteFile (filename$ + ".tmid")
      For sav = 0 To zeile_x-1 Step 1
         dataset = dataset + 1
            datas$ =  Str$(daten(dataset))
            WriteLine(file_stream,datas$)
            stringo$ = stringo$ + "."
         Locate 123,146
         Print "Saving" + stringo$
         Delay 5
      Next
      stringo$ = "."   
      datas$ = ""
      Delay 500            
      CloseFile file_stream
      Locate 123,162
      Print "File, " + filename$ + ".tmid saved!"
      Locate 123,300
      SetFont thefont
      Color 160,20,20
      Print "PRESS ANY KEY!"
      FlushKeys
      WaitKey
      
      DrawImage save_on,410,0
   Else
      DrawImage save_off,410,0
   EndIf     
   
   
   ;open:
   If RectsOverlap(MouseX(),MouseY(),1,1,503,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      SetFont info_font
      dataset = 0
      zeile_x = 0
      record = 0
      Locate 123,114
      Color 10,10,140
      FlushKeys
      filename$ = Input$("Bitte Dateiname zum öffnen angeben:")
      Locate 123,130
      If filename$ = "" Then
         filename$ = "default"
         Print "opening " + filename$ + ".tmid"
      Else
         Print "opening " + filename$ + ".tmid"
      EndIf
      Delay 1000
      
      file_stream=ReadFile (filename$ + ".tmid")
      While Not Eof(file_stream)
         dataset = dataset + 1
         record = record + 1
         zeile_x = zeile_x + 1
         daten(dataset) = ReadLine(file_stream) 
         
         stringo$ = stringo$ + "."
         Locate 123,146
         Print "Reading" + stringo$
         Delay 5
      Wend
      
      stringo$ = "."   
      datas$ = ""
      Delay 500            
      CloseFile file_stream
      Locate 123,162
      Print "File, " + filename$ + ".tmid Okay!"
      Locate 123,300
      SetFont thefont
      Color 160,20,20
      Print "PRESS ANY KEY!"
      FlushKeys
      WaitKey
      
      DrawImage open_on,503,0
   Else
      DrawImage open_off,503,0
   EndIf     
   
   ;Oktave+:
   If RectsOverlap(MouseX(),MouseY(),1,1,596,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      snd = snd3
      DrawImage Oktave_plus_on,596,0
   Else
      DrawImage Oktave_plus_off,596,0
   EndIf
   
   ;Oktave-:
   If RectsOverlap(MouseX(),MouseY(),1,1,689,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      snd = snd2
      DrawImage Oktave_minus_on,689,0
   Else
      DrawImage Oktave_minus_off,689,0
   EndIf

   ;Metronom:
   If RectsOverlap(MouseX(),MouseY(),1,1,782,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   PlaySound(klick_snd)
      If toogle_metro = 0 Then
         LoopSound(metronom_snd)
      channel_metronom = PlaySound(metronom_snd)

         toogle_metro = 1
         Delay 500
      ElseIf toogle_metro = 1 Then
         StopChannel(channel_metronom)
         toogle_metro = 0
         Delay 500
      EndIf
      
      DrawImage metronom_on,782,0
   Else
      DrawImage metronom_off,782,0
   EndIf    
   
   ;Help:
   If RectsOverlap(MouseX(),MouseY(),1,1,875,0,91,33) And MouseDown(1) Then
      If MouseHit(1) Then   
         PlaySound(klick_snd)
         If toogle_help = 0 Then
            toogle_help = 1
         ElseIf toogle_help = 1 Then
            toogle_help = 0
         EndIf
      EndIf
      
      DrawImage help_on,875,0
   Else
      DrawImage help_off,875,0
   EndIf    
   
   ;Help-sub (wegen dynamischer Anzeige)--->
   If toogle_help <> 0 Then
   MaskImage helpscreen,255,0,0
      DrawImage helpscreen,0,0
   Else
   
   EndIf
      
         
   Color 255,100,0;Orange
   Text 96,5, Str$(tempoview);Tempoanzeige
   DrawImage(mouse_map,MouseX(),MouseY());Maus!
   Flip
Wend


Anhang-->
Ich schreibe das hier voller begeisterung und Größenwahn, man beachte jedoch zu Gunsten meinerseits, das es 1:29 Nachts ist und ich die 4. Dose RedBull getrunken habe Exclamation



Danke an alle die es sich mal anschauen und dazu was sagen!
While (1) : Wend

FireballFlame

BeitragMi, Feb 14, 2007 3:29
Antworten mit Zitat
Benutzer-Profile anzeigen
tmode00 hat Folgendes geschrieben:
Die Idee entstand, als ich gemerkt habe das man eine Original strumentaufnahme (z.B. von nem Piano) Pitchen kann und zwar über die ganze Tonleiter hinweg! So kann man eine Art Midi-Program schreiben was jedoch nicht den Midi-Sythesizer verwendet, sondern eine eigene Wave-Datei! Die Instrumentqualität ist dadurch bei weitem höher als bei einer Midi!

Tjaa... das Prinzip kenn ich sehr gut ^^ Wenn du die Töne jetzt noch so
user posted image
notierst und editierbar machst, dann hast du ein einfaches Trackerprogramm geschrieben Smile

Allerdings ist gerade ein Piano-Sound nicht optimal mit einem einzigen gepitchten Sample umzusetzen...

Ansonsten ... grafisch isses gut geworden. Aber du solltest mal noch eine Beenden-Funktion einbauen ^^
 

tmode00

Betreff: Der Exit-Button!

BeitragMi, Feb 14, 2007 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Exit-Button ist nun eingefügt und einsatzbereit Very Happy Exclamation
While (1) : Wend

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 14, 2007 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi tmode00, es macht Spaß damit rum zu spielen. Ich würde aber empfehlen die Note C auf die Taste Q zu legen, dieses ist mir aus unzähligen Trackern so geläufig. Weiß nicht ob es andere Programme gibt, wo es, wie bei dir, so verschoben ist. Auch eine Oktave tiefer in der unteren Tastaturreihe währe von Vorteil. Also eine Oktave tiefer mit Note C beginend bei Y (Hierbei Amerikanischen Tastaturlayout berücksichtigen und dem User selbst einstellen lassen). Auch würde ich es begrüssen, grad so ein Programm, auch im Fenstermodus ausführen zu können. Ansonsten bin ich mal gespannt, was draus wird. Weiter so!..
 

tmode00

Betreff: Taktgeber!

BeitragDo, Feb 15, 2007 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe jetzt einen Taktgeber eingebaut der nach anklicken des Metronoms anspringt! Des weitern habe ich einige Bugs behoben und neben einem Exit-Button gibt es nun die möglichkeit den zuletzt gespielten Ton mit ENTF zu löschen! Dann gibts noch ne kleine Start-Avi im Microsoft Video 1 Format die beim Start des Programms abgespielt wird!

Jetzt gilt es, das Program um zu Strukturieren! Es muss ersichtlich sein ob eine Ganze, Halbe, Viertel, Achtel, oder 16tel Note/Pause gespielt wird! Pausen, sowie Noten und die Tempo/Oktaven-Informationen müssen mit in das Array!

Bild->
user posted image

Der Aktuelle-Download (Piano_Alpha_1.0_tmode.rar überschrieben):
HIER KLICKEN
 

Mr Hopp

BeitragDo, Feb 15, 2007 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Sowas wolte ich auchmal machen Very Happy Scheiterte allerdings daran dass ich mich noch nicht mit Types auskannte Rolling Eyes

Grafisch ist es sehr anspruchsvoll! Die Töne scheinen ja auch zu stimmen...

Ein paar Mängel: das größte Problem liegt eindeutig in der Steuerung. z.B. gibt es Tasten (z.B. Taste 3), die immer den gleichen Ton erzeugen, wie die Taste davor (d.h. Taste 3 erzeugt immer einen anderen Ton)). Auch der Esc Knopf kann viel bewirken^^ Ich hab ihn 5-mal verwendet. 4-mal kam ein Ton, beim 5. Mal wurde das Programm beendet.

Des weiteren kann man noch nicht mehrere Töne gleichzeitig spielen. Aber ich denke das ist dir auch schon aufgefallen Wink

Aber allein für die Grundidee und den Ergeiz für etwas so komplexes und vor allem für den Erfolg den du schon hast gehört dir ein großes Lob Wink
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.
 

tmode00

Betreff: ??

BeitragDo, Feb 15, 2007 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Auch der Esc Knopf kann viel bewirken^^ Ich hab ihn 5-mal verwendet. 4-mal kam ein Ton, beim 5. Mal wurde das Programm beendet.

Des weiteren kann man noch nicht mehrere Töne gleichzeitig spielen. Aber ich denke das ist dir auch schon aufgefallen


Ich stelle mir immer wieder die Frage, warum auf meinem Rechner die BB-Anwendungen anderes zu laufen scheinen als auf anderen Rechnern. Bei mir gehen mehrere Töne gleichzeitig, die Escape Taste funktioniert beim ersten mal und ich bekomme auch kein Memory-Access Violation oder sonstiges (wurde in anderen Posts mit Programmen von mir behauptet) !

Ich weis das das problem mit den doppelten Halbtönen (Zahlenreihe) besteht und ich werde versuchen das zu lösen!

Nicht das ich anzweifele das es diese Fehler gibt, aber warum funktioniert es bei mir? Warum kommen Fehler bei anderen rechnern die hier nicht kommen?

Ich habe einen AMD64 Prozessor, sowie eine Radeon Grafikkarte mit 128Mb und 512Mb Ram!

Ps.: auch ich habe nur wenig mit Types gearbeitet, speziell in diesem Programm gar nicht! Ich würde nicht sagen das man OOP beherschen muss um so was hin zu bekommen!
While (1) : Wend

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Feb 15, 2007 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schlage immer noch vor die Noten um eine Taste nach rechts zu verschieben. Also so, dass die Note C auf der Taste Q liegt. Das ist bei allen Programmen die ich kenne so. Falls du mir nicht glaubst, so schaue mal auf folgender Seite vorbei http://home.arcor.de/screamworks oben dann auf Tracker klicken und dann nach unten bis Windows scrollen. Alle diese Programme haben die Note C beginnend auf der Taste Q.
 

tmode00

Betreff: Glauben!

BeitragDo, Feb 15, 2007 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich Glaube dir mit dem TAB/Q! Ich werde erstmal versuchen alles was hier genannt wurde, so wie das was ich selbst wünsche zu verbessern. Wenn es dann soweit ist, Poste ich es hier!

Ps.: ich werde C auf Q legen!
While (1) : Wend

BananaSalat

BeitragFr, Feb 16, 2007 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
wow ich finds sau geil, ganz wichtig sind halt nun die notenlängen, wenn das drinn is isses schon mal richtig geil zum liederschreiben benutzbar ; )

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 16, 2007 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Notenlängen mit Pianosounds sind nicht grad einfach zu realisieren.

FireballFlame

BeitragFr, Feb 16, 2007 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, und das andere Problem ist halt, dass z.B. ein mit doppelter Geschwindigkeit gespieltes C4 nunmal nicht wie ein "richtiges" C5 klingt. Mit irgendeinem Synth-Klang wäre das einfacher als mit einem Piano Wink

EDIT: @folgenden Beitrag: Da hat wohl einer zu viele Killerspiele gespielt? xD
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am So, Feb 18, 2007 22:29, insgesamt einmal bearbeitet

StepTiger

BeitragFr, Feb 16, 2007 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit der C4 Taste sollte man aber ziemlich vorsichtig sein Laughing

Sieht schön aus Smile
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

tmode00

Betreff: Danke!

BeitragSa, Feb 17, 2007 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte mich ganz herzlich für all diesen Lob, aber auch für die kompetente Kritik bedanken!

Leider hab ich jetzt echt arge Probleme eine Lösung für die Tonlänge bzw. auch für das Aufnehmen mehrerer Töne gleichzeitig zu finden. Ich brauche einen Ansatz, eine Denkhilfe wie ich das realisieren kann in BB. ich hab mir schon überlegt Buttons einzubauen für die Notenlänge:

user posted image

Aber das wollte ich eigentlich nicht. Ich wollte das Programm eben nicht wie so ein music-tracker oder 'ne Software, wo man die Noten einträgt und dann alles abgespielt wird gestalten sondern man soll eben einfach spielen können ohne Vorkenntnisse und ich meine, das es ziemlich schwer ist mit Trackerprogrammen umzugehen! Ich selbst habe mich an den verschiedensten ausprobiert und wirklich gar nichts hinbekommen auch wenn es da sicherlich Leute geben wird die mich da vom Gegenteil überzeugen [wollen], wie gesagt, das war mein persönlicher Eindruck!

Ich muss mal schauen wie ich weiter mache, momentan bin ich etwas blockiert...^^
While (1) : Wend

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 17, 2007 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du eine art KeyUp zu programmieren? Das ginge mit einer weiteren Variable, die im KeyDown -Bereich ausgewertet wird.

Wenn du aber das akustische darstellen der Notenlängen meinst, so wird es um ein vielfaches schwieriger. Meine Idee dazu wäre folgende:

Man nimmt ein sauberen und möglichst lang gespielten Pianosound und teilt diesen in zB fünf Teile. Erster Teil ist nur der Anschlag und die weiteren vier Teile jeweils als Loop der einzelnen 'Sektoren' des Grundsamples. Eine Funktion berechnet dann das ein- und aussliden der einzelnen Sektoren. Ganz wichtig hier ist aber eine äusserst saubere Trennung einzelner Teilbereiche! Die müssen möglichst kurz sein, aber nicht zu 'statisch' klingen. Also ein 'Volumen' muss erhalten sein (alle Grundschwingungen müssen möglichst komplett sein und nicht abgeschnitten werden). Zudem muss die Länge jedes einzelnen Teilbereiches immer mit den Schwingungsanzahlen der anderen Teilbereiche übereinstimmen. zB Wenn Teilbereich 1, vier Schwingungen des Sounds beinhaltet und eine Samplelänge von 2000 Positionen hat, so mussen die Teilbereiche 2, 3 und 4 so angepasst werden, dass eine Überlagerung nicht zu einer Subtraktion der Amplitude führt. Also eine Länge von 500, 1000, 1500, 2000, 2500 usw. an Positionen haben. Die 500 ergibt sich aus dem ersten Teilbereich 2000 Positionen mit 4 Schwingungen.

Ach ist echt schwer zu erklären. Ich hoffe das es Verständlich ist.

Werden dann bei neuem Tastendruck ALLE GLEICHZEITIG abgespielt werden, sind sie auch automatisch syncronisiert. Das einstellen der Anfangslautsärke muss so gelegt werden, dass Teilbereich 2, 3 und 4 erstmal auf 0 steht. Diese werden dann von der Slidingfunktion erst berechnet und 'geslidet'.

Code: [AUSKLAPPEN]
Grafische Darstellung beim Neuanschlag:

|Start Anschlag
|Start Teilbereich 1 mit Loop
|Start Teilbereich 2 mit Loop, Volume = 0
|Start Teilbereich 3 mit Loop, Volume = 0
|Start Teilbereich 4 mit Loop, Volume = 0

_____________________________________________________

Grafische Darstellung Lautstärkesliding:

|                                    Anschlag kling nnormal aus
####++++----                         Teilbereich 1; fade-out
----++++####++++----                 Teilbereich 2; fade-in, fade-out
        ----++++####++++----         Teilbereich 3; fade-in, fade-out
                ----++++####++++---- Teilbereich 4; fade-in, fade-out

_____________________________________________________

Lautstärke gering = -
Lautstärke mittel = +
Lautstärke voll   = #


Je nachdem, wie lange eine Taste gedrückt wird, wird entsprechend das Sliding jeweils per Variable berechnet. Types bieten sich hierfür gerade an. Damit man auch schnelle Abfolgen von drücken der gleichen Taste alle abgespielt werden.

Egal welche Note gespielt wird, haben alle Noten die gleiche Spieldauer bzw. können des einen echten Pianos nachgestellt werden. Auch das loslassen der Taste mit schnellerem slide-out.

Hier kannst du mal so eine Soundsyncronisierung mal antesten http://www.hectic.de/data/soundtest.rar

Tastaturbelegung
Cursor links/rechts - Samples sliden
Cursor hoch/runter - Samplesfrequenz
Tasten 1,2,3,4,6,8 - Standardfrequenzen ('4'=44100Hz)
linke Shift - Samples umkehren
Maus links/rechts - Samples scratching
Maustaste 1 = besseres Samples scrating

Trotz vielfachen Rumspielen mit Pitch und Scrating wird die Syncronisation nicht aussernander gehen. Die Samples sind absolut bis auf das Byte genau gleich lang. Lediglich die OGG-Komprimierung unterscheidet die Dateilänge.
 

tmode00

Betreff: RE: hectic

BeitragMi, Feb 21, 2007 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das was du da schreibst ist mir schlichtweg irgendwie zu hoch, sorry ^^
While (1) : Wend
 

tmode00

Betreff: Das Handtuch!

BeitragDo, März 08, 2007 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich habe mich entschlossen das Piano-Projekt einzustellen da es für mich einfach zu kompliziert ist das jetzt zu nem proffessionellen Programm weiter zu entwickeln! Vielleicht werde ich später alles noch einmal neu machen, dann aber unter verwendung einer anderen Programmiersprache, z.B. Delphi oder vielleicht auch mit Blitz-Plus mit GUI! Ich habe das Program ,,Sackgassenartig" programmiert. Man programmiert auf ein gewisses Ziel hin unter berücksichtigung aller zu diesem Zeitpunkt notwendigen aspekte (denkt man zumindest) und stellt dann fest, dass es nicht mehr weiter geht weil man um jetzt um etwas zu verändern [nahezu] ,,alles" neu programmieren müsste (z.B. mehrere Töne gleichzeitig aufnehmen, mehr Oktaven, besser klingende Töne.....).
While (1) : Wend

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 08, 2007 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Schade, leider ist Audiobearbeitung recht kompliziert. Aus diesem Grund gibt es auch verhältnismässig wenig Audioprogramme im Gegensatz zu vielen Grafikprogrammen. Zudem lässt sich das Gehör nicht so leicht täuschen ('Abtastrate') wie es zB bei den Augen (Grafik, Bilder) der Fall ist.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group