声音是通过物体振动产生的声波。是通过介质(空气或固体、液体)传播并能被人或动物听觉器官所感知的波动现象。
声音的频率一般会以赫兹表示,记为Hz,指每秒钟周期性振动的次数。
而分贝是用来表示声音强度的单位,记为dB。
一般的声音总是包含一定的频率范围。人耳可以听到的声音的频率范围在20到2万赫兹(Hz)之间。高于这个范围的波动称为超声波,而低于这一范围的称为次声波。
频率:音调越高,频率越大;音调越低,频率越小。(介质相同时,fλ成反比)
波长:音调越高,波长越短;音调越低,波长越长。(介质相同时,fλ成反比)
振幅:音量(响度)越大,振幅越大;音量越小,振幅越小。
采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数叫作采样周期或采样时间,它是采样之间的时间间隔。注意不要将采样率与比特率(bit rate,亦称“位速率”)相混淆。
采样定理表明采样频率必须大于被采样信号带宽的两倍,另外一种等同的说法是奈奎斯特频率必须大于被采样信号的带宽。
如果信号的带宽是100Hz,那么为了避免混叠现象采样频率必须大于200Hz。
换句话说就是采样频率必须至少是信号中最大频率分量频率的两倍,否则就不能从信号采样中恢复原始信号。
在模拟视频中,采样率定义为帧频和场频,而不是概念上的像素时钟。图像采样频率是传感器积分周期的循环速度。由于积分周期远远小于重复所需时间,采样频率可能与采样时间的倒数不同。
50 Hz - PAL视频
60 / 1.001 Hz - NTSC视频
当模拟视频转换为数字视频的时候,出现另外一种不同的采样过程,这次是使用像素频率。一些常见的像素采样率有:
13.5 MHz - CCIR 601、D1 video
高频luminance成分的混淆现象作为moiré pattern出现。
在数字音频领域,常用的采样率有:
8,000 Hz - 电话所用采样率,对于人的说话已经足够
11,025 Hz
22,050 Hz - 无线电广播所用采样率
32,000 Hz - miniDV数码视频camcorder、DAT(LP mode)所用采样率
44,100 Hz - 音频CD,也常用于MPEG-1音频(VCD, SVCD, MP3)所用采样率
47,250 Hz - Nippon Columbia(Denon)开发的世界上第一个商用PCM录音机所用采样率
48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
50,000 Hz - 二十世纪七十年代后期出现的3M和Soundstream开发的第一款商用数字录音机所用采样率
50,400 Hz - 三菱X-80数字录音机所用所用采样率
96,000或者192,000 Hz - DVD-Audio、一些LPCM DVD音轨、Blu-ray Disc(蓝光盘)音轨、和HD-DVD(高清晰度DVD)音轨所用所用采样率
2.8224 MHz - SACD、索尼和飞利浦联合开发的称为Direct Stream Digital的1位sigma-delta modulation过程所用采样率。
单声道(或常见简写 mono)是以单个声道来重现声音。它只用了一个麦克风,一个扬声器,或是耳机、并联扬声器,并从同样的讯号路径送入讯号,在并联扬声器中,虽有多个扬声器,但每个扬声器送入的仍是同一讯号。
立体声(英语:stereo)是使用两个或多个独立的音效通道,在一对以对称方式配置的扬声器(即俗称的喇叭)上出现。以此方法所发出的声音,在不同方向仍可保持自然与悦耳。与之相对的是单声道。
美国Audio Fidelity Records公司,于1957年第一次将立体声引入商业唱片领域,这是一个十分重要的里程碑。1957年可视为唱片录音史上Mono与Stereo的重要分水岭,许多在1957年前便过世的音乐家,都因而很遗憾未能留下Stereo的录音资料。此后在1960年代,大多数唱片公司都陆续放弃单声道,全面性地转向双声道立体声录音。双声道立体声,至今仍是聆听音乐的主流规格。
public static void play(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian, byte[] wave_data) {
System.out.println("@PlayWave::play sampleRate=" + sampleRate + ",sampleSizeInBits=" + sampleSizeInBits + ",channels=" + channels + ",signed=" + signed + ",bigEndian=" + bigEndian);
AudioFormat frmt= new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
DataLine.Info info= new DataLine.Info(Clip.class, frmt);
try {
Clip clip= (Clip) AudioSystem.getLine(info);
clip.open(frmt, wave_data, 0, wave_data.length);
clip.start();
long st = System.currentTimeMillis();
Thread.sleep(100);
while(clip.isRunning()) {
Thread.sleep(100);
}
long en = System.currentTimeMillis() - st;
System.out.println("@PlayWave::play 耗时:" + en + "ms");
} catch(Exception e) {
e.printStackTrace(System.err);
}
}