Mam pewne problemy przy użyciu klasy AudioRecord. Chcę przechowywać zarejestrowane dane w buforze, ale nie jestem pewien, jaki jest właściwy sposób, aby to osiągnąć. Przeszedłem przez wiele przykładów, ale większość z nich była skomplikowana i reprezentowała wiele różnych podejść. Szukam prostego lub prostego wyjaśnienia.AudioRecord - jak uzyskać dane do bufora?
Oto moje ustawienia audio dla mojego projektu:
int audioSource = AudioSource.MIC;
int sampleRateInHz = 8000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
short[] buffer = new short[bufferSizeInBytes];
AudioRecord audioRecorder = new AudioRecord(audioSource,
sampleRateInHz,
channelConfig,
audioFormat,
bufferSizeInBytes);
Próbuję utworzyć funkcję nagrywania:
public void Recording() {
audioRecorder.startRecording();
...
audioRecorder.stop();
audioRecorder.release();
}
wiem, że jestem powinien używać .read (krótkie Funkcja [] audioData, int offsetInShorts, int sizeInShorts). I tutaj zaczynają się moje problemy. Nie jestem pewien, jak działa bufor audioData - zakładam, że funkcja umieszcza nagrane próbki w audioData. Co się stanie, jeśli całkowicie wypełni się danymi? Zaczyna się przepisywanie od najwcześniejszej pozycji? Jeśli tak, to uważam, że muszę skopiować wszystkie zebrane próbki w innym miejscu. Pojawia się kolejne pytanie - jak mogę sprawdzić, czy bufor funkcji .read (...) jest już pełny? Czy muszę mierzyć czas i kopiować zawartość bufora, czy istnieje inny sposób, aby to osiągnąć? Czy muszę również utworzyć wątek dla całej operacji nagrywania?
Przepraszam za pytanie tak wiele pytań w jednym temacie :)
co to jest ** qArray ** tutaj? – OnePunchMan
może być listą array. Nie pamiętam teraz. Lepiej odnieść ten przykład http://stackoverflow.com/questions/8499042/android-audiorecord-example/13487250#13487250 –