Я экспериментировал с созданием звукового сигнала с использованием Java. Я нашел этот ответ на SO.
Я использую код из этого ответа для создания звуковых сигналов. Код:
import javax.sound.sampled.*;
public class Sound
{
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,8,1,true,false);
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 {
Sound.tone(15000,1000);
}
}
В методе main
я использую Sound.tone(15000,1000);
для создания звука с частотой 15000 Гц для воспроизведения 1000 мс
Но я могу услышать звук, если я изменю его на:
-
Sound.tone(1,1000);
,. -
Sound.tone(19999,1000);
С научной точки зрения, это невозможно.
- В первом случае звук должен быть infrasonic, и я не должен его воспринимать.
- Во втором случае мне все равно не удастся услышать звук, потому что, поскольку мы стареем, способность слышать имеет тенденцию к уменьшению, и человек примерно моего возраста должен только слышать звук приблизительно 16000 Гц.
Кроме того, я не слышу:
-
Sound.tone(0,1000);
(как бы ожидалось) -
Sound.tone(20000,1000);
Итак, Как я могу воспроизводить звуки некоторых определенных частот?
Я искал в Интернете, но ничего не мог найти по этому поводу.
Ответы, приведенные перед этим редактированием, объясняют, почему это происходит, но не давайте ответа, который я хочу.