[Java] Android 透过AudioTrack class来播放音频文件 →→→→→进入此内容的聊天室

来自 , 2019-04-20, 写在 Java, 查看 117 次.
URL http://www.code666.cn/view/3983e151
  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.TextView;
  6. import android.media.MediaPlayer;
  7. import android.media.AudioManager;
  8. import android.media.AudioTrack;
  9. import android.media.AudioFormat;
  10.  
  11. public class LRChannel extends Activity {
  12.     private Button lButton;
  13.     private Button rButton;
  14.     private TextView myTextView;
  15.     private MediaPlayer mMediaPlayer01 = null;
  16.     private AudioTrack aAudioTrack01 = null;
  17.     private String strFilePath = "/sdcard/test.mp3";
  18.     private float midVol = 0;
  19.    
  20.     /** Called when the activity is first created. */
  21.     @Override
  22.     public void onCreate(Bundle savedInstanceState) {
  23.         super.onCreate(savedInstanceState);
  24.         setContentView(R.layout.main);
  25.        
  26.         lButton = (Button) findViewById(R.id.ButtonL);
  27.         rButton = (Button) findViewById(R.id.ButtonR);
  28.         myTextView = (TextView) findViewById(R.id.myTextView);
  29.        
  30.         // left button response
  31.         lButton.setOnClickListener(new Button.OnClickListener()
  32.         {
  33.           @Override
  34.           public void onClick(View arg0)
  35.           {
  36.             // if ( checkSDCard() )
  37.             // {
  38.                 // playVideo(strFilePath);
  39.                 playSound(strFilePath, 0);
  40.             // }
  41.           }
  42.         });
  43.        
  44.         // right button response
  45.         rButton.setOnClickListener(new Button.OnClickListener()
  46.         {
  47.           @Override
  48.           public void onClick(View arg0)
  49.           {
  50.               playSound(strFilePath, 1);
  51.           }
  52.         });
  53.     }
  54.    
  55.     private void playVideo(String strPath)
  56.     {
  57.         mMediaPlayer01 = new MediaPlayer();
  58.         mMediaPlayer01.setAudioStreamType(AudioManager.STREAM_MUSIC);
  59.        
  60.         try
  61.         {
  62.             mMediaPlayer01.setDataSource(strPath);
  63.         }
  64.         catch (Exception e)
  65.         {
  66.             // TODO Auto-generated catch block
  67.             myTextView.setText("setDataSource Exceeption:" + e.toString());
  68.             e.printStackTrace();
  69.         }
  70.        
  71.         try
  72.         {
  73.             mMediaPlayer01.prepare();
  74.         }
  75.         catch (Exception e)
  76.         {
  77.             // TODO Auto-generated catch block
  78.             myTextView.setText("prepare Exceeption:"+e.toString());
  79.             e.printStackTrace();
  80.         }
  81.        
  82.         mMediaPlayer01.start();
  83.         myTextView.setText("Playing");
  84.        
  85.         mMediaPlayer01.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
  86.         {
  87.             public void onCompletion(MediaPlayer arg0)
  88.             {
  89.                 // TODO Auto-generated method stub
  90.                 myTextView.setText("Playing stop!");
  91.             }
  92.         });
  93.     }
  94.    
  95.     // iChannel = 0 means left channel test, iChannel = 1 means right channel test.
  96.     private void playSound(String strPath, int iChannel)
  97.     {
  98.       // If now is playing...
  99.       if ( aAudioTrack01 != null )
  100.       {
  101.           aAudioTrack01.release();
  102.           aAudioTrack01 = null;
  103.       }
  104.       // Get the AudioTrack minimum buffer size
  105.       int iMinBufSize = AudioTrack.getMinBufferSize(44100,
  106.                           AudioFormat.CHANNEL_CONFIGURATION_STEREO,
  107.                           AudioFormat.ENCODING_PCM_16BIT);
  108.       if ( iMinBufSize == AudioTrack.ERROR_BAD_VALUE || iMinBufSize == AudioTrack.ERROR )
  109.       {
  110.           return;
  111.       }
  112.       // Constructor a AudioTrack object
  113.       try
  114.       {
  115.           aAudioTrack01 = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
  116.                     AudioFormat.CHANNEL_CONFIGURATION_STEREO,
  117.                     AudioFormat.ENCODING_PCM_16BIT,
  118.                     iMinBufSize,
  119.                     AudioTrack.MODE_STREAM);
  120.       }
  121.       catch (IllegalArgumentException iae)
  122.       {
  123.           myTextView.setText("new AudioTrack Exceeption:" + iae.toString());
  124.           iae.printStackTrace();
  125.       }
  126.       // Write data to buffer
  127.       byte data[] = new byte[iMinBufSize];
  128.       aAudioTrack01.write(data, 0, data.length);
  129.       aAudioTrack01.write(data, 0, data.length);
  130.       float lValue = 0;
  131.       float rValue = 0;
  132.        
  133.       if ( iChannel == 0 )
  134.       {
  135.           lValue = 1.0f;
  136.           rValue = 0.0f;
  137.       }
  138.       else if ( iChannel == 1 )
  139.       {
  140.           lValue = 0.0f;
  141.           rValue = 1.0f;
  142.       }
  143.      
  144.       aAudioTrack01.play();
  145.       if ( aAudioTrack01.setStereoVolume(lValue, rValue) == AudioTrack.SUCCESS )
  146.       {
  147.           myTextView.setText("setStereoVolume successfully!");
  148.       }
  149.       aAudioTrack01.stop();
  150.       if ( aAudioTrack01.setStereoVolume(midVol, midVol) == AudioTrack.SUCCESS )
  151.       {
  152.           myTextView.setText("Restore setStereoVolume successfully!");
  153.       }
  154.       aAudioTrack01.release();
  155.       aAudioTrack01 = null;
  156.     }
  157.    
  158.     private boolean checkSDCard()
  159.     {
  160.       if ( android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED) )
  161.       {
  162.           return true;
  163.       }
  164.       else
  165.       {
  166.           return false;
  167.       }
  168.     }
  169.    
  170.     @Override
  171.     protected void onDestroy() {
  172.         super.onDestroy();
  173.         // TODO Auto-generated method stub
  174.         if ( aAudioTrack01 != null ) {
  175.             aAudioTrack01.setStereoVolume(midVol, midVol);
  176.             aAudioTrack01.release();
  177.             aAudioTrack01 = null;
  178.         }
  179.     }
  180.    
  181. }
  182. //java/6376

回复 "Android 透过AudioTrack class来播放音频文件"

这儿你可以回复上面这条便签

captcha