0

正如标题所暗示的,我对声音循环有问题,因为我不知道如何打破循环。循环运行时,我无法控制设备的音量。

public void onClick(View view) {
            // TODO Auto-generated method stub
                boolean on = ((ToggleButton) view).isChecked();
                if (on){
                     boolean is = true;
                     android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
                     int buffersize = AudioRecord.getMinBufferSize(20000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
                     AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 20000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize);
                     AudioTrack atrack = new AudioTrack(AudioManager.STREAM_MUSIC, 20000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);
                     atrack.setPlaybackRate(20000);
                     byte[] buffer = new byte[buffersize];
                     arec.startRecording();
                     atrack.play();
                     while(is){
                         arec.read(buffer, 0, buffersize);
                         atrack.write(buffer, 0, buffer.length);
                     }
                     arec.stop();
                        atrack.stop();
                        is = false;
                           }
                           }});

        }
4

3 回答 3

0

使用arec.release();而atrack.release()不是这可能会帮助你arec.stop();atrack.stop 祝你好运...... :)

于 2013-11-04T11:28:41.700 回答
0

您可以使用AudioTrack.stop()AudioTrack.pause()

于 2013-11-04T09:37:18.467 回答
0

嗯......你首先设置布尔值“is = true”。然后你有一个 while 循环“while (is)”,它是一个无限循环,因为“is”将永远为真,并且永远不会在你将它设置为“假”的那一行。你想在 while-loop 中做什么?

于 2013-11-04T09:37:27.963 回答