How to play a sound with a given sample rate in Java?

前端 未结 1 1220
攒了一身酷
攒了一身酷 2021-01-07 05:32

I was wondering if there is a library or something to play a sound on a given sample rate (20–20,000 Hz). Actually, I found something but I\'m not understanding how I can ma

相关标签:
1条回答
  • 2021-01-07 06:10

    Here's complete example not requiring any external library :

    import javax.sound.sampled.*;
    
    public class SoundUtils {
    
      public static float SAMPLE_RATE = 8000f;
    
      public static void tone(int hz, int msecs) 
         throws LineUnavailableException 
      {
         tone(hz, msecs, 1.0);
      }
    
      public static void tone(int hz, int msecs, double vol)
          throws LineUnavailableException 
      {
        byte[] buf = new byte[1];
        AudioFormat af = 
            new AudioFormat(
                SAMPLE_RATE, // sampleRate
                8,           // sampleSizeInBits
                1,           // channels
                true,        // signed
                false);      // bigEndian
        SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
        sdl.open(af);
        sdl.start();
        for (int i=0; i < msecs*8; i++) {
          double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
          buf[0] = (byte)(Math.sin(angle) * 127.0 * vol);
          sdl.write(buf,0,1);
        }
        sdl.drain();
        sdl.stop();
        sdl.close();
      }
    
      public static void main(String[] args) throws Exception {
        SoundUtils.tone(1000,100);
        Thread.sleep(1000);
        SoundUtils.tone(100,1000);
        Thread.sleep(1000);
        SoundUtils.tone(5000,100);
        Thread.sleep(1000);
        SoundUtils.tone(400,500);
        Thread.sleep(1000);
        SoundUtils.tone(400,500, 0.2);
    
      }
    }
    

    Source : http://www.rgagnon.com/javadetails/java-0499.html

    0 讨论(0)
提交回复
热议问题