"시작하세요 안드로이드 프로그래밍"책을 보면서 녹음하는 부분 연습하고 있는데
녹음을 하고 플레이하면 아무소리도 없네요....ㅠㅜ
녹음하는데 문제인건지... 플레이 하는데 문제인건지...
소스 상에는 문제가 없어 보이는데 어디가 문제인지 한번 봐주세요!!
파일도 같이 첨부했어요~ 한번 돌려봐 주세요~
===>1. 로그확인해보구 다시 에러 있는 부분과 경고가 나온 부분만 복사해서 추가로 올립니다!!!!
10-08 21:33:04.460: ERROR/audio_input(31): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
10-08 21:33:04.460: ERROR/audio_input(31): VerifyAndSetParameter failed
10-08 21:33:04.491: DEBUG/Audio filename:(221): /data/data/com.androidbook/files/audio.mp4
10-08 21:33:04.581: DEBUG/Audio URI(221): Path = /external/audio/media/10
10-08 21:33:04.671: WARN/BackupManagerService(59): dataChanged but no participant pkg='com.android.providers.settings' uid=10028
10-08 21:33:05.980: DEBUG/Audio filename:(221): /data/data/com.androidbook/files/audio.mp4
10-08 21:33:06.081: WARN/MediaPlayer(221): info/warning (1, 26)
10-08 21:33:06.081: ERROR/PlayerDriver(31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
10-08 21:33:06.081: ERROR/MediaPlayer(221): error (1, -4)
10-08 21:33:06.090: ERROR/Audio(221): Playback failed.
10-08 21:33:06.090: ERROR/Audio(221): java.io.IOException: Prepare failed.: status=0x1
10-08 21:33:06.090: ERROR/Audio(221): at android.media.MediaPlayer.prepare(Native Method)
10-08 21:33:06.090: ERROR/Audio(221): at com.androidbook.Audio$3.onClick(Audio.java:152)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.View.performClick(View.java:2364)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.View.onTouchEvent(View.java:4179)
10-08 21:33:06.090: ERROR/Audio(221): at android.widget.TextView.onTouchEvent(TextView.java:6540)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.View.dispatchTouchEvent(View.java:3709)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:06.090: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
10-08 21:33:06.090: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
10-08 21:33:06.090: ERROR/Audio(221): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
10-08 21:33:06.090: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
10-08 21:33:06.090: ERROR/Audio(221): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
10-08 21:33:06.090: ERROR/Audio(221): at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 21:33:06.090: ERROR/Audio(221): at android.os.Looper.loop(Looper.java:123)
10-08 21:33:06.090: ERROR/Audio(221): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-08 21:33:06.090: ERROR/Audio(221): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 21:33:06.090: ERROR/Audio(221): at java.lang.reflect.Method.invoke(Method.java:521)
10-08 21:33:06.090: ERROR/Audio(221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-08 21:33:06.090: ERROR/Audio(221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-08 21:33:06.090: ERROR/Audio(221): at dalvik.system.NativeStart.main(Native Method)
10-08 21:33:06.101: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete
10-08 21:33:17.770: ERROR/gralloc(59): [unregister] handle 0x3891e0 still locked (state=40000001)
10-08 21:33:22.990: DEBUG/dalvikvm(171): GC freed 3205 objects / 196824 bytes in 226ms
10-08 21:33:25.311: DEBUG/Audio filename:(221): /data/data/com.androidbook/files/audio.mp4
10-08 21:33:25.342: ERROR/audio_input(31): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
10-08 21:33:25.342: ERROR/audio_input(31): VerifyAndSetParameter failed
10-08 21:33:25.391: ERROR/PVOMXEncNode(31): PVMFOMXEncNode-Audio_AMRNB::DoPrepare(): Got Component OMX.PV.amrencnb handle
10-08 21:33:31.660: ERROR/audio_input(31): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
10-08 21:33:31.660: ERROR/audio_input(31): VerifyAndSetParameter failed
10-08 21:33:31.680: DEBUG/Audio filename:(221): /data/data/com.androidbook/files/audio.mp4
10-08 21:33:31.740: DEBUG/Audio URI(221): Path = /external/audio/media/11
10-08 21:33:31.910: DEBUG/dalvikvm(59): GC freed 9719 objects / 504840 bytes in 151ms
10-08 21:33:31.990: WARN/BackupManagerService(59): dataChanged but no participant pkg='com.android.providers.settings' uid=10028
10-08 21:33:37.710: DEBUG/Audio filename:(221): /data/data/com.androidbook/files/audio.mp4
10-08 21:33:37.761: WARN/MediaPlayer(221): info/warning (1, 26)
10-08 21:33:37.771: ERROR/PlayerDriver(31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
10-08 21:33:37.771: ERROR/MediaPlayer(221): error (1, -4)
10-08 21:33:37.780: ERROR/Audio(221): Playback failed.
10-08 21:33:37.780: ERROR/Audio(221): java.io.IOException: Prepare failed.: status=0x1
10-08 21:33:37.780: ERROR/Audio(221): at android.media.MediaPlayer.prepare(Native Method)
10-08 21:33:37.780: ERROR/Audio(221): at com.androidbook.Audio$3.onClick(Audio.java:152)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.View.performClick(View.java:2364)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.View.onTouchEvent(View.java:4179)
10-08 21:33:37.780: ERROR/Audio(221): at android.widget.TextView.onTouchEvent(TextView.java:6540)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.View.dispatchTouchEvent(View.java:3709)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
10-08 21:33:37.780: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
10-08 21:33:37.780: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
10-08 21:33:37.780: ERROR/Audio(221): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
10-08 21:33:37.780: ERROR/Audio(221): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
10-08 21:33:37.780: ERROR/Audio(221): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
10-08 21:33:37.780: ERROR/Audio(221): at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 21:33:37.780: ERROR/Audio(221): at android.os.Looper.loop(Looper.java:123)
10-08 21:33:37.780: ERROR/Audio(221): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-08 21:33:37.780: ERROR/Audio(221): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 21:33:37.780: ERROR/Audio(221): at java.lang.reflect.Method.invoke(Method.java:521)
10-08 21:33:37.780: ERROR/Audio(221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-08 21:33:37.780: ERROR/Audio(221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-08 21:33:37.780: ERROR/Audio(221): at dalvik.system.NativeStart.main(Native Method)
10-08 21:33:37.790: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete
10-08 21:33:37.800: INFO/MediaPlayer(221): Info (1,26)
10-08 21:33:43.140: ERROR/MediaPlayer(221): stop called in state 0
10-08 21:33:43.140: ERROR/MediaPlayer(221): error (-38, 0)
10-08 21:33:43.171: WARN/MediaPlayer(221): mediaplayer went away with unhandled events
10-08 21:33:49.981: WARN/KeyCharacterMap(107): No keyboard for id 0
10-08 21:33:49.981: WARN/KeyCharacterMap(107): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-08 21:35:22.420: ERROR/AndroidRuntime(350): ERROR: thread attach failed
10-08 21:35:26.270: WARN/ActivityThread(367): Application com.androidbook is waiting for the debugger on port 8100...
2. <<<<메인 소스>>>>
package com.androidbook;
import android.app.Activity;
public class Audio extends Activity {
final private static String RECORDED_FILE = "/audio.mp4";
MediaRecorder audioListener;
MediaPlayer player;
@Override
protected void onPause() {
if (audioListener != null) {
audioListener.release();
audioListener = null;
}
if (player != null) {
player.release();
player = null;
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
audioListener = new MediaRecorder();
player = new MediaPlayer();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button record = (Button) findViewById(R.id.record);
final Button stop = (Button) findViewById(R.id.stop);
final Button stopPlayback = (Button) findViewById(R.id.stop_playback);
final Button play = (Button) findViewById(R.id.play);
record.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (audioListener == null) {
audioListener = new MediaRecorder();
}
// Fully qualified path name. In this case, we use the Files subdir
String pathForAppFiles = getFilesDir().getAbsolutePath();
pathForAppFiles += RECORDED_FILE;
Log.d("Audio filename:",pathForAppFiles );
audioListener.setAudioSource(MediaRecorder.AudioSource.MIC);
audioListener.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
audioListener.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
audioListener.setOutputFile(pathForAppFiles);
try {
audioListener.prepare();
audioListener.start();
} catch (Exception e) {
Log.e("Audio", "Failed to prepare and start audio recording", e);
}
stop.setVisibility(View.VISIBLE);
record.setVisibility(View.GONE);
play.setVisibility(View.GONE);
}
});
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (audioListener == null)
return;
audioListener.stop();
audioListener.release();
audioListener = null;
String pathForAppFiles = getFilesDir().getAbsolutePath();
pathForAppFiles += RECORDED_FILE;
Log.d("Audio filename:", pathForAppFiles);
ContentValues values = new ContentValues(10);
values.put(MediaStore.MediaColumns.TITLE, "RecordedAudio");
values.put(MediaStore.Audio.Media.ALBUM, "Your Groundbreaking Album");
values.put(MediaStore.Audio.Media.ARTIST, "Your Name");
values.put(MediaStore.Audio.Media.DISPLAY_NAME, "The Audio File You Recorded In Media App");
values.put(MediaStore.Audio.Media.IS_RINGTONE, 1);
values.put(MediaStore.Audio.Media.IS_MUSIC, 1);
values.put(MediaStore.MediaColumns.TITLE, "RecordedAudio");
values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis() / 1000);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp4");
values.put(MediaStore.Audio.Media.DATA, pathForAppFiles);
Uri audioUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
if (audioUri == null) {
Log.d("Audio", "Content resolver failed");
return;
}
// Force Media scanner to refresh now. Technically, this is
// unnecessary, as the media scanner will run periodically but
// helpful for testing.
Log.d("Audio URI", "Path = " + audioUri.getPath());
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, audioUri));
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, audioUri);
stop.setVisibility(View.GONE);
record.setVisibility(View.VISIBLE);
play.setVisibility(View.VISIBLE);
}
});
play.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (player == null) {
player = new MediaPlayer ();
}
try {
// Fully qualified path name. In this case, we use the Files subdir
String audioFilePath = getFilesDir().getAbsolutePath();
audioFilePath += RECORDED_FILE;
Log.d("Audio filename:",audioFilePath );
player.setDataSource(audioFilePath);
player.prepare();
player.start();
} catch (Exception e) {
Log.e("Audio", "Playback failed.", e);
}
stopPlayback.setVisibility(View.VISIBLE);
record.setVisibility(View.GONE);
play.setVisibility(View.GONE);
}
});
stopPlayback.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (player == null)return;
player.stop();
player.release();
player = null;
stopPlayback.setVisibility(View.GONE);
record.setVisibility(View.VISIBLE);
play.setVisibility(View.VISIBLE);
}
});
}
}
3. <<<<AndroidMainfest>>>>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidbook"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Audio"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission
android:name="android.permission.RECORD_AUDIO" />
<uses-permission
android:name="android.permission.SET_WALLPAPER"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_SETTINGS"></uses-permission>
</manifest>



