Otto Mueller
- Forum-Beiträge: 1
23.05.2011, 19:10:51 via Website
23.05.2011 19:10:51 via Website
Ich habe mittels 'AudioRecord' einen 16bit - Audiostream vom Mic-Eingang in ein short-array ('buffer') geschrieben. Jeder Wert in diesem Array entspricht genau einem Samplewert im Bereich-32.768 ... 32.767, also dem Datenbereich des verwendeten Typs. Der Inhalt des Arrays wird in einer Textdatei abgespeichert ( 'saveToSDCard()' ).
Wie kann ich außerdem den Inhalt des Arrays am einfachsten als unkomprimierte Audiodatei abspeichern?
Danke!
Hier die relevanten Codefragmente (welche trotz code-tag anscheinend nicht richtig formatiert ausgegeben werden. sorry!)
[code]
int AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
int FREQUENCY = 22050; //Herz
double REC_DURATION = 5.0; // in seconds
int bufferSize = -1;
AudioRecord audioRecord = null;
short [] buffer = null; // data sink for recording the audio stream from mic
void initAudio() {
int minBufferSize = AudioTrack.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_OUT_MONO, AUDIO_ENCODING);
bufferSize = (int)(REC_DURATION * 10 * minBufferSize);
buffer = new short[bufferSize];
// Create new AudioRecord object to record the audio.
audioRecord = new AudioRecord(
MediaRecorder.AudioSource.MIC,
FREQUENCY, AudioFormat.CHANNEL_IN_MONO,
AUDIO_ENCODING, bufferSize);
}
public void record() {
try {
audioRecord.startRecording();
audioRecord.read(buffer, 0, bufferSize);
audioRecord.stop();
} catch (Throwable t) {
Log.e(ACTIVITY_NAME,"record(): Recording Failed");
}
}
private void saveToSDCard(){
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy.MM.dd HH.mm.ss");
String fileName = sdf.format(new java.util.Date());
try {
String rootS = Environment.getExternalStorageDirectory().toString();
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()){
File f = new File(rootS + "/AudioClassifier", fileName + ".txt");
FileWriter fw = new FileWriter(f);
BufferedWriter out = new BufferedWriter(fw);
for(int i = 0; i < bufferSize / 2; i++){
out.write("" + buffer[i] + " ");
}
out.close();
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
[/code]
Wie kann ich außerdem den Inhalt des Arrays am einfachsten als unkomprimierte Audiodatei abspeichern?
Danke!
Hier die relevanten Codefragmente (welche trotz code-tag anscheinend nicht richtig formatiert ausgegeben werden. sorry!)
[code]
int AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
int FREQUENCY = 22050; //Herz
double REC_DURATION = 5.0; // in seconds
int bufferSize = -1;
AudioRecord audioRecord = null;
short [] buffer = null; // data sink for recording the audio stream from mic
void initAudio() {
int minBufferSize = AudioTrack.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_OUT_MONO, AUDIO_ENCODING);
bufferSize = (int)(REC_DURATION * 10 * minBufferSize);
buffer = new short[bufferSize];
// Create new AudioRecord object to record the audio.
audioRecord = new AudioRecord(
MediaRecorder.AudioSource.MIC,
FREQUENCY, AudioFormat.CHANNEL_IN_MONO,
AUDIO_ENCODING, bufferSize);
}
public void record() {
try {
audioRecord.startRecording();
audioRecord.read(buffer, 0, bufferSize);
audioRecord.stop();
} catch (Throwable t) {
Log.e(ACTIVITY_NAME,"record(): Recording Failed");
}
}
private void saveToSDCard(){
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy.MM.dd HH.mm.ss");
String fileName = sdf.format(new java.util.Date());
try {
String rootS = Environment.getExternalStorageDirectory().toString();
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()){
File f = new File(rootS + "/AudioClassifier", fileName + ".txt");
FileWriter fw = new FileWriter(f);
BufferedWriter out = new BufferedWriter(fw);
for(int i = 0; i < bufferSize / 2; i++){
out.write("" + buffer[i] + " ");
}
out.close();
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
[/code]
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.