2013-02-28 3 views
0
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
      AudioFormat.ENCODING_PCM_16BIT); 

    audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
     AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); 


    playfilesound(); 
} 


private void playfilesound() throws IOException 
{ 




    int count = 512 * 1024; // 512 kb 
    //Reading the file.. 
    byte[] byteData = null; 
    File file = null; 
    file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+"recordsound"); //filePath 


    byteData = new byte[(int)count]; 
    FileInputStream in = null; 
    try { 
    in = new FileInputStream(file); 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 


    int bytesread = 0, ret = 0; 
    int size = (int) file.length(); 
    audioTrack.play(); 



    while (bytesread < size) { // Write the byte array to the track 
     ret = in.read(byteData,0, count); //ret =size in bytes 

     if (ret != -1) { 
      audioTrack.write(byteData,0, ret); 
      bytesread += ret; } //ret 
     else break; 

    } //while 



    in.close(); 
    audioTrack.stop(); audioTrack.release(); 
    } 

Я использовал отладчик, чтобы выполнить код и навести на него курсор audioTrack, он выделен и введен. Файл также существует.Android AudioTrack Ошибка: неинициализированный AudioTrack

Но когда он попадает в audioTrack.play(), он выдает сообщение об ошибке своего незаконного состояния, неинтилизированного AudioTrack.

Я включил проект, который включает в себя часть файла записи. http://www.mediafire.com/?6i2r3whg7e7rs79

ответ

1

Похоже, вы назвали игру, прежде чем писать! Попробуйте это ...

int bytesread = 0, ret = 0; 
int size = (int) file.length(); 
//audioTrack.play(); <---- play called prematurely 



while (bytesread < size) { // Write the byte array to the track 
    ret = in.read(byteData,0, count); //ret =size in bytes 

    if (ret != -1) { 
     audioTrack.write(byteData,0, ret); 
     bytesread += ret; 
     audioTrack.play(); //<--- try calling it here! 
    } //ret 
    else break; 

} //while 
1

Конфигурация канала вы используете прекращено, в месте AudioFormat.CHANNEL_CONFIGURATION_MONO Использование AudioFormat.CHANNEL_IN_MONO Для записи и AudioFormat.CHANNEL_OUT_MONO играть ...

+1

Пожалуйста, используйте английский и только английский здесь на SO , –

+0

Por favor, use el inglés y sólo el inglés aquí en SO. – NobodyNada