Загрузка...

How to build your own internet based walkie talkie telephony Android App? - firebase Realtime db

Walkie Talkie Android App

This video shows the steps and code to develop your own walkie talkie Android app. It uses Firebase Realtime database to exchange the audio data over internet.
I hope you like this video. For any questions, suggestions or appreciation please contact us at: https://programmerworld.co/contact/ or email at: programmerworld1990@gmail.com
Details:
https://programmerworld.co/android/how-to-build-your-own-internet-based-walkie-talkie-telephony-android-app-firebase-realtime-database/
Java Code:

public class MainActivity extends AppCompatActivity {

private Button btnStartRecord, btnStopRecord, btnPlay;
private AudioRecord audioRecord;
private AudioTrack audioTrack;
private boolean isRecording = false;

private static final int SAMPLE_RATE = 16000;
private static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(
SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);

private DatabaseReference audioRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
ActivityCompat.requestPermissions(this,
new String[]{RECORD_AUDIO},
PackageManager.PERMISSION_GRANTED);

audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
SAMPLE_RATE,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
BUFFER_SIZE,
AudioTrack.MODE_STREAM);
btnStartRecord = findViewById(R.id.btnStartRecord);
btnStopRecord = findViewById(R.id.btnStopRecord);
btnPlay = findViewById(R.id.btnPlay);

// Firebase setup
FirebaseDatabase database = FirebaseDatabase.getInstance();
audioRef = database.getReference("audioStream");

// Start recording
btnStartRecord.setOnClickListener(v1 - startRecording());

// Stop recording
btnStopRecord.setOnClickListener(v1 - stopRecording());

// Play received audio
btnPlay.setOnClickListener(v1 - playAudioStream());

// Listen to Firebase for audio data
audioRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String encodedAudio = snapshot.getValue(String.class);
if (encodedAudio != null) {
byte[] decodedAudio = Base64.getDecoder().decode(encodedAudio);
audioTrack.write(decodedAudio, 0, decodedAudio.length);
}
}

@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(MainActivity.this, "Failed to receive audio.", Toast.LENGTH_LONG).show();
}
});
return insets;
});
}

private void startRecording() {
if (ActivityCompat.checkSelfPermission(this, RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Audio Recording permission not available!", Toast.LENGTH_LONG).show();
return;
}

audioRecord = new AudioRecord(
MediaRecorder.AudioSource.MIC,
SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
BUFFER_SIZE);

// Add noise suppressor
if (NoiseSuppressor.isAvailable()) {
NoiseSuppressor.create(audioRecord.getAudioSessionId());
}

// Add echo canceller
if (AcousticEchoCanceler.isAvailable()) {
AcousticEchoCanceler.create(audioRecord.getAudioSessionId());
}

audioRecord.startRecording();
isRecording = true;
btnStartRecord.setVisibility(View.GONE);
btnStopRecord.setVisibility(View.VISIBLE);

// Start sending audio data to Firebase
new Thread(() - {
byte[] buffer = new byte[BUFFER_SIZE];
while (isRecording) {
int read = audioRecord.read(buffer, 0, BUFFER_SIZE);
if (read 0) {
String encodedAudio = Base64.getEncoder().encodeToString(buffer);
audioRef.setValue(encodedAudio);
}
}
}).start();
}

private void stopRecording() {
if (audioRecord != null) {
isRecording = false;
audioRecord.stop();
audioRecord.release();
audioRecord = null;

btnStartRecord.setVisibility(View.VISIBLE);
btnStopRecord.setVisibility(View.GONE);
}
}

private void playAudioStream() {
audioTrack.play();
}
}

--

Видео How to build your own internet based walkie talkie telephony Android App? - firebase Realtime db канала Programmer World
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять