"시작하세요 안드로이드 프로그래밍"책을 보면서 녹음하는 부분 연습하고 있는데
녹음을 하고 플레이하면 아무소리도 없네요....ㅠㅜ
녹음하는데 문제인건지... 플레이 하는데 문제인건지...
소스 상에는 문제가 없어 보이는데 어디가 문제인지 한번 봐주세요!!
파일도 같이 첨부했어요~ 한번 돌려봐 주세요~
===>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>