2013-08-30 32 views
3

在我的項目中,我使用mediaplayer錄製了聲音並保存爲.3gp文件,但是當我想在播放時使用某些音頻效果或快進或播放音頻音調時播放它。我已經使用mediaplayer但不工作。然後我使用audiotrack,但audiotrack只需要bytestream作爲輸入播放。我只想播放.3gp文件並在播放時更改音調。我在下面使用這一個。 幫我...在此先感謝...在播放時更改.3gp文件的音高

public void play() { 


     File path = new File(
        Environment.getExternalStorageDirectory().getAbsolutePath() 
          + "/sdcard/meditest/"); 
     File[] f=path.listFiles(); 
      isPlaying=true; 
      int bufferSize = AudioTrack.getMinBufferSize(outfrequency, 
        channelConfigurationout, audioEncoding); 
      short[] audiodata = new short[bufferSize]; 

      try { 
       DataInputStream dis = new DataInputStream(
         new BufferedInputStream(new FileInputStream(
           f[0]))); 

       audioTrack = new AudioTrack(
         AudioManager.STREAM_MUSIC, outfrequency, 
         channelConfigurationout, audioEncoding, bufferSize, 
         AudioTrack.MODE_STREAM); 
       audioTrack.setPlaybackRate((int) (frequency*1.5)); 
       AudioManager audioManager =  (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 
       // Set the volume of played media to maximum. 


       audioTrack.setStereoVolume(1.0f,1.0f); 
       Log.d("Clapper","player start"); 
       audioTrack.play(); 

       while (isPlaying && dis.available() > 0) { 
        int i = 0; 
        while (dis.available() > 0 && i < audiodata.length) { 
         audiodata[i] = dis.readShort(); 
         i++; 
        if(i/50==0) 
         Log.d("Clapper", "playing now"+i); 
        } 
        audioTrack.write(audiodata, 0, audiodata.length); 

       } 
       Log.d("Clapper","AUDIO LENGTH: "+String.valueOf(audiodata)); 
       dis.close(); 
       audioTrack.stop(); 


      } catch (Throwable t) { 
       Log.e("AudioTrack", "Playback Failed"); 
      } 

      Log.d("Clapper","AUDIO state: "+String.valueOf(audioTrack.getPlayState())); 
      talkAnimation.stop(); 
      if(audioTrack.getPlayState()!=AudioTrack.PLAYSTATE_PLAYING) 
       { 


       runOnUiThread(new Runnable() { 

        public void run() { 

         // TODO Auto-generated method stub 

         imgtalk.setBackgroundResource(R.drawable.talk1); 
        } 
       }); 


       } 
     } 

回答

1

我試過叫Sonic的庫。它基本上用於演講,因爲它使用PSOLA算法來改變音調和節奏。 Sonic Library

0

我收到了你的問題.Media播放器不支持茶

0

考慮使用SoundPool

http://developer.android.com/reference/android/media/SoundPool.html

它支持改變實時播放中的音高

播放速率也可以改變。 1.0的播放速率會導致聲音以其原始頻率播放(如果需要,重新採樣至硬件輸出頻率)。 2.0的播放速率會使聲音以原始頻率的兩倍播放,0.5的播放速度會使其以原始頻率的一半播放。播放速率範圍是0.5到2.0。

一旦加載聲音並開始播放,應用程序就可以通過調用SoundPool.play()來觸發聲音。播放流可以暫停或恢復,應用程序還可以通過實時調整播放速率來改變音高,以獲得多普勒效應或綜合效果。

http://developer.android.com/reference/android/media/SoundPool.html#setRate(int, float)

0

如果你想改變它的音調,同時播放聲音,你必須使用聲音池。這是做this.you可以快進你的演奏一定量,看看你覺得最好的辦法球場已經改變了。

相關問題