Äänen kelaaminen - Siis siistiii!!!

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Äänen kelaaminen - Siis siistiii!!!

Post by Ruuttu »

Jostain syystä juuri herättyäni minun oli vaikea kirjoittaa tekstiä, jossa kuvailla, mitä tämä koodinpätkä tekee. Noh, sen avulla voi kelata musiikkia mihin kohtaan tahansa, vähän niinkuin Windows Media Playerissäkin on se palkki, jota klikkaamalla voi hypätä haluamaansa kohtaan biisissä.

Code: Select all

SCREEN 800,600

soundi=LoadSound("Media\SK_battle2.mp3")

Const lenght=22.295955
Const barwidth=760.000
Const freq=24000

sijainti#=0.0

ajastin1=Timer()
Repeat

ajastin2=Timer()

hitti=MouseHit(1)
paino=MouseDown(1)
vapautus=MouseUp(1)

if soitetaan=1 then sijainti#=sijainti#+(ajastin2-ajastin1)/1000.0
ajastin1=Timer()

If soitetaan=1 And SoundPlaying(ääni)=0 Then soitetaan=0:sijainti#=0.0:xx#=0

xx#=barwidth/lenght*sijainti#

Color 255,255,255
Text 20,20,"PLAY"
Text 20,40,"STOP"
Text 20,80,sijainti
If kelaukseenkulunutaika Then Text 20,100,"Kelaukseen kulunut aika: "+kelaukseenkulunutaika+" ms"

Line 20,300,780,300
Line 20,301,780,301
Line 20,302,780,302

    //JOS HIIRTÄ PIDETÄÄN PLAY NAPPULAN PÄÄLLÄ...
    If MouseX()=>20 And MouseX()=<70 And MouseY()=>20 And MouseY()=<35 Then
        Color 255,0,0
        Text 20,20,"PLAY"
        
            //Jos play nappia klikattiin
            If hitti=1 Then 
            If soitetaan=0 Then ääni=PlaySound(soundi)
            soitetaan=1
            End If
    End If


    //JOS HIIRTÄ PIDETÄÄN STOP NAPPULAN PÄÄLLÄ...
    If MouseX()=>20 And MouseX()=<70 And MouseY()=>40 And MouseY()=<55 Then
        Color 255,0,0
        Text 20,40,"STOP"
        
            //Jos stop nappia klikattiin...
            If hitti=1 Then 
            If soitetaan=1 Then StopSound ääni
            soitetaan=0
            xx=0
            sijainti#=0.000
            End If
    End If
    
Color 128,128,128

//PIIRRETÄÄN PALKKIIN SE "NAPPULA"
Box 15+xx,295,10,15,0

    //AKTIVOIDAAN PALKIN "SE NAPPULA" JOS HIIRI ON SEN PÄÄLLÄ
    If MouseX()=>15 And MouseX()=<barwidth+20 And MouseY()=>285 And MouseY()=<315 Then
        Color 255,0,0
        Box 15+xx,295,10,15,0
        If paino=1 Then Box MouseX(),295,10,15

        If vapautus=1 Then 
            xx#=MouseX()-30
    
            If SoundPlaying(ääni)=1 Then StopSound ääni:soitetaan=0

            //SETSOUNDIN VIIMEINEN PARAMETRI ON ESITETTÄVÄ SEURAAVASTI:
            //NAPPULAN X / PALKIN LEVEYS * ÄÄNEN PITUUS SEKUNNEISSA.
            //SITTEN KOKO HÖSKÄ KERROTAAN KAPPALEEN NÄYTTEENOTTOTAAJUUDELLA. 

            //JOS NÄYTTEENOTTOTAAJUUS ANNETAAN OLLA SELLAISENAAN,
            //KESTÄÄ KELAUS OIKEAAN KOHTAAN TASAN SEKUNNIN.
            //KOSKA HALUAMME KELAUKSEN KESTÄVÄN VÄHEMMÄN KERROMME
            //NÄYTTEENOTTOTAAJUUDEN KAHDELLA JA PUOLITAMME KELAUKSEEN
            //KULUVAN AJAN



            ääni=PlaySound(soundi)
            SetSound ääni,OFF,0,0,((xx#/barwidth)*lenght)*(freq*2)

                // TÄSSÄ KOHTAA SE KELAAMINEN TAPAHTUU!!!
                // EDELLISILLÄ RIVEILLÄ KAPPALE ALOITETTIIN ALUSTA, JA
                // LAITETTIIN SOIMAAN NOPEUTETTUNA. NYT SITÄ SOITETAAN
                // TARKKAAN LASKETTU AIKA, JONKA JÄLKEEN KAPPALE ON
                // (MELKEIN) OIKEASSA KOHDASSA.

                timer1=Timer()
                Repeat
                timer2=Timer()
                Until timer2-timer1=>500
                SetSound ääni,OFF,100,0,freq
                sijainti#=(xx#/barwidth)*lenght
                
                kelaukseenkulunutaika=timer2-timer1
            soitetaan=1
            

        End If
        
    End If

DrawScreen
Forever
Tässä virityksessä on tietysti monia heikkouksia. Ensinnäkin, se ei ole kovin tarkka. Toiseksi, kappaleen pituus on tiedettävä tarkalleen, samoin näytteenottotaajuus. Kolmanneksi, se on hieman... viritys. Joka tapauksessa, tämä on ainoa keino, miten sen voi CoolBasicilla tehdä. Tietysti tuohon voi kehittää systeemin joka soittaa biisin nopeutettuna alusta loppuun, ja mittaa, kuinka kauan biisi kestää, mutta... sekin olisi viritys.

EDIT: Aika järkevästi olen näköjään noita muuttujia nimennyt... Koittakaa kestää.
EDIT2: Ja näköjään tuossa kelausnopeuden laskukaavassa on jokin virhe.
EDIT3: Ja tätä saa siis tosiaan käyttää - ja muokata (ja parannella!!!) - ihan vapaasti.
elmo123- guest(tietokone sekoili niin ei voinut kirjautua >:( )

Re: Äänen kelaaminen - Siis siistiii!!!

Post by elmo123- guest(tietokone sekoili niin ei voinut kirjautua >:( ) »

Järkevä ja hienohan viritys tuo on. Minä itse olen joskus miettinyt sellaista kelaussysteemiä, että haluttua äänitiedostoa aletaan soittamaan koko ajan alusta(kaikki soivat päällekkäin) äänettömälllä, ne siis pyörisivät taustalla kuitenkin. Jokaisen kanavamuuttujan lisäksi kaikilla äänillä on edistymisnumero. Haluttu kohta katsotaan palkista ja etsitään kanavamuuttuja, jonka edistymisnumero olisi lähin haluttua kohtaa. Sen kanavamuuttujan äänenvoimakkuus pistetään täysille ja muut nollille.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Äänen kelaaminen - Siis siistiii!!!

Post by Ruuttu »

elmo123- guest(tietokone sekoili niin ei voinut kirjautua >:( ) wrote:...minä itse olen joskus miettinyt sellaista kelaussysteemiä, että haluttua äänitiedostoa aletaan soittamaan koko ajan alusta(kaikki soivat päällekkäin) äänettömälllä, ne siis pyörisivät taustalla kuitenkin. Jokaisen kanavamuuttujan lisäksi kaikilla äänillä on edistymisnumero. Haluttu kohta katsotaan palkista ja etsitään kanavamuuttuja, jonka edistymisnumero olisi lähin haluttua kohtaa. Sen kanavamuuttujan äänenvoimakkuus pistetään täysille ja muut nollille.
Muuten hyvä idea, mutta samaa ääntä ei voi soittaa useata kertaa päällekkäin, ellei sitä lataa muistiin. Muistin käyttö olisi aika suurta, ja siitä voisi koitua monenmoisia ongelmia, jos kolmeakymmentä ääntä soitetaan samanaikaisesti (jokin vanha kone saattaisi kyykätä kokonaan). :D
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Äänen kelaaminen - Siis siistiii!!!

Post by MAVmaggot »

hieno virityshän tämä on :D mukava lisäys "haku"-nappulan rinnalle, joka vain nopeuttaa biisiä. Mutta kun tästä tulee vielä jonkun näkönen funktio, niin rupeaa näkymään paljon cb-playereitä. ;)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Äänen kelaaminen - Siis siistiii!!!

Post by MaGetzUb »

Ihan hienon tuntuinen oli, tosiaan kun tästä saataisiin funktio, se olisi mahtavaa.. Jos saisi myös sellaisen että se piirtäisi äänen taajuuksien mukaan kuvioo se olisi mahtava... Mutta siihen tarvittaisiin äänentulo Dll-tiedosto.. :? Musiikin pituuden saadaan selville lukemalla ID3 tageja musiikki tiedoston sisältä. ;)
Et siitä vielä värkkäilemään, ja onhan niitä lukemis funkkareita olemassa.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Äänen kelaaminen - Siis siistiii!!!

Post by Henkru »

Tukihan CB:lle voisi tehdä ihan oman DLL:n musiikin soittoon, jossa olisi hiukan lisää ominaisuuksia kun nykyisessä.
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Äänen kelaaminen - Siis siistiii!!!

Post by nevssons »

Tarvitaan enää puuttuva lenkki, eli taajuuden selvittäminen! Sillä saisi kaikki kappaleen pituuden määrittämisen, pausettamisen ja kelauksen toimimaan millä tahansa biisillä! (tosin jos saisi tietoon kappaleen pituuden, niin saisi selvitettyä myös taajuuden!)

Täytyisi kai tuntea musiikkitiedostojen rakenteita, niin nuokin jäjestyisi!
Koodarina kohtalainen, henkilönä vittumainen
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Äänen kelaaminen - Siis siistiii!!!

Post by MaGetzUb »

Pausen saa tehtyä helposti set soundilla. Pistää setsound biisi,0,100,0,0
Eli taajuus 0:ille niin sillä saa helposti biisin paussille. Mut pitää vaan tietää sitten näyttö taajuus, että se voidaan palauttaa.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Äänen kelaaminen - Siis siistiii!!!

Post by MAVmaggot »

http://cbkk.systec.fi/koodi.php?id=156
tommonen löyty, siinä näyttäs olevan biisin pituuden laskeminen. kiitos siitä valtzulle.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Äänen kelaaminen - Siis siistiii!!!

Post by Ruuttu »

MAVmaggot wrote:http://cbkk.systec.fi/koodi.php?id=156
tommonen löyty, siinä näyttäs olevan biisin pituuden laskeminen. kiitos siitä valtzulle.
No perhana, toihan on HYVÄ! (Toimii tosin vain mp3, mutta kukas muka musiikkia wav:na kuuntelee?)
Post Reply