Audiodaten aus short-Array als (unkomprimierte) Audiodatei speichern

sowatt

sowatt

Neues Mitglied
0
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. Das gesamte Eclipse-Projekt befindet sich im beigefügten Archiv.
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();
    }
}
 

Anhänge

  • AudioClassifier.zip
    54,7 KB · Aufrufe: 71
niemand?
 
na ja, das is mir schon klar, dass ich mir die wave-datei selber zusammenbasteln kann.

was ich aber suche ist eine möglichkeit eine solche wave-datei automatisch generieren zu lassen. nicht weil ich zu faul für die alternative wäre, sondern weil es mir so naheliegend erscheint, dass es dafür einen mechanismus geben müsste.
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.016
swa00
swa00
B
Antworten
6
Aufrufe
1.051
jogimuc
J
Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
Zurück
Oben Unten