2014-01-07 34 views
0

更新:我很遗憾不能得到一个解决方案,我的问题......我无法看到可视化,同时在Android录制语音

我开发在Android的记录,我想展示形象化的同时录制。我有下课。 当我运行项目并按下开始记录时,我无法在记录时看到任何可视化器。我在真实设备上测试了波纹管代码并添加了清单的权限。

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

我从开源项目可视化工具使用的“费利克斯·帕尔默”打和自己的联系记录添加新的方法来可视化。我认为必须完美运行,但不幸的是,我的录音机真的显示。 (代码没有任何错误) 我如何解决我的问题,并看到可视化? 这是VisualizerView.java类...

import java.util.HashSet; 
import java.util.Set; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Rect; 
import android.media.MediaPlayer; 
import android.media.MediaRecorder; 
import android.media.audiofx.Visualizer; 
import android.util.AttributeSet; 
import android.view.View; 
import com.pheelicks.visualizer.renderer.Renderer; 

public class VisualizerView extends View { 

    private byte[] mBytes; 
    private byte[] mFFTBytes; 
    private Rect mRect = new Rect(); 
    private Visualizer mVisualizer; 

    private Set<Renderer> mRenderers; 

    private Paint mFlashPaint = new Paint(); 
    private Paint mFadePaint = new Paint(); 

    public VisualizerView(Context context, AttributeSet attrs, int defStyle) 
    { 
    super(context, attrs); 
    init(); 
    } 

    public VisualizerView(Context context, AttributeSet attrs) 
    { 
    this(context, attrs, 0); 
    } 

    public VisualizerView(Context context) 
    { 
    this(context, null, 0); 
    } 

    private void init() { 
    mBytes = null; 
    mFFTBytes = null; 

    mFlashPaint.setColor(Color.argb(122, 255, 255, 255)); 
    mFadePaint.setColor(Color.argb(238, 255, 255, 255)); // Adjust alpha to change how quickly the image fades 
    mFadePaint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); 

    mRenderers = new HashSet<Renderer>(); 
    } 
//----------------------------------------------- 
    public void link(MediaRecorder recorder) 
    { 
    if(recorder == null) 
    { 
     throw new NullPointerException("Cannot link to null MediaPlayer"); 
    } 
    mVisualizer = new Visualizer(0); 
    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 

    Visualizer.OnDataCaptureListener datacaptureListener1=new Visualizer.OnDataCaptureListener() 
    { 

     @Override 
     public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
       int samplingRate) 
     { 
      // TODO Auto-generated method stub 
       updateVisualizer(bytes); 
     } 

     @Override 
     public void onFftDataCapture(Visualizer visualizer, byte[] bytes, 
       int samplingRate) 
     { 
      // TODO Auto-generated method stub 
      updateVisualizerFFT(bytes); 
     } 
    }; 
     mVisualizer.setDataCaptureListener(datacaptureListener1,Visualizer.getMaxCaptureRate() /2,false,true); 
     mVisualizer.setEnabled(true); 
    } 

    //----------------------------------------------- 

这是AudioRecorder.java ...

public class AudioRecorder 
{ 
    private String name=""; 
    private static int id=0; 
    private MediaRecorder recorder = new MediaRecorder(); 
    private String path=null; 
    VisualizerView mVisualizerView; 
    private Context context=null; 
    //----------------------------------------------- 
    public AudioRecorder(Context context) 
    { 
     this.context=context; 
    } 

    //-----------------------------------------------   

    public void Record() throws IOException 
     { 

      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      recorder.setOutputFile(this.path); 
      LayoutInflater inflater = LayoutInflater.from(context); 
      View view = inflater.inflate(R.layout.recorder1, null); 
      mVisualizerView = (VisualizerView)view.findViewById(R.id.visualizer1); 
       mVisualizerView.link(recorder); 
       addLineRenderer(); 
      try 
      { 
       recorder.prepare(); 
      } 
      catch (IllegalStateException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      try 
      { 
       System.out.println("****"); 
       recorder.start(); 
      } 
      catch (Exception e) 
      { 
      } 

     } 

     //------------------------------------------  

     public void stopRecord() throws IOException 
     {   
      recorder.stop(); 
      recorder.release(); 

     } 

而且这是在我的XML可视化工具。

<LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="@drawable/highlight_shared" 
       android:orientation="vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:paddingTop="5dp" > 

       <FrameLayout 
        android:layout_width="fill_parent" 
        android:layout_height="0dp" 
        android:layout_weight="1" 
        android:background="@drawable/corner_liner" > 
       <com.pheelicks.visualizer.VisualizerView 
        android:id="@+id/visualizer1" 
        android:layout_width="match_parent" 
        android:layout_height="fill_parent"/> 
       </FrameLayout> 
      </LinearLayout> 
+0

请参阅https://github.com/steelkiwi/AndroidRecording,我希望能够帮助您 –

+0

您正在初始化Vizualizer与0,输出混合。您应该使用录像机的音频会话进行初始化。 – Tenfour04

+0

@ Tenfour04但在2.3.3版本不支持此方法。我不希望更改版本更高。那么怎么办呢? – sarah

回答

相关问题