मैं ऑडियो रिकॉर्डॉर्ड क्लास का उपयोग करके कुछ आवाज रिकॉर्ड करने की कोशिश कर रहा हूं और फिर इसे आउटपुट .pcm फ़ाइल में लिख रहा हूं। मैं चाहता हूं कि मेरा प्रोग्राम रिकॉर्डिंग जारी रखे जब तक कि स्टॉप बटन दबाया न जाए। दुर्भाग्य से कोई फर्क नहीं पड़ता कि मैं कितनी देर तक रिकॉर्डिंग कर रहा हूं, आउटपुट फ़ाइल का आकार हमेशा 3528 बाइट होता है और यह लगभग 20 एमएस तक रहता है। टूल्सॉफ्ट ऑडियो टूल्स के मुताबिक, उस फाइल की प्रोपरीज हैं: 44100 हर्ट्ज, 16 बिट्स, स्टीरियो, भले ही मैं पूरी तरह से अलग नमूना आवृत्ति के साथ मोनो का उपयोग कर रहा हूं।ऑडियो रिकॉर्ड - लेखन पीसीएम फ़ाइल
Thread recordingThread;
boolean isRecording = false;
int audioSource = AudioSource.MIC;
int sampleRateInHz = 44100;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
byte Data[] = new byte[bufferSizeInBytes];
AudioRecord audioRecorder = new AudioRecord(audioSource,
sampleRateInHz,
channelConfig,
audioFormat,
bufferSizeInBytes);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void startRecording(View arg0) {
audioRecorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
String filepath = Environment.getExternalStorageDirectory().getPath();
FileOutputStream os = null;
try {
os = new FileOutputStream(filepath+"/record.pcm");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while(isRecording) {
audioRecorder.read(Data, 0, Data.length);
try {
os.write(Data, 0, bufferSizeInBytes);
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
recordingThread.start();
}
public void stopRecording(View arg0) {
if (null != audioRecorder) {
isRecording = false;
audioRecorder.stop();
audioRecorder.release();
audioRecorder = null;
recordingThread = null;
}
}
क्या मैं आपसे पूछूंगा कि क्या गलत है? मैं आशा करती हूं जवाब 'सब कुछ' :)
मुझे लगता है कि आपका आईओ कोड समस्या हो सकती है। धाराओं की प्रतिलिपि बनाने के लिए अपाचे कॉमन्स IOUtils का उपयोग करने का प्रयास करें: http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html#copy(java.io.InputStream,%20java.io ऑटपुटस्ट्रीम) –