Avatar billede ladyhawke Novice
27. december 2001 - 13:29 Der er 7 kommentarer og
1 løsning

lyd baseret på tid og frekvens

Kan det lade sig gøre (hvordan?) at generere en lyd i java ved at specificere varighed (tid) og tonehøjde (frekvens). Det er ikke nok at bruge præindspillede lyde (wav, .mid etc.), da det vil fylde for meget i denne sammenhæng...
Avatar billede carstenknudsen Nybegynder
28. december 2001 - 16:23 #1
Det er ikke helt det samme, men tag og kig på denne reference, det er endnu bedre:
http://java.sun.com/features/2001/12/flite.html
Avatar billede ladyhawke Novice
29. december 2001 - 11:13 #2
Det er muligt det er bedre, men det er totalt overkill til det jeg skal bruge. Jeg vil lave et simpelt morseprogram og den behøver altså ikke at kunne tale, blot udsende lyde med samme frekvens og forskellig længde afhængig af om det er prik eller streg
Avatar billede carstenknudsen Nybegynder
29. december 2001 - 11:21 #3
Jeg var klar over at det var overkill, men det kunne være interessant. Smid en besked op hvis du finder svaret selv. God jagt.
Avatar billede ladyhawke Novice
29. december 2001 - 11:42 #4
Du har ret i at det er interessant med syntetisk tale og jeg vil kigge lidt mere på det link du sendte. Jeg skal nok sige til  når/hvis jeg finder svaret...
Avatar billede ladyhawke Novice
11. juni 2002 - 09:20 #5
Hmm, der kommer vist ikke noget brugbart her...
Avatar billede soreno Praktikant
19. juni 2002 - 22:13 #6
hvis det bare er til at morse kan dette måske bruges:
import java.io.*;
import java.util.*;
import javax.sound.sampled.*;

public class Main
{
   
    public static byte[] calcSin(int hz)
    {
        int samples = (int)44100 / hz;
        byte sinCurve[] = new byte[samples];
       
        for(int i=0;i<sinCurve.length;i++)
        {
            sinCurve[i] = (byte)(Math.sin(i)*150);
        }
   
        return sinCurve;       
    }

    public static void main(String args[])
    {
        byte sinCurve[] = calcSin(440);
       
        try
        {
            AudioFormat outFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
            DataLine.Info lineInfo = new DataLine.Info( SourceDataLine.class, outFormat, 14112);
            SourceDataLine sourceLine = (SourceDataLine)AudioSystem.getLine(lineInfo);
            sourceLine.open(outFormat, sourceLine.getBufferSize());
            sourceLine.start();
       
            for(int i=0;i<2000;i++)//skriv sinus 2000 gange
            {
                sourceLine.write(sinCurve, 0, sinCurve.length);
            }
           
            sourceLine.stop();
            sourceLine.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

det er en del af et eksperiment der aldrig er kommet videre - jeg kan kun få den til at afspille ved 440Hz, men det skulle vel også være ok ved morse signaler - så er det bare at ændre hvor lang en lang er og hvor lang en kort er :-)
Avatar billede soreno Praktikant
19. juni 2002 - 22:19 #7
forresten, de 150 i "for sætningen" i "calcSin" er amplitude. "calcSin" er sikkert ikke helt korrekt opbygget - men det giver lyd ;-)
Avatar billede ladyhawke Novice
20. juni 2002 - 19:09 #8
Jeg kigger på 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