【发布时间】:2017-06-25 07:53:13
【问题描述】:
有谁知道是否需要以特殊的方式/类型的线程、可运行、服务等将音频记录和音轨分开以便能够协同工作?现在我可以开始一个音轨,然后录音没有问题。
但是,如果我在录制时开始和停止音轨,则录音开始输出 0,就好像它被静音了一样。 (但它没有静音或停止)
如果我启动音频记录然后是音轨,那么音频记录也被“静音”。
同样奇怪的是,当我拔下并插入有线耳机时,它会再次开始录制/输出录制而不是 0(这让我觉得我的手机联想 B 和联想 C2 太便宜了(电路/硬件问题)或有构建问题)但我不知道。
是否有人听说过突然“静音”的音频记录或在未应用任何设置/方法的情况下响应拔出/插入有线耳机的音频记录的问题?
代码更新
class myRecordAndPlayer(){
public void initiateRecorder() {
if(audio.getMode()!=AudioManager.MODE_IN_CALL) {
audio.setMode(AudioManager.MODE_IN_CALL);
//audio.setSpeakerphoneOn(false); for mode in com (mode in com produces more echo/crosstalk)
}
rec = true;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
AudioRecord audioRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT) * 10);
try {
audioRecorder.startRecording();
while (rec) {
bytes_read = audioRecorder.read(buf_audio, 0, buf_audio_len);
public void initiatePlayer() {
if(!play) {
play = true;
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO);
Thread receiveThread = new Thread(new Runnable() {
@Override
public void run() {
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, BUF_SIZE, AudioTrack.MODE_STREAM);
track.play();
try {
while(play) {
track.write(bufToPlay, 0, bufToPlay.length);
【问题讨论】:
-
显示代码(初始化、启动、停止等)
-
@VolodymyrKulyk 好的,我做到了:)
标签: android multithreading service audiorecord audiotrack