Avatar billede crax Nybegynder
07. juni 2001 - 10:34 Der er 6 kommentarer og
1 løsning

generering af lyd med sun.audio

Jeg er ved at lave en applet der heslt skal kunne køre uden at man skal downloade et plugin til explorer eller netscape. Der skal lyd på, så jeg har valgt at benytte den gamle sun.audio til at generere lyden med.
Det er ikke muligt for mig at lave .au filer til appletten. Al lyd skal genereres \"online\".

Jeg leder efter en algoritme, der kan lave lyde der lyder som en mobiltelefon der ringer. Altså lyde fra musikverdenen (C, D, E, F, G, osv).

Følgende kodestumper generer lyden, men det lyder mere som et klaver eller noget i den stil. Det skal være mere \"firkantet\" som en mobiltelefons bipperi.

Jeg håber nogen kan hjælpe mig...

Mvh.
Thomas Rokamp


    public static byte[] createSound(double d, double d1, double d2)
    {
        double d3 = 8000D * d1;
        double d4 = (6.2831853071795862D * d) / 8000D;
        double d5 = 0.0D;
        byte abyte0[] = new byte[(int)d3];
        double d6 = 0.0D;
        double d7 = d2 * 2500D;
        for(int i = 0; i < abyte0.length; i++)
        {
            double d8 = Math.sin(2D * d6) / 2D;
            d8 *= d7;
            abyte0[i] = lin2mu((int)d8);
            d6 += d4;
        d5 = d8;
        }
        return abyte0;
    }




    private static byte lin2mu(int i)
    {
        int j;
        if(i < 0)
        {
            i = -i;
            j = 1;
        } else
        {
            j = 0;
        }
        for(int i1 = 0; i1 < 8; i1++)
        {
            int j1 = (32 << i1 + 1) - 32;
            if(i < j1)
            {
                int k = i1;
                int l = (i - (32 << k)) + 32 >>> k + 1;
                return (byte)((j << 7 | k << 4 | l & 0xf) ^ 0xff);
            }
        }

        return (byte)(j << 8);
    }
Avatar billede palle_anker Nybegynder
07. juni 2001 - 10:44 #1
jeg kan ikke hjælpe dig med hjemmesiden men jeg har et program til at ligge hvor man kan spillet på et klaver og derved lave en ringetone til ericsson telefoner. hvis du ikke får hjælp med sopørgsmålet kan jeg sende det til dig så må du bruge det som nødløsning =(

Avatar billede stigc Nybegynder
07. juni 2001 - 13:55 #2
kan du ikke ligge hele programmet, så vi kan prøve os lidt frem......
Avatar billede delbing Nybegynder
07. juni 2001 - 14:27 #3
Hvordan er din kode blevet så grim? Kommer det fra en disassembler?
Avatar billede crax Nybegynder
07. juni 2001 - 14:30 #4
Det kan jeg desværre ikke, da det fylder adskillige kilobytes. Jeg tror heller ikke det ville hjælpe ret meget, da ovenstående er den egentlige lyddel.
Det jeg egentlig mangler er selve algoritmen til at generere den slags lyd. I eksemplet er der brugt noget med sinus. Det behøver ikke være i stil med eksemplet... en forklaring af begrebet \"mobile toner\" eller noget i den stil, vil også være fint, helst krydret med lidt matematik...
(jeg har ingen forstand på musik)
Avatar billede crax Nybegynder
07. juni 2001 - 14:53 #5
delbing: hvad mener du med grim? Ok... noget af det kommer fra en disassembler. Noget andet har jeg selv proppet ind eller rettet til.
Når man først har søgt det meste af nettet igennem for at finde oplysninger om sun.audio og autogenerering af lyd uden at finde noget, må man ty til andre midler. Selvom man ikke er meget for det...
Avatar billede delbing Nybegynder
07. juni 2001 - 15:33 #6
Jeg tror at det er sinus-funktionen der giver dig den \"bløde\" klaverlyd (det er måske amplituden der varieres). Hvad sker der hvis du runder d8 af til nærmeste heltal ved at lave løkken om til:

int i8 = (int)( (Math.sin(2D * d6) / 2D) + 0.5D);
i8 *= d7;
abyte0[i] = lin2mu(i8);
d6 += d4;
       
Hvis det bliver for metallisk kan du prøve at runde af til nærmeste 1/2 eller 1/4 i stedet.


Jeg lavede engang noget lyd på en RCX (de der lego mindstorm tingester). det gav noget ret \"firkantet\" lyd. Vi gjorde det simpelthen bare ved at slukke/tænde for højtaleren i korte intervaller. Frit fra hukommelsen er kammertonen på 440 Hz, og forholdet mellem oktaverne er den 12te rod af 2. Så for at få kammertonen: tændt 1/880 sekund, slukket 1/880 osv. Gang eller del perioden med 2^(1/12) for at gå toner op eller ned.

Avatar billede crax Nybegynder
07. juni 2001 - 16:08 #7
Det virker sådan nogenlunde nu... kræver stadig lidt tilpasning, men jeg accepterer dit svar... tak for det!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester