마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

UDP통신 실시간 AudioRecord, AudioTrack 질문입니다.

0 추천
private class RecordAudio extends AsyncTask<Void, Integer, Void> {
		protected Void doInBackground(Void... params) {
			isRecording = true;
			try {
				serverSocket = new DatagramSocket();
				int bufferread = 0;

				int buffersize = AudioRecord.getMinBufferSize(DATA_DIC.frequency, DATA_DIC.channelconfiguration, DATA_DIC.audioencoding);
				AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, DATA_DIC.frequency,
						DATA_DIC.channelconfiguration, DATA_DIC.audioencoding, buffersize);
				short[] buffer = new short[buffersize];
				audioRecord.startRecording();

				// int r=0;
				while (isRecording) {
					int bufferreadresult = audioRecord.read(buffer, 0, buffersize);
					byte[] buf = new byte[4096];

					for (int i = 0; i < bufferreadresult; i++) {
						String ss = String.valueOf((int) buffer[i]);
						buf = ss.getBytes();
						
//						packet = new DatagramPacket(buf, buf.length, InetAddress.getByName(Util.getLocalIpAddress()), DATA_DIC.UDP_PORT);
						packet = new DatagramPacket(buf, buf.length, clientAddr, DATA_DIC.UDP_PORT_AUDIO);
						serverSocket.send(packet);
						Log.d("RecordAudio", ""+i);
					}
				}
				audioRecord.stop();
			} catch (Throwable t) {
				Log.e("AudioRecord", "Recording Failed");
			}
			return null;
		}
	}




private class PlayAudio extends AsyncTask<Void, Integer, Void> {
		protected Void doInBackground(Void... params) {
			isPlaying = true;
			byte[] buf = new byte[4096];

			int buffersize = AudioTrack.getMinBufferSize(DATA_DIC.frequency, DATA_DIC.channelconfiguration,
					DATA_DIC.audioencoding);
			short[] audiodata = new short[buffersize];

			try {
				socket = new DatagramSocket(DATA_DIC.UDP_PORT_AUDIO);
				receivepacket = new DatagramPacket(buf, buf.length);

				AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, DATA_DIC.frequency,
						DATA_DIC.channelconfiguration, DATA_DIC.audioencoding, buffersize, AudioTrack.MODE_STREAM);
				audioTrack.play();

				
				while (isPlaying) {
					for (int i = 0; i < audiodata.length; i++) {
						socket.receive(receivepacket);
						String temp = new String(buf, 0, receivepacket.getLength());
						audiodata[i] = Short.parseShort(temp);
						Log.d(tag, "PlayAudio"+i);
					}
					audioTrack.write(audiodata, 0, audiodata.length);
					
				}
				startUDP("audio 확인완료");
			} catch (Exception ex) {
				Log.e("udpreceiver", "s:error");
			}
			Log.d(tag, "audioThread");
			return null;
		}
	}



	public static final int frequency = 44100;
	public static final int channelconfiguration = AudioFormat.CHANNEL_IN_MONO;
	public static final int audioencoding = AudioFormat.ENCODING_PCM_16BIT;

지금 단말끼리 무전기처럼 구현해보려고 하는데요 지금상황은 전달하고자하는 폰에서 말을하면 듣는 폰에서는 한 5초 정도? 뒤에 소리가 한번 들리고 마는데 소리가 제대로 가는건지 아니면 소리가 듣는데서 잘못된건지 감을 못잡겠습니다 ㅠㅠ 한번들리는것도 한음 득! ? 이런 소리 ㅎㅎㅎ 큰소리로 말하면 들리는 소리가 커지고 작게 말하면 들리는 소리가 작은거같아서 말한게 한꺼번에 몰아서 오는것같기도 한데 ㅠㅠ 다른분들은 다하던데 도와주세요~

윤슈슈슈 (3,030 포인트) 님이 2015년 11월 25일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...