1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Audiodaten aus short-Array als (unkomprimierte) Audiodatei speichern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von sowatt, 23.05.2011.

  1. sowatt, 23.05.2011 #1
    sowatt

    sowatt Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    14.04.2011
    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:

  2. sowatt, 24.05.2011 #2
    sowatt

    sowatt Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    14.04.2011
    niemand?
     
  3. DieGoldeneMitte, 24.05.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
  4. sowatt, 24.05.2011 #4
    sowatt

    sowatt Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    14.04.2011
    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.
     

Diese Seite empfehlen