Android AudioRecord Beispiel

Ich entwerfe eine Android-App und ich muss eine AudioRecord-Klasse implementieren, um den Klang des Benutzers aufzuzeichnen. Nach einigen Recherchen (die nicht genügend Informationen lieferten) und wenige fehlgeschlagene Versuche, war ich frage mich, ob jemand mir helfen könnte, indem ich ein Beispiel (Code) auf, wie man qualitativ hochwertigen Klang mit AudioRecord erfassen kann. Ich würde das wirklich zu schätzen wissen. Vielen Dank

  • Verhindere IllegalStateException in SQLiteCursor für Android
  • Ist Sun Java wirklich notwendig für die Verwendung von Android SDK auf Ubuntu 10.10? Ich bevorzuge OpenJDK
  • Android SurfaceView verursacht Bildschirmflimmern
  • Dashclock Widget-Erweiterung nicht aktualisiert
  • Cordova Fehler Gebäude - EPERM, Betrieb nicht erlaubt
  • Wie viele Apps können im Google Playback veröffentlicht werden?
  • Wie konvertiere ich RealmResults Objekt in RealmList?
  • Ist android: scaleType = "fitCenter" funktioniert nur mit fix Layout_width und Layout_height Attribute?
  • Android: Wie bekomme ich GSM-Signalstärke für alle verfügbaren Netzbetreiber
  • Implementieren Tippen, um in Camera2 API zu fokussieren
  • Bewerben Material Design Touch Ripple auf ImageButton?
  • Zeichne die Breite eines Strings in einer bestimmten Schriftart
  • 2 Solutions collect form web for “Android AudioRecord Beispiel”

    Hier schreibe ich dir das Code-Beispiel, das mit AudioRecord API eine gute Klangqualität aufzeichnet .

    Hinweis: Wenn du im Emulator einsetzst, wird die Klangqualität nicht viel gut, weil wir die Sample Rate 8k verwenden, die nur im Emulator unterstützt. Im Gerät verwenden Sie die Sample Rate auf 44.1k für bessere Qualität.

    public class Audio_Record extends Activity { private static final int RECORDER_SAMPLERATE = 8000; private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; private AudioRecord recorder = null; private Thread recordingThread = null; private boolean isRecording = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setButtonHandlers(); enableButtons(false); int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING); } private void setButtonHandlers() { ((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick); ((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick); } private void enableButton(int id, boolean isEnable) { ((Button) findViewById(id)).setEnabled(isEnable); } private void enableButtons(boolean isRecording) { enableButton(R.id.btnStart, !isRecording); enableButton(R.id.btnStop, isRecording); } int BufferElements2Rec = 1024; // want to play 2048 (2K) since 2 bytes we use only 1024 int BytesPerElement = 2; // 2 bytes in 16bit format private void startRecording() { recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement); recorder.startRecording(); isRecording = true; recordingThread = new Thread(new Runnable() { public void run() { writeAudioDataToFile(); } }, "AudioRecorder Thread"); recordingThread.start(); } //convert short to byte private byte[] short2byte(short[] sData) { int shortArrsize = sData.length; byte[] bytes = new byte[shortArrsize * 2]; for (int i = 0; i < shortArrsize; i++) { bytes[i * 2] = (byte) (sData[i] & 0x00FF); bytes[(i * 2) + 1] = (byte) (sData[i] >> 8); sData[i] = 0; } return bytes; } private void writeAudioDataToFile() { // Write the output audio in byte String filePath = "/sdcard/voice8K16bitmono.pcm"; short sData[] = new short[BufferElements2Rec]; FileOutputStream os = null; try { os = new FileOutputStream(filePath); } catch (FileNotFoundException e) { e.printStackTrace(); } while (isRecording) { // gets the voice output from microphone to byte format recorder.read(sData, 0, BufferElements2Rec); System.out.println("Short wirting to file" + sData.toString()); try { // // writes the data to file from buffer // // stores the voice buffer byte bData[] = short2byte(sData); os.write(bData, 0, BufferElements2Rec * BytesPerElement); } catch (IOException e) { e.printStackTrace(); } } try { os.close(); } catch (IOException e) { e.printStackTrace(); } } private void stopRecording() { // stops the recording activity if (null != recorder) { isRecording = false; recorder.stop(); recorder.release(); recorder = null; recordingThread = null; } } private View.OnClickListener btnClick = new View.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.btnStart: { enableButtons(true); startRecording(); break; } case R.id.btnStop: { enableButtons(false); stopRecording(); break; } } } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); } return super.onKeyDown(keyCode, event); } } 

    Für mehr Details versuche dieses AUDIORECORD BLOG .

    Glückliche Codierung !!

    Hier ist eine End-to-End-Lösung, die ich für das Streaming von Android-Mikrofon-Audio auf einen Server für die Wiedergabe implementiert habe : Android AudioRecord to Server über UDP Playback Issues

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.