由于項(xiàng)目中有關(guān)于java錄音的東西,所以從網(wǎng)上找些資料學(xué)習(xí)一下
1
import java.io.*;
2
import javax.sound.sampled.*;
3
4
public class JDKAudioRecorder extends Thread {
5
// 產(chǎn)生TargetDataLine類別的變數(shù)m_targetdataline
6
static TargetDataLine m_targetdataline;
7
8
// 透過TargetDataLine介面(繼承自DataLine)與音效卡溝通 target目標(biāo)
9
10
// 產(chǎn)生AudioFileFormat.Type類別的變數(shù)m_targetType Format格式
11
static AudioFileFormat.Type m_targetType;
12
13
// 產(chǎn)生AudioInputStream類別的變數(shù)m_audioInputStream stream流
14
static AudioInputStream m_audioInputStream;
15
16
static File m_outputFile;// 產(chǎn)生File類別的變數(shù) m_outputFile
17
18
static boolean m_bRecording;// 後面需用到布林函數(shù) True,False
19
20
public JDKAudioRecorder(TargetDataLine line,
21
AudioFileFormat.Type targetType, File file) {
22
m_targetdataline = line;
23
m_audioInputStream = new AudioInputStream(line);
24
m_targetType = targetType;
25
m_outputFile = file;
26
}
27
28
public static void AudioRecorder() {
29
String Filename = "c://JDKAudioRecord.wav";
30
File outputFile = new File(Filename);
31
32
// 我們一開始先在主程式裡指定聲音檔的檔名為
33
// JDKAudioRecorder.wav
34
// String Filename = "JDKAudioRecord.wav";
35
// 接著指定存檔的資料夾,預(yù)設(shè)存在相同的資料夾
36
// FileoutputFile = new File(Filename);
37
38
AudioFormat audioFormat = null;
39
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
40
44100.0F, 16, 2, 4, 44100.0F, false);
41
42
// 再來設(shè)定和取得音效檔的屬性
43
// audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
44
// 44100.0F, 16, 2, 4, 44100.0F, false);
45
46
DataLine.Info info = new DataLine.Info(TargetDataLine.class,
47
audioFormat);
48
TargetDataLine targetDataLine = null;
49
50
// 然後透過TargetDataLine介面(繼承自DataLine)與音效卡溝通
51
// DataLine.Info info = new DataLine.Info(TargetDataLine.class,
52
// audioFormat);
53
// 接著做例外處理,當(dāng)聲音裝置出錯(cuò)或其他因素導(dǎo)致錄音功能無法被執(zhí)行時(shí),程式將被終止
54
55
try {
56
targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
57
targetDataLine.open(audioFormat);// try{ }可能發(fā)生例外的敘述
58
59
} catch (LineUnavailableException e)// catch{ }處理方法
60
61
{
62
System.out.println("無法錄音,錄音失敗");
63
e.printStackTrace();
64
System.exit(-1);
65
}
66
67
AudioFileFormat.Type targetType = AudioFileFormat.Type.AU;
68
JDKAudioRecorder recorder = null;
69
70
recorder = new JDKAudioRecorder(targetDataLine, targetType, outputFile);
71
recorder.start();
72
}
73
74
public void start() {
75
m_targetdataline.start();
76
super.start();
77
}
78
79
public static void stopRecording() {
80
81
m_targetdataline.stop();
82
m_targetdataline.close();
83
m_bRecording = false;
84
}
85
86
public void run() {
87
try {
88
AudioSystem.write(m_audioInputStream, m_targetType, m_outputFile);
89
System.out.println("after write()");
90
} catch (IOException e) {
91
e.printStackTrace();
92
}
93
}
94
95
}
96
// 一切準(zhǔn)備ok後,開始呼叫DataLine類別中的start()method即可
97
// 開始錄音,停止錄音則透過stopRecording()method
98
// public void start()
99
//{
100
//m_targetdataline.start();
101
//}
102
// public static void stopRecording()
103
//{
104
//m_targetdataline.stop();
105
//}
106

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106
