Piano-Projekt, Alpha-Version fertig ^^
Übersicht

tmode00Betreff: Piano-Projekt, Alpha-Version fertig ^^ |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
nach 2 Tagen harter Arbeit ist nun endlich die Alpha-Version meines Piano-Programs fertig. Die Idee ![]() 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: 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 ![]() Danke an alle die es sich mal anschauen und dazu was sagen! |
||
While (1) : Wend |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() notierst und editierbar machst, dann hast du ein einfaches Trackerprogramm geschrieben ![]() 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 ^^ |
||
tmode00Betreff: Der Exit-Button! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Exit-Button ist nun eingefügt und einsatzbereit ![]() ![]() |
||
While (1) : Wend |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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!.. | ||
tmode00Betreff: Taktgeber! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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-> Der Aktuelle-Download (Piano_Alpha_1.0_tmode.rar überschrieben): HIER KLICKEN |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Sowas wolte ich auchmal machen ![]() ![]() 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 ![]() 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 ![]() |
||
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. |
tmode00Betreff: ?? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. | ||
tmode00Betreff: Glauben! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ; ) | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Notenlängen mit Pianosounds sind nicht grad einfach zu realisieren. | ||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit der C4 Taste sollte man aber ziemlich vorsichtig sein ![]() Sieht schön aus ![]() |
||
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
tmode00Betreff: Danke! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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: ![]() 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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
tmode00Betreff: RE: hectic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das was du da schreibst ist mir schlichtweg irgendwie zu hoch, sorry ^^ | ||
While (1) : Wend |
tmode00Betreff: Das Handtuch! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group